【发布时间】:2012-09-02 15:29:19
【问题描述】:
如何解读deviceQuery样本输出的纹理内存信息,了解纹理内存大小?
这是我的纹理内存的输出。
最大纹理尺寸 (x,y,z) 1D=(65536), 2D=(65536,65535),3D=(2048,2048,2048)
最大分层纹理大小 (dim) x 层 1D=(16384) x 2048, 2D=(16384,16384) x 2048
【问题讨论】:
如何解读deviceQuery样本输出的纹理内存信息,了解纹理内存大小?
这是我的纹理内存的输出。
最大纹理尺寸 (x,y,z) 1D=(65536), 2D=(65536,65535),3D=(2048,2048,2048)
最大分层纹理大小 (dim) x 层 1D=(16384) x 2048, 2D=(16384,16384) x 2048
【问题讨论】:
输出显示最大纹理尺寸为:
对于一维纹理 65536 对于 2D 纹理 65536*65535 对于 3D 纹理 2048*2048*2048
如果您想要以字节为单位的大小,请将其乘以最大通道数 (4) 和最大子像素大小 (4B)。
(对于分层纹理,将获得的尺寸相关数字乘以获得的最大层数。)
但是,这是单个纹理的最大大小,而不是所有纹理的可用内存。
【讨论】:
这是一个常见的误解,但 CUDA GPU 中不存在“纹理内存”之类的东西。只有纹理,它们是通过具有内置缓存、过滤和寻址限制的专用硬件访问的全局内存分配,这导致您在文档和设备查询中看到报告的大小限制。所以限制要么是大致全局内存的可用量(允许在 CUDA 数组中进行填充和对齐),要么是您已经引用的尺寸限制。
【讨论】:
cudaMalloc 的线性内存绑定到一维纹理。如果你想要更高维度的纹理,你需要使用倾斜的线性内存或 cuda 数组。
cudaMallocPitch 或 cudaMalloc3D 是分配倾斜线性内存的正常方式。