C++ OpenCL-特定于工作项的本地内存?

C++ OpenCL-特定于工作项的本地内存?,c++,opencl,C++,Opencl,让我们假设私有范围中充斥着无法删除的变量,添加额外的私有变量将导致寄存器溢出。然而,我们还需要一些临时变量,所以我们决定在本地内存中分配它们。我们预先知道1)有多少本地内存可用,2)恒定的工作组大小 是否有方法声明特定于工作项(非工作组)的本地内存对象? 该工作项将不会与其他工作项共享结果,它只是需要它自己 我现在能想到的唯一方法是做一些丑陋的事情,比如: local uint dataLump[WORK_GROUP_SIZE]; local uint* myTempVar = &dat

让我们假设私有范围中充斥着无法删除的变量,添加额外的私有变量将导致寄存器溢出。然而,我们还需要一些临时变量,所以我们决定在本地内存中分配它们。我们预先知道1)有多少本地内存可用,2)恒定的工作组大小

是否有方法声明特定于工作项(非工作组)的本地内存对象?
该工作项将不会与其他工作项共享结果,它只是需要它自己

我现在能想到的唯一方法是做一些丑陋的事情,比如:

local uint dataLump[WORK_GROUP_SIZE];
local uint* myTempVar = &dataLump[get_local_id(0)];

有更好的方法吗?

如果编译器必须溢出私有寄存器,而不是全局内存,那么它应该足够聪明,可以使用本地内存

但如果这种情况没有发生(我不信任驱动程序开发人员),您可以这样做:

#define L_MEM(x) x[get_local_id(0)]

local uint lvar1[WORK_GROUP_SIZE]; //Declare

//Access
uint a = b + L_MEM(lvar1);

请注意,我没有使用指针,因为它将在整个组中共享,并被所有WI覆盖。您必须使用WI\u id进行直接访问。宏选项是一个很好的帮助。

这里希望编译器足够聪明,能够优化所有
get\u local\u id
调用!