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

时间:2014-06-05 14:29:21

标签: c++ opencl

让我们暂时假设私有作用域中堆满了无法删除的变量,添加其他私有变量会导致寄存器溢出。但是,我们仍然需要更多的临时变量,因此我们决定将它们分配到本地内存中。我们事先知道1)有多少本地内存可用,2)工作组大小不变。

有没有办法声明一个工作项(不是工作组)特定的本地内存对象?
工作项不会与其他工作项共享结果,它只是需要它自己。

我目前唯一能想到的方法就是包含丑陋的东西:

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

有更好的方法吗?

1 个答案:

答案 0 :(得分: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_id直接访问。宏选项在那里是一个很好的帮助。