2010-10-11 73 views
4

我在我的一些OpenCL樣板代碼中使用了cl_mem,但我一直在通過上下文使用它,而不是對它究竟到底是什麼。我一直使用它作爲記憶體的一種類型,我推動和離開董事會,迄今爲止已經浮動。我試着查看OpenCL文檔,但cl_mem不顯示(是嗎?)。有沒有關於它的文檔,或者它是否簡單並且有人可以解釋。關於OpenCL中cl_mem的問題

回答

6

對於計算機而言,cl_mem是一個數字(像Linux的文件處理程序),它被保留作爲「內存標識符」使用(API /驅動程序,無論存儲有關您的內存的信息,它擁有/它有多大以及類似的東西)

10

cl_mem類型是「Memory Object」的句柄(如OpenCL 1.1 Spec的第3.5節所述)。這些基本上是OpenCL內核的輸入和輸出,和從的OpenCL API調用在主機代碼例如

cl_mem clCreateBuffer (cl_context context, cl_mem_flags flags, 
          size_t size, void *host_ptr, cl_int *errcode_ret) 

表示的存儲器區域可被允許不同的訪問模式返回如clCreateBuffer只讀,或分配到不同的內存區域,具體取決於創建緩衝區調用中設置的標誌。

手柄通常存儲允許以後調用來釋放內存,如:

cl_int clReleaseMemObject (cl_mem memobj) 

總之,它提供了在內存實際上是一種抽象:您可以將數據複製到相關的存儲器或者通過OpenCL API clEnqueueWriteBuffer和clEnqueueReadBuffer退出,但OpenCL實現可以根據需要分配空間。