【问题标题】:How are CUDA arrays stored in GPU memory? Are they physically linear or not?CUDA 数组如何存储在 GPU 内存中?它们在物理上是线性的吗?
【发布时间】:2019-10-23 13:20:23
【问题描述】:

根据 CUDA 工具包文档:

https://docs.nvidia.com/cuda/cuda-c-programming-guide/

设备内存可以分配为线性内存或 CUDA 数组。

这是否意味着 CUDA 数组不是线性存储在 GPU 内存中的?

在我的实验中,我成功地根据 cudamemcpy 函数从 GPU 内存中转储了我的数据。如果我的数据是由 cudaMallocArray 分配的,是不是意味着数据在 GPU 内存中不是物理线性的,需要通过其他 API 来提取?

【问题讨论】:

  • 来自同一个文档:> CUDA 数组是针对纹理获取优化的不透明内存布局。它们在纹理和表面记忆中有所描述。 > CUDA 支持 GPU 用于图形访问纹理和表面内存的纹理硬件子集。如设备内存访问中所述,从纹理或表面内存而不是全局内存读取数据可以获得多项性能优势。
  • 虽然我认为它没有公开,但纹理和此类数组以平面填充曲线的方式存储,例如希尔伯特或 Z 曲线。
  • 那么CUDA数组实际上存储在全局内存中吗?或者别的地方?或者它们像其他数据一样存储在全局内存中,但不是以线性形式。
  • 它们在“全局”内存中,即在支持逻辑全局空间的同一物理资源中,但未指定排列方式。您可以通过纹理和表面机制访问它们,其中涉及访问底层全局内存分配的 GPU 芯片缓存,根据某些模式可能会根据确切的纹理定义和使用情况发生变化,并且未指定。

标签: c++ cuda nvidia gpu


【解决方案1】:

CUDA 数组确实存储在 GPU 设备内存(“全局”内存)中,并且字节在内存中不是物理线性的。它们是针对多通道、多维纹理访问和纹理过滤而优化的不透明布局。该格式未记录在案,因为它可能会在 GPU 架构之间发生变化。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-08-17
    • 2011-07-30
    • 1970-01-01
    • 1970-01-01
    • 2021-07-10
    • 2021-09-21
    • 2019-07-03
    • 2012-12-01
    相关资源
    最近更新 更多