2012-10-01 45 views
1

大家都在這裏。因爲OpenCL可以像在GPU上一樣運行CPU上的內核。在GPU中,物理上存在私有內存(寄存器)和共享內存,但是如果我選擇CPU作爲OpenCL設備,那麼私有內存和共享內存是如何實現的?我的意思是,它們是由DRAM還是其他模擬器(L1,L2,甚至L3緩存?),我不確定)。另外,與CPU相比,在CPU上使用共享內存的性能會受到限制,對吧?在OpenCL中,如何在CPU上實現私有內存和共享內存?

回答

4

沒有語言直接訪問CPU緩存(被引用,但我沒有足夠的代表有3個URL ...)。這反過來又意味着OpenCL無法將私有內存保存在緩存中。

In this presentation from AMD 他們只是將內存模型稱爲由上下文抽取的一系列內存對象(第16頁)。只要緩衝區可用於上下文中的設備,它們就會可讀。當涉及到不同類型的內核內存時,可以放心地假設在CPU上運行而不是在GPU上時,它們之間沒有性能差異(因爲有不同類型的DRAM)。

請記住,如果您在羣集上進行計算,那麼主機內存和本地內存仍然會有所不同,但仍需要考慮傳輸速率。 關於問題的第二部分,請參閱此文章on memory models in OpenCL。從結構化程序中獲得的性能可以讓您只需要在給定的工作組中進行通信。

如要進一步瞭解,請參閱-http://software.intel.com/sites/landingpage/opencl/optimization-guide/index.htm

-1

OpenCL的內存模型是基於GPU架構創建。在CPU上,對全局內存,共享內存和常量內存的訪問通過相同的緩存層次結構。

當然,使用本地內存實現可以提高性能,因爲緩存命中將會增加。