主要内容

来自CWT的CUDA代码

这个例子展示了如何使用生成的CUDA代码生成一个MEX文件来执行连续小波变换(CWT)。

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

创建GPU编码器配置对象。

cfg = code . gpuconfig (“墨西哥人”);

生成1000hz下100,000个样本的信号。信号由两个时间支持不相交的余弦波组成。金宝app

T = 0:.001:(1e5*0.001)-0.001;X = cos(2* *32*t)*(t > 10 & t<=50)+...因为(2 *π* 64 * t)。*(t >= 60 & t < 90)+...0.2 * randn(大小(t));

使用单精度铸造信号。GPU计算通常在单精度下更有效。如果你的NVIDIA GPU支持,你也可以生成双倍精度的代码。金宝app

X =单(X);

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

  • coder.typeof(单(0)1 e5 [1])指定长度为100,000的包含实数的行向量值。

  • 编码器。typeof(“c”,[1正])指定任意长度的字符数组。

  • coder.typeof (0)指定一个实数价值。

Sig = code .typeof(single(0),[1 1e5]);Wav = code .typeof(“c”[1正]);SFRQ = code .typeof(0);codegen配置cfgarg游戏{团体,wav, sfrq}报告
代码生成成功:查看报告

-report标志是可选的。使用报告生成代码生成报告。在总结在报表的TAB中,可以找到GPU代码度量链接,它提供了详细的信息,如生成的CUDA内核的数量和分配了多少内存。

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

[cfs,f] = cwt_mex(x,“莫尔斯”1 e3);图像(“XData”t“YData”f“CData”、abs (cfs)、“CDataMapping”“缩放”甘氨胆酸)组(,“YScale”“日志”)轴包含(“时间(秒)”) ylabel (“频率(赫兹)”)标题(《双音信号的标量图》

运行上面的CWT命令,但不附加_墨西哥人.确认MATLAB和GPU的MEX标度图一致。

[cfs2,f2] = cwt(x,“莫尔斯”1 e3);马克斯(abs (cfs2 (:) cfs (:)))
ans =7.3380 e-07

另请参阅

|