当生成具有编译时定义大小的本地内存的内核时,例如
__local float2 block[%d];
如何确定运行内核时实际可用的大小?
它不是 CL_DEVICE_LOCAL_MEM_SIZE,当我使用它时,我收到一条错误消息,告诉我最大允许量,它总是小于报告的值(另外:不是 2 的幂,它会减去内核使用的寄存器吗?)。
目前我只是使用报告大小的一半......
当生成具有编译时定义大小的本地内存的内核时,例如
__local float2 block[%d];
如何确定运行内核时实际可用的大小?
它不是 CL_DEVICE_LOCAL_MEM_SIZE,当我使用它时,我收到一条错误消息,告诉我最大允许量,它总是小于报告的值(另外:不是 2 的幂,它会减去内核使用的寄存器吗?)。
目前我只是使用报告大小的一半......
我无法证实这一点。为了验证这一点,我创建了一个小测试程序,它确定每个设备的最大本地内存并创建一个分配该数量的内核。除非我将数量至少增加一个字节,否则程序会成功执行。
也许你的问题出在float2
. 这需要八个字节,如果将block
数组长度设置为最大本地内存大小,它将不起作用。