【发布时间】:2014-10-29 03:10:36
【问题描述】:
我一直在尝试使用 PyOpenCL 在 GPU 上对我的 FFT 程序进行基准测试。在使用 OpenCL 的“分析”和 python 的“时间”模块时,我看到了完全不同的结果。要使用分析,我会这样做,
queue = cl.CommandQueue(ctx,properties=cl.command_queue_properties.PROFILING_ENABLE)
<other codes>
for i in range(N):
events.append(prg3.butterfly(queue,(len(twid),),None,twid_dev,<buffers>))
events[i].wait()
for i in range(N):
elapsed = elapsed + 1e-9*(event[i].profile.end - event[i].profile.start)
print elapsed
虽然时间模块可以这样使用,
k=time.time()
for i in range(N):
event = prg3.butterfly(queue,(len(twid),),None,twid_dev,<buffers>)
print time.time()-k
由于这两个在 N=20 时给出完全不同的结果(而答案保持不变且正确!),我有以下问题。
- 事件分析究竟做了什么,它是否增加了在 event.wait() 中花费的时间?
- 由于在情况 2 中没有 event.wait() 的答案是相同的,因此仅执行内核所花费的时间是否正确?
请告诉我在 python 中对 OpenCL 程序进行基准测试的正确方法。
【问题讨论】:
标签: python-2.7 opencl benchmarking pyopencl