【问题标题】:local memory, am I assuming the right concept?本地内存,我是否假设正确的概念?
【发布时间】:2013-02-01 23:30:01
【问题描述】:

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

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

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

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

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

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

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

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

谢谢!

【问题讨论】:

    标签: memory opencl gpu local


    【解决方案1】:

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

    __local float localBuffer[1024];
    

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

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

    希望对你有帮助

    【讨论】:

    • 感谢您的回复,但我怎么知道有多少工作组将同时处于活动状态?在这种情况下,不允许超过 32 个同时执行
    • @user984308 没有办法知道实际上,理论上工作组可以彼此独立运行。 OpenCL 标准没有指定执行模型如何映射到硬件上。
    猜你喜欢
    • 2015-08-21
    • 1970-01-01
    • 2021-01-03
    • 1970-01-01
    • 1970-01-01
    • 2014-03-09
    • 1970-01-01
    • 1970-01-01
    • 2017-11-04
    相关资源
    最近更新 更多