我正在尝试优化pyOpenCL程序。出于这个原因,我想知道是否有办法分析程序并查看大部分时间所需的位置。
你知道如何解决这个问题吗?
提前致谢
岸堤
编辑:例如,CUDA的nvidias nvprof会为pyCuda提供技巧,但不适用于pyOpenCL。
答案 0 :(得分:3)
是的,绝对存在 - 您可以分析在设备上运行的各个PyOpenCL事件,您也可以在主机上分析整个程序。
通过将内存复制到设备,在设备上运行内核以及从设备中复制内存来返回PyOpenCL事件。
以下是分析设备事件的示例:
event = cl.enqueue_copy(queue, np_array, cl_array)
event.wait()
print (event.profile.end-event.profile.start)*1e-9
以下是主机配置文件的示例:
from time import time, strftime, gmtime
start_time = time()
# ... do some stuff like the above ^
end_time = time()
print strftime('%H:%M:%S', gmtime(end_time - start_time))
我还没有看到更全面的方式来分析PyOpenCL程序。希望有所帮助!
答案 1 :(得分:1)
确定,
我找到了一种方法:Cuda Toolkit 3.1
为openCL提供了一个分析(更高版本不会)。在此程序包中使用compute visual profiler
(computeprof.exe)
。它适用于Windows和Linux here,可以与新的Cuda Toolkit一起安装
它看起来像这样:
我希望这也有助于其他人。
答案 2 :(得分:1)
基本上,Nvidia的Visual Profiler(nvvp)曾用于分析OpenCL(即使是通过pyopenCL),但Nvidia停止更新它。有一个巧妙的技巧,我从pyopenCL邮件列表中提取并使用来自here的信息与nvvp合作。
基本步骤是:
nvvp.cfg
文件。示例:
profilelogformat CSV
streamid
gpustarttimestamp
gpuendtimestamp
gridsize
threadblocksize
dynsmemperblock
stasmemperblock
regperthread
memtransfersize
示例:
#!/bin/bash
export {CL_,COMPUTE_}PROFILE=1
export COMPUTE_PROFILE_CONFIG=nvvp.cfg
python OpenCL_test.py
这会将一个日志文件放在您可以检查的工作目录中。如果将“OPENCL_”的每次出现更改为“CUDA_”,则可以将此文件导入nvvp。有关详细信息,请参阅提供的链接。
答案 3 :(得分:1)
除了benshope's answer之外,您还应通过
创建命令队列来启用它<form method="POST" onSubmit={this.handleSubmit} ref={(form) => {this.form = form;} } id="signupForm">
PyOpenCL examples包含执行基本概要分析的基准测试脚本(请检查queue = cl.CommandQueue(context,
properties=cl.command_queue_properties.PROFILING_ENABLE)
,benchmark.py
和dump-performance.py
。)
答案 4 :(得分:0)
AMD的CodeXL运作良好。