在測量OpenCL內核的執行時間時,我遇到了奇怪的行爲。內核需要三個緩衝區作爲輸入。我在主機代碼中創建這些緩衝區,並使用CL_MEM_COPY_HOST_PTR對它們進行初始化。然後我通過OpenCL事件測量內核執行時間。但是,當我省略CL_MEM_COPY_HOST_PTR時,內核執行時間下降到三分之一。未初始化緩衝區時內核執行時間下降
到目前爲止,我發現這個問題與OpenCL編譯器的優化有關。它看起來像編譯器注意到緩衝區沒有被初始化,並相應地優化了內核。如果我提供標誌「-cl-opt-disable」,則初始化和不初始化緩衝區之間的執行時間沒有區別。但禁用所有優化顯然不是我打算做的。
有沒有辦法阻止編譯器注意到緩衝區在沒有禁用所有優化的情況下未被初始化?不幸的是,只寫入一個字節到緩衝區中並沒有這樣做。
在此先感謝!
您使用的是clenqueuewrite還是clenqueuemap?也許你正在做這些額外的副本? –
所以你試圖微調一些東西,並希望編譯器不要以不同的方式優化內核?那麼您可以測試它,而不會將內存從主機複製到GPU的潛在瓶頸?你確定那不是已經發生了什麼?也許它更快,因爲內存只是保持在GPU上緩存? (這可能沒有意義,我不瞭解OpenCL,主要是優化和硬件的工作原理)。 –