主要内容

生成代码的GPU执行分析

这个例子向您展示了如何为生成的CUDA®代码生成一个执行分析报告gpucoder.profile函数。以雾整流为例说明了这一概念。

先决条件

  • CUDA支持NVIDIA®GPU。

  • NVIDIA CUDA工具包和驱动程序。

  • 编译器和库的环境变量。有关编译器和库支持的版本的信息,请参见万博1manbetx第三方硬件.有关设置环境变量,请参见设置前提产品s manbetx 845

  • 本例的概要分析工作流依赖于nvprof从NVIDIA的工具。在CUDA工具箱v10.1中,NVIDIA限制只有管理员用户才能访问性能计数器。若要让所有用户都能使用GPU性能指标,请参见具体操作步骤https://developer.nvidia.com/ERR_NVGPUCTRPERM

验证GPU环境

要验证运行此示例所需的编译器和库是否正确设置,请使用coder.checkGpuInstall函数。

envCfg = coder.gpuEnvConfig (“主机”);envCfg。BasicCodegen = 1;envCfg。安静= 1;coder.checkGpuInstall (envCfg);

准备代码生成和分析

fog_rectification.m函数以模糊图像作为输入,并返回去雾图像。要生成CUDA代码,创建一个带有动态库的GPU代码配置对象(“dll”)建造类型。因为gpucoder.profile函数只接受一个Embedded Coder配置对象编码器。EmbeddedCodeConfig配置对象,即使选项没有明确地被选择。

inputImage = imread (“foggyInput.png”);输入= {inputImage};designFileName =“fog_rectification”;cfg = coder.gpuConfig (“dll”);cfg.GpuConfig.MallocMode =“离散”

生成执行分析报告

运行gpucoder.profile使用0.003的阈值查看SIL执行报告。阈值0.003只是一个具有代表性的数字。如果生成的代码有很多CUDA API或内核调用,很可能每个调用只占总时间的一小部分。建议设置一个较低的阈值(在0.001-0.005之间)以生成有意义的分析报告。不建议将执行次数值设置为一个非常低的数字(小于5),因为它不能生成一个典型执行概要文件的精确表示。

gpucoder.profile(designFileName, inputs,...“CodegenConfig”cfg,“阈值”, 0.003,“我会”10);
要终止执行,可以使用clear fog_rectification_sil execution profiling data。打开仿真数据检查器。终止后可用的执行分析报告。###停止SIL执行' fog_整流'

的代码执行分析报告fog_rectification函数

代码执行分析报告提供了基于从SIL或PIL执行中收集的数据的度量。执行时间是根据添加到SIL或PIL测试工具或为每个组件生成的代码内的仪器探头记录的数据计算的。有关更多信息,请参见视图执行时间(嵌入式编码).这些数字具有代表性。实际值取决于硬件设置。该分析使用MATLAB R2020a在一台具有6核3.5GHz Intel®Xeon®CPU和NVIDIA TITAN XP GPU的机器上完成

1.总结

2.代码的剖面部分

3.用于fog_整流的GPU分析跟踪

第3节展示了运行时间高于阈值的GPU调用的完整轨迹。的“阈值”参数定义为一次运行(不包括第一次运行)的最大执行时间的部分。例如,在对顶层的9次调用中fog_rectification函数,如果第三次调用占用了最大时间( t 女士),则最大执行时间为 t 毫秒。所有GPU调用占用超过 T h r e 年代 h o l d t 毫秒显示在本节中。将光标放在调用上,将显示每个调用的其他相关非计时相关信息的运行时值。例如,把光标放在上面fog_rectification_kernel10显示了该调用的块维度、网格维度和KiB中的静态共享内存大小。该跟踪对应于花费最大时间的运行。

4.用于fog_整流的GPU分析概要

报告中的第4节显示了在第3节中显示的GPU调用的概要。的cudaFree被称为17次每运行fog_rectification17个电话的平均时间cudaFree超过9次fog_rectification是1.7154毫秒。这个总结是按时间降序排列的,让用户知道哪个GPU调用占用了最大的时间。