我有一个pyopencl程序,可以进行长时间的计算(每次运行3-5小时)。我有几个内核在循环中一个接一个地开始。所以,我有这样的事情:测量和最小化OpenCL开销
prepare_kernels_and_data()
for i in range(big_number): # in my case big_number is 400000
load_data_to_device(i) # ~0.0002s
run_kernel1(i) # ~0.0086s
run_kernel2(i) # ~0.00028s
store_data_from_device(i) # ~0.0002s
我测量的时候,我得到了以下几点:
- 系统时间为4:30小时(由Linux的测量
time
命令) - 纯OpenCL的基于事件的定时是3:30小时(负载+计算+商店)
我想知道:
- OpenCL程序的最小开销有多大?在我的情况下,它就像35%
- 我应该信任基于事件的时间吗?
- 启用分析是否会为整个程序执行时间增加一些重要时间?
我知道开销取决于程序,我知道python不如纯C或CPP快。但我相信,当我将所有重要的计算转移到OpenCL内核时,我可以减少不超过5-7%。如果我错了,请纠正我。
P.S. AMD OpenCL,AMD GPU