来自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