这个例子向您展示了如何为生成的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.
要验证运行此示例所需的编译器和库是否正确设置,请使用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的机器上完成
第3节展示了运行时间高于阈值的GPU调用的完整轨迹。的“阈值”
参数定义为一次运行(不包括第一次运行)的最大执行时间的部分。例如,在对顶层的9次调用中fog_rectification
函数,如果第三次调用占用了最大时间(
,女士),则最大执行时间为
毫秒。所有GPU调用占用超过
毫秒显示在本节中。将光标放在调用上,将显示每个调用的其他相关非计时相关信息的运行时值。例如,把光标放在上面fog_rectification_kernel10
显示了该调用的块维度、网格维度和KiB中的静态共享内存大小。该跟踪对应于花费最大时间的运行。
报告中的第4节显示了在第3节中显示的GPU调用的概要。的cudaFree
被称为17次每运行fog_rectification
17个电话的平均时间cudaFree
超过9次fog_rectification
是1.7154毫秒。这个总结是按时间降序排列的,让用户知道哪个GPU调用占用了最大的时间。