我使用的是 HD5770,它有 10 个计算单元和 32k 本地内存。
我的全局尺寸是256 * 256,
我的本地尺寸是 256
每个工作组需要使用 1k 本地内存,我如下指定:
clSetKernelArg(predicate, param++, 1024, NULL);
首先:这是分配本地内存的正确方法吗?或者我是否必须在设置内核参数以及稍后对此的索引时指定所有工作组一起使用的缓冲区的整体大小缓冲区取决于本地 ID?
第二:一个工作组只能在一个计算单元上执行吗?
第三:工作组结束后内存会被释放吗? (如果每个工作组使用 1k,则 32k 对于 256 个工作组来说是不够的)
或者以更一般的方式:调度程序是否会处理不并行调度超过 32 个工作组的情况?
谢谢!
最佳答案
1) 这就是您分配 1024 字节未初始化本地内存的方式,所以如果这就是您想要的,那么是的,您做得对。您还可以像这样定义内核内部的内存:
__local float localBuffer[1024];
2) 这是实现定义的,所以没有办法知道,你也不能假设这一点。一般来说,一个工作组在多个计算单元上执行,但就像我说的,你永远不知道。
3)内存将在下次使用时被覆盖,因此您不必担心释放它,特别是因为它尚未初始化并且您没有传入某些缓冲区。
希望这有帮助
关于memory - 本地内存,我假设的概念正确吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14920979/