cuda - CUDA 中哪个更快 : Constant Memory or Texture Memory?

标签 cuda

我知道两者都位于片外 DRAM 上并缓存。

但是哪个访问速度更快呢?或者在什么情况下其中一个比另一个更快?

最佳答案

恒定内存针对广播进行了优化,即当扭曲中的线程全部读取相同的内存位置时。如果他们正在读取不同的位置,它会起作用,但扭曲引用的每个不同位置都会花费更多时间。当读取被广播到线程时,常量内存比纹理内存快得多。

纹理内存具有很高的延迟,即使对于缓存命中也是如此。您可以将其视为带宽聚合器 - 如果可以从纹理缓存中进行重用,则 GPU 不必转到外部内存来进行这些读取。对于 2D 和 3D 纹理,寻址具有 2D 和 3D 局部性,因此缓存行填充会拉入 2D 和 3D 内存块而不是行。

最后,纹理管道可以执行“额外”计算:处理边界条件(“纹理寻址”)以及将 8 位和 16 位值转换为单位化 float 是可以“免费”完成的操作示例。 (它们是纹理读取延迟较高的部分原因)

关于cuda - CUDA 中哪个更快 : Constant Memory or Texture Memory?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11480521/

相关文章:

c - 将项目移动到数组的前面

c++ - 如何在 CUDA 中实现压缩表?

c - 使用 CUBLAS/CUSPARSE 操作将统一数组的元素设置为 0 是否安全?

cuda - Fermi 及更高版本中共享内存库冲突的相关性

c - 混合语言CUDA编程

c++ - 如何将表面对象绑定(bind)到二维倾斜阵列?

c++ - CUDA 错误 : "dynamic initialization is not supported for __device__, __constant__ and __shared__ variables"

c++ - 跨 g++-nvcc 边界(包括内核)使用函数模板化代码

c - 总和未正确存储

cuda - 如何在cuda中编译多个文件?