長い計算を行う pyopencl プログラムがあります (1 回の実行で約 3 ~ 5 時間)。いくつかのカーネルをサイクルで 1 つずつ開始しています。だから私はこのようなものを持っています:
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% しか失うことがないと信じています。間違っている場合は修正してください。
PS AMD OpenCL、AMD GPU