【发布时间】: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 芯片缓存,根据某些模式可能会根据确切的纹理定义和使用情况发生变化,并且未指定。