0

当生成具有编译时定义大小的本地内存的内核时,例如

__local float2 block[%d];

如何确定运行内核时实际可用的大小?

它不是 CL_DEVICE_LOCAL_MEM_SIZE,当我使用它时,我收到一条错误消息,告诉我最大允许量,它总是小于报告的值(另外:不是 2 的幂,它会减去内核使用的寄存器吗?)。

目前我只是使用报告大小的一半......

4

1 回答 1

0

无法证实这一点。为了验证这一点,我创建了一个小测试程序,它确定每个设备的最大本地内存并创建一个分配该数量的内核。除非我将数量至少增加一个字节,否则程序会成功执行。

也许你的问题出在float2. 这需要八个字节,如果将block数组长度设置为最大本地内存大小,它将不起作用。

于 2013-01-15T20:29:42.297 回答