2012-11-12 42 views
1

例如:要對數組執行算法,我們必須使用由數組創建的緩衝區。 但是對於Intel/AMD CPU,它使用像Global Memory這樣的系統的DDR。 最後,表格創建兩次。有沒有辦法在沒有分配緩衝區的情況下使用已經在內存中的表。內存位置和分配

回答

4

可以的OpenCL通過創建緩衝區時設置CL_MEM_USE_HOST_PTR標誌使用原來的內存區域。

如果內核在CPU上運行,則不會發生內存複製。如果OpenCL運行認爲這是更適合

如果在GPU上運行的副本可能發生。

3

CPU可以訪問機器的內存,但無法訪問GPU的內存。同樣,GPU可以訪問自己的內存,但不能訪問主機。這就是你必須在這兩者之間傳遞信息的原因 - 它們是兩個完全分離的存儲空間。

與gpgpu相反,使用OpenCL,內核可以在CPU上運行,因此不需要複製緩衝區;但OpenCL仍然要求您明確地傳輸內存,只是它的實現會在主機上運行時忽略它。

+0

因此,這些數據在OpenCL CPU平臺上分配了兩次,並且有任何技巧可以解決這個問題? 在圖像處理中,對性能造成很大的浪費。 –

+1

@AlexPlacet我想我還不夠清楚......如果你使用OpenCL並且你的目標設備是CPU,那麼數據**不會被分配兩次。如果你在GPU上使用完全相同的代碼,它會。 – Oak