主要内容

来自CWT的CUDA代码

此示例显示如何使用生成的CUDA代码生成MEX文件以执行连续小波变换(CWT)。

首先,确保您拥有一个支持CUDA的GPU和NVCC编译器。看到GPU环境检查和设置应用程序(GPU编码器)确保您具有正确的配置。

创建GPU编码器配置对象。

cfg = coder.gpuconfig('mex');

在1,000Hz处产生100,000个样本的信号。信号由两个余弦波组成,具有不相交的时间支持。金宝app

t = 0:.001 :( 1E5 * 0.001)-0.001;X = COS(2 * PI * 32 * T)。*(t> 10&t <= 50)+ cos(2 * pi * 64 * t)。*(t> = 60&t <90)+......0.2 * randn(尺寸(t));

施放信号以使用单精度。GPU计算通常以单精度更有效地完成。但是,如果您的NVIDIA GPU支持它,您也可以为双重精度生成代码。金宝app

x =单(x);

生成GPU MEX文件和代码生成报告。要允许生成MEX文件,必须指定三个输入参数的属性(类,大小和复杂性):

  • Coder.typeof(单(0),[1 1E5])指定包含真实的长度为100,000的行向量价值观。

  • coder.typeof('c',[1 inf])指定任意长度的字符数组。

  • Coder.typeof(0)指定一个真实的值。

Codegen.CWT.-Config.CFG.-  args.{coder.typeof(单(0),[1 1E5]),Coder.typeof('c',[1 inf]),coder.typeof(0)}-报告
代码生成成功:要查看报告,请打开('codegen / mex / cwt / html / export.mldatx')。

-report标志是可选的。使用-报告生成代码生成报告。在里面概要该报告的标签,您可以找到一个GPU代码指标链接,提供详细信息,如生成的CUDA内核数量以及分配多少内存。

在数据上运行MEX文件并绘制标量程表。确认绘图与两个不相交的余弦波一致。

[CFS,F] = CWT_MEX(x,'莫尔斯',1E3);图片('xdata',t,'ydata',F,'cdata',abs(cfs),'cdatamapping''缩放')设置(GCA,'yscale''log')轴Xlabel('秒')ylabel('赫兹')标题('双音信号的CWT'

在上面运行CWT命令而不附加_MEX.。确认MATLAB,GPU MEX刻度图是相同的。

[CFS2,F2] = CWT(X,'莫尔斯',1E3);Max(ABS(CFS2(:) -  CFS(:)))
ANS =单次6.7583E-07

也可以看看

|