我有一个pyopencl程序,计算时间很长(每次运行3~5个小时)。我有几颗种子在循环中一个接一个地开始。所以我有这样的东西:
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我测量了时间,我得到了如下结果:
time命令测量)我想知道:
我知道开销取决于程序,而且我知道python不如纯C或CPP快。但我相信,当我把我所有的沉重计算转移到OpenCL内核时,我的损失不会超过5-7%。如果我错了,请纠正我。
OpenCL,AMD
发布于 2013-07-02 08:30:18
你是如何测量OCL时间的?只使用以下内容:
my_event.profile.end - my_event.profile.start如果是这样的话,您也可以使用另一个这样的度量:
my_event.profile.start - my_event.profile.queued这个度量度量用户应用程序和运行时在执行之前所花费的时间,因此产生了开销。这个指标在4.4.1节的AMD编程指南中提出。
他们还给出了关于分析的警告,解释命令可以通过批处理发送,因此
作为批处理提交的命令报告相同的启动时间和相同的结束时间。
如果我还记得,NVIDIA会流命令。但是在任何情况下,您都可以使用它来减少开销。例如,与其拥有:
Cl_prog.kernel1(…).wait()
Cl_prog.kernel2(…).wait()你可以这样做:
Event1 = Cl_prog.kernel1(…)
Event2 = Cl_prog.kernel2(…)
Event1.wait()
Event2.wait()诸若此类。
但我离题了;现在,为了具体回答您的问题,这里有一些来自我前面提到的部分(这是AMD的输入,但我想NVIDIA应该差不多一样):
https://stackoverflow.com/questions/17409013
复制相似问题