跟踪CUDA代码生成与MATLAB源代码
这个例子展示了如何跟踪MATLAB之间(重点部分)®源代码和生成的CUDA®代码。跟踪源代码和生成的代码可以帮助您:
理解代码生成器将你的算法映射到GPU内核。
在生成的代码调试问题。
生成的代码的质量进行评估。
你可以通过使用这些方法之一:跟踪
配置GPU编码器™来生成代码,包括MATLAB源代码注释。在评论中,立即可追溯性标记之前的每一行源代码。可追溯性标记提供了源代码的位置的详细信息。如果你有嵌入式编码器®在代码生成报告,跟踪标签链接到相应的MATLAB源代码。
与嵌入式编码,产生代码生成报告,包括互动的可追溯性。交互式报告中跟踪帮助你想象的MATLAB源代码之间的映射和生成的C / c++代码。看到之间的交互跟踪MATLAB代码和生成的C / c++代码(嵌入式编码)。
生成的可追溯性标记
创建的MATLAB源代码
为了说明可追溯性标记,这个示例使用了曼德尔勃特集合的实现通过使用标准的MATLAB命令在CPU上运行。这个实现是基于提供的代码与MATLAB实验电子书的克里夫硅藻土。
了曼德尔勃特集合中该地区复平面组成的值z0的定义的轨迹方程仍然有限k→∞。
创建一个调用MATLAB函数mandelbrot_count.m
用下面的代码行。这段代码是一个矢量化的MATLAB实现了曼德尔勃特集合,每一个点(xGrid yGrid)
在网格,计算迭代索引数
在定义的轨迹方程达到的距离2
从原点。然后它返回的自然对数数
,产生了曼德尔勃特集合的颜色编码的阴谋。
函数数= mandelbrot_count (maxIterations xGrid yGrid)%添加kernelfun编译指示触发内核创建coder.gpu.kernelfun;曼德布洛特百分比计算z0 = xGrid + 1我* yGrid;数= 1(大小(z0));z = z0;为n = 0: maxIterations z z =。* z + z0;在= abs (z) < = 2;数=数+内部;结束数=日志(数);
创建测试向量
创建测试向量的入口点函数通过使用以下的代码行。脚本生成一个网格的部分(1000 x 1000x)和虚部(y)之间的限制规定xlim
和ylim
。您可以使用这些输入验证mandelbrot_count
入口点函数和情节产生的曼德尔勃特集合。
maxIterations = 500;gridSize = 1000;xlim = [-0.748766713922161, -0.748766707771757];ylim = [0.123640844894862, 0.123640851045266];xlim x = linspace (xlim (1), (2), gridSize);ylim y = linspace (ylim (1), (2), gridSize);[xGrid, yGrid] = meshgrid (x, y);
生成的可追溯性标记
生产可追溯性标记在生成的代码中,使一代的MATLAB源代码注释。
在GPU编码器应用,集MATLAB源代码注释来
是的
。在代码生成配置对象,创建一个
coder.gpuConfig
对象和设置MATLABSourceComments
财产真正的
。cfg = coder.gpuConfig (“dll”,“是”,真正的);cfg。GenerateReport = true;cfg。MATLABSourceComments = true;cfg.GpuConfig。CompilerFlags =“——fmad = false”;codegen配置cfgarg游戏{maxIterations, xGrid, yGrid}mandelbrot_count
请注意
的
——fmad = false
当传递到国旗学校网站
,指示编译器禁用浮点Multiply-Add (FMAD)优化。此选项设置,防止生成的代码,因为建筑中的数值不匹配不同的CPU和GPU。有关更多信息,请参见数值CPU和GPU之间的区别。
访问报告
打开代码生成报告,点击查看报告。
代码生成报告命名report.mldatx
。它位于html
代码生成输出文件夹的子文件夹。如果你有MATLAB R2018a或以后,你可以打开report.mldatx
文件通过双击它。
在MATLAB源窗格中,选择mandelbrot_count.m
。你看到代码的MATLAB源代码窗格。
绿色的GPU旁边的标记mandelbrot_count
函数表明,生成的代码有两个CPU和GPU部分。绿色的竖线表示映射到GPU的代码行。看到信息的类型变量或表达式和相应的名称GPU核函数、暂停/变量或表达式。点击它,当您选择突出显示的代码的代码变成了蓝色,你甚至可以看到的信息当你移动你的指针的选择。代码仍然选择,直到您按下Esc
或选择不同的代码。
查看CUDA代码生成的mandelbrot_count.m
入口点函数,选择mandelbrot_count.cu
从生成的代码窗格。
可追溯性标记的格式
在生成的代码中,可追溯性标记出现的MATLAB源代码之前立即发表评论。标签的格式是:<文件名>:<行号>
。
例如,这个评论表明代码z0 = xGrid + 1我* yGrid;
出现在一行5
的源文件mandelbrot_count.m
。
/ *“mandelbrot_count: 5”z0 = xGrid + 1我* yGrid;
可追溯性标记的局限性
你不能包括MATLAB源代码注释:
MathWorks®工具箱函数
p代码
评论可以改变的外观或位置:
即使实现代码消除,例如,由于常数合并,评论还可以出现在生成的代码中。
如果消除了一个完整的功能或代码块,评论可以消除从生成的代码。
对于某些优化,评论可以在生成的代码分开。
即使你不选择包括源代码注释在生成的代码中,生成的代码包括法律规定的评论的MATLAB源代码。
函数有多个输出没有得到突出。
调用
编码器
等功能coder.nullcopy
不会突出显示映射到代码库调用,比如cuDNN cuBLAS和cuFFT不会突出显示。因此,功能完全映射到GPU可以标记错误。
另请参阅
codegen
|coder.gpuConfig
|coder.CodeConfig
|coder.EmbeddedCodeConfig