gpt4 book ai didi

OpenCL:__constant 内存和 const __global 内存的区别

转载 作者:行者123 更新时间:2023-12-04 12:41:31 26 4
gpt4 key购买 nike

我想了解当我创建一个具有只读属性的缓冲区并将其与 __constant 一起使用时有什么区别内核中的地址空间限定符或与 const __global 一起使用地址空间限定符。

我已经发现这些并不是我问题的真正答案,但它们包含一些有用的信息:

  • http://www.khronos.org/message_boards/showthread.php/6466-__constant-vs-const-__global
  • Is the access performance of __constant memory as same as __global memory on OpenCL
  • Using __constant qualifer in OpenCL kernels

  • 如果我很好理解 GPU 内存中的分配发生在 clCreateBuffer 函数调用中。所以我不明白的是编译器如何决定缓冲区是在常量内存(有 64 KB 限制)还是在全局内存中。 (我知道在大多数情况下,常量内存是全局内存空间的一部分。)如果它取决于地址限定符,这意味着可以使用 const __global 忽略 64 KB 的限制。 .
    __constant之间在性能上有什么区别吗?和 const __global ? __global 内存可能会被缓存,因此它们都是只读的并且(可能)被缓存。
    (来源:3.3 内存模型/全局内存部分和图 3.3; http://www.khronos.org/registry/cl/specs/opencl-1.x-latest.pdf#page=24)

    最佳答案

    根据我的经验,两者在概念上没有区别,它们都意味着指向的数据是只读的。仅在此之后,差异才会明显,具体取决于供应商使用的实现。

    例如,在 nvidia GPU 上缓存了 __constant 标记的内存(我相信对于所有当前设备,每个多处理器的缓存大小为 8KB)。需要注意的一件事是,如果不同的工作项访问不同的地址,则对该缓存的访问会被序列化,因此我发现它对于传递在工作组中保持不变的参数结构最有用。如果您查看 CUDA 编程指南中有关常量内存的部分,您将更好地了解其工作原理。我相信标记为 const __global 的内存不会被缓存,它只是告诉编译器在您尝试更改指向值时抛出错误。

    我不确定 AMD 是否在他们的硬件上做类似的缓存

    希望有帮助

    关于OpenCL:__constant 内存和 const __global 内存的区别,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17991714/

    26 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com