本章节翻译by chenchensmail@163.com 原文:
OpenMP Execution Model (intel.com)
有多种工具和机制可用于分析 OpenMP 程序的性能并识别瓶颈。
-
Intel® VTuneTM Profiler
Intel® VTuneTM Profiler 可以用于分析应用程序的性能。 它有助于识别应用程序中最耗时(热点)的函数,应用程序是 CPU 还是 GPU 限制, 它如何有效地将代码卸载到 GPU ,以及最佳的代码部分来优化顺序性能和线程性能等。 有关 VTune Profiler 的更多信息,请参阅 Intel® VTune™ Profiler User Guide。
-
Intel® Level Zero 和 OpenCL 跟踪工具
onetrace
是一个针对 Level Zero 和 OpenCL 后端的主机和设备活动跟踪工具, 支持 SYCL 和 OpenMP GPU 部署。有关此工具的信息,请参阅本文档的 Intel® GPU 分析工具接口 部分。当使用
onetrace
与-h
和-d
选项时,查看跟踪末尾的主机和设备端摘要, 在 “API Timing Results” 和 “Device Timing Results” 标题下。请注意,仅显式数据传输出现在跟踪中。在统一共享内存(USM)中分配的数据传输可能不会出现在跟踪中。
注意:
-
onetrace
对于确认 oneMKL kernel 部署是否发生很有用。环境变量OMP_TARGET_OFFLOAD=MANDATORY
不影响 oneMKL ,因此不能用于保证 oneMKL kernel (以及其他 kernel )部署是否发生。 检查 oneMKL kernel (以及其他 kernel )部署是否发生的一种方法是查看在onetrace
生成的 跟踪中 “Device Timing Results” 下列出了哪些 kernel。
SYCL_PI_TRACE=2 环境变量. DPC++ runtime 插件接口( PI ) 是 SYCL runtime 设备无关部分与控制设备上执行的设备特定运行时层之间的接口层。 设置 SYCL_PI_TRACE=2 提供所有 PI 调用及其参数和返回值的跟踪。 有关更多信息,请参阅 DPC++ Runtime Plugin Interface documentation.
LIBOMPTARGET_DEBUG=1 环境变量. LIBOMPTARGET_DEBUG 控制是否显示来自 libomptarget.so 的调试信息。
调试输出提供了有关诸如 ND-range 划分循环迭代、主机与设备之间数据传输、内存使用等方面的有用信息, 如本文档中 :Using More GPU Resources 和 :Minimizing Data Transfers and Memory Allocations 部分所示。
有关 LIBOMPTARGET_DEBUG 的更多信息 请参阅 LLVM/OpenMP Runtimes.
LIBOMPTARGET_PLUGIN_PROFILE 环境变量. LIBOMPTARGET_PROFILE 允许 libomptarget.so 生成时间配置文件输出。有关更多信息,请参阅 LLVM/OpenMP Runtimes.
编译器生成的设备汇编代码转储. 你可以通过在进行 Just-In-Time (JIT) 编译之前 (或在 Ahead-Of-Time (AOT) 编译情况下运行程序之前)设置以下两个环境变量来转储编译器生成的汇编代码。
export IGC_ShaderDumpEnable=1 export IGC_DumpToCustomDir=my_dump_dir
LLVM IR ,汇编和 GenISA 文件将被转储到名为 my_dump_dir
(或你选择的任何其他名称)的子目录中。 在此子目录中,你将找到每个 kernel 的 *.asm
文件。文件名指示 kernel 发生的源代码行号。 文件头提供有关 SIMD 宽度,编译器选项以及其他信息的信息。
此外,在 my_dump_dir
中,你将找到一个名为 HardwareCaps.txt
的文件,该文件提供有关 GPU 的信息, 例如 EU 计数,线程计数,切片计数等。
有关 Intel® 图形编译器以及可用标志(环境变量)列表以控制编译的更多信息,请参阅 Intel® Graphics Compiler for OpenCL™ Configuration Flags for Linux Release
有关调试和分析的其他信息,请参阅本文档的 Performance Profiling and Analysis 部分。