2

我使用的是 HD5770,它有 10 个计算单元和 32k 的本地内存。

我的全局大小是 256 * 256,
我的本地大小是 256

每个工作组都需要使用 1k 的本地内存,我指定如下:

clSetKernelArg(predicate, param++, 1024, NULL);

首先:这是分配本地内存的正确方法,还是我必须在设置内核参数时指定所有工作组一起使用的缓冲区的整个大小,然后根据本地 id 对该缓冲区进行索引?

第二:一个工作组会只在一个计算单元上执行吗?

第三:工作组结束后内存会被释放吗?(如果每个工作组使用 1k,则 32k 不足以满足 256 个工作组)

或者以更一般的方式:调度程序是否会注意不并行调度超过 32 个工作组?

谢谢!

4

1 回答 1

2

1) 这就是分配 1024 字节未初始化本地内存的方式,所以如果这是你想要的,那么是的,你做对了。您还可以像这样定义内核内部的内存:

__local float localBuffer[1024];

2)这是实现定义的,所以没有办法知道,你不能假设。通常一个工作组在超过 1 个计算单元上执行,但就像我说的,你永远不会真正知道。

3)内存将在下次使用时被覆盖,因此您不必担心释放它,特别是因为它未初始化并且您没有传递一些缓冲区。

希望这可以帮助

于 2013-02-17T12:28:03.443 回答