我認爲你正在尋找__local內存here。這就是32KB的本地數據存儲所指的。我不認爲你可以輪詢設備獲得私人內存量。
您可以傳入NULL long * cl_mem引用來分配內存。我認爲最好使用每個WI的靜態內存量。假設每個工作項目都需要long [200],則可以使用下面的代碼。將工作劃分爲具有相同(或相似)內存要求的組也是一個好主意,以便充分利用LDS內存。
void __kernel(__local long* localMem, const int localMemPerItem
//more args...
)
{
//host has 'passed' localMemPerItem*get_local_size() long values in as locamMem
//this work item has access to all of it, but can choose to restrict
//itself to only the portion it needs.
//work group size will be limited to CL_DEVICE_LOCAL_MEM_SIZE/(8*localMemPerItem)
int startIndex=localMemPerItem*get_local_id(0);
//use localMem[startIndex+ ... ]
}
來源
2012-02-17 18:41:18
mfa
我不認爲專用存儲器專用於每個核心 - 它映射到註冊文件,即每個計算單元資源。每個工作項目獲得從計算單元寄存器文件分配的寄存器,需要多少個確定在任何給定時刻在飛行中的波前數。 – talonmies 2012-02-17 17:00:57
從着名的無處不在的繪圖http://www.codeproject.com/KB/showcase/Memory-Spaces/image001.jpg我斷定私人內存與__本地內存不同,不是嗎? – user1111929 2012-02-17 23:29:32
是的,它們在物理上是不同的。專用內存映射到計算單元寄存器文件,本地內存用於計算大多數現代AMD設備中的單元級共享內存。一些早期的OpenCL兼容GPU沒有共享內存,本地內存只是SDRAM。每個核心都不是,每個工作項目使用多少個私人和每個工作組的本地影響每個計算單元運行的併發波前數量。 – talonmies 2012-02-18 05:12:48