【问题标题】:What is the memory space of an array in OpenCL kernel?OpenCL 内核中数组的内存空间是多少?
【发布时间】:2015-05-08 10:41:07
【问题描述】:

我在声明的地方写了一个 OpenCL 内核函数 内核内部的本地数组,例如:

float arr[10000];

现在似乎每个工作项都有一个包含 10000 个元素的独立数组。我在这里有点困惑,因为私人注册 每个线程可能无法容纳 10000 个元素的数组。

有人对此有任何想法吗?

【问题讨论】:

    标签: arrays opencl


    【解决方案1】:

    OpenCL 规范,第 6.5 节地址空间限定符说:

    程序中函数参数或函数局部变量的通用地址空间名称是__private

    所以在内核中,float arr[10000] 驻留在私有地址空间中。规范就是这么说的。

    理论上,超出这一点的情况取决于实现:没有指定私有地址空间是否应该物理存储在寄存器、寄存器文件、某种片外存储器、这些的组合中,或者别的东西。

    在实践中,一些实现会根据多种因素将小数组放在寄存器中,而将较大的数组放在片外内存中。

    【讨论】:

    • 不知何故,它仍然取决于您的底层硬件。 CPU 可能将这些元素保存在其缓存中,或者您可以构建一个 DSP,为每个处理元素提供如此大的内存。如上所述,GPU 的行为大多不同。
    • 谢谢,蝉。这对我来说很有意义。无论如何,您可以看到内核内部的内存使用情况吗?
    猜你喜欢
    • 2023-03-28
    • 1970-01-01
    • 2016-08-17
    • 2011-10-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-03-28
    • 2012-02-05
    相关资源
    最近更新 更多