【发布时间】:2013-06-28 20:12:54
【问题描述】:
我有一个 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
我测量了时间,得到了以下结果:
- 系统时间为4:30小时(通过linux
time命令测量) - 纯基于 opencl 事件的计时是 3:30 小时(加载+计算+存储)
我想知道:
- OpenCL 程序的最小开销有多大?在我的情况下,它是 35%
- 我应该相信基于事件的计时吗?
- 启用分析是否会显着增加整个程序执行时间?
我知道开销取决于程序,而且我知道 python 不如纯 C 或 CPP 快。但我相信,当我将所有繁重的计算转移到 OpenCL 内核时,我的损失不会超过 5-7%。如果我错了,请纠正我。
附: AMD OpenCL、AMD GPU
【问题讨论】:
标签: opencl overhead pyopencl overhead-minimization