繁体   English   中英

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

[英]OpenCL - Work item specific local memory?

让我们暂时假设私有作用域中充斥着无法删除的变量,添加其他私有变量将导致寄存器溢出。 但是,我们仍然需要更多的临时变量,因此我们决定在本地内存中分配它们。 我们预先知道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_id进行直接访问。 宏选项在那里提供了很好的帮助。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM