我有一個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