我认为您正在寻找 __local 内存。这就是 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+ ... ]
}