主要内容

跟踪CUDA代码生成与MATLAB源代码

这个例子展示了如何跟踪MATLAB之间(重点部分)®源代码和生成的CUDA®代码。跟踪源代码和生成的代码可以帮助您:

  • 理解代码生成器将你的算法映射到GPU内核。

  • 在生成的代码调试问题。

  • 生成的代码的质量进行评估。

你可以通过使用这些方法之一:跟踪

  • 配置GPU编码器™来生成代码,包括MATLAB源代码注释。在评论中,立即可追溯性标记之前的每一行源代码。可追溯性标记提供了源代码的位置的详细信息。如果你有嵌入式编码器®在代码生成报告,跟踪标签链接到相应的MATLAB源代码。

  • 与嵌入式编码,产生代码生成报告,包括互动的可追溯性。交互式报告中跟踪帮助你想象的MATLAB源代码之间的映射和生成的C / c++代码。看到之间的交互跟踪MATLAB代码和生成的C / c++代码(嵌入式编码)

生成的可追溯性标记

创建的MATLAB源代码

为了说明可追溯性标记,这个示例使用了曼德尔勃特集合的实现通过使用标准的MATLAB命令在CPU上运行。这个实现是基于提供的代码与MATLAB实验电子书的克里夫硅藻土。

了曼德尔勃特集合中该地区复平面组成的值z0的定义的轨迹方程仍然有限k→∞

z k + 1 = z k 2 + z 0 , k = 0 , 1 ,

创建一个调用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)之间的限制规定xlimylim。您可以使用这些输入验证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可以标记错误。

另请参阅

|||

相关的话题