【问题标题】:Short question about CUDA memory access关于 CUDA 内存访问的简短问题
【发布时间】:2011-05-17 16:56:05
【问题描述】:

你好, 假设我有一个问题,每个线程计算一些东西(从常量内存中读取一些参数并使用它们进行计算)并将其存储到全局内存矩阵中。这个矩阵永远不会被读取,只是写入访问......现在是否有任何意义首先使用共享内存将所有计算值存储在其中,然后再将它们写入全局内存?我认为没有,因为对全局内存的写入完全保持不变,所以对共享内存的写入只是添加到我之前已经拥有的写入...... 谢谢!

【问题讨论】:

    标签: memory cuda


    【解决方案1】:

    可能有,这取决于内核代码中的访问模式。当原始写入不会被合并时,使用共享内存缓冲区“暂存”输出可能是确保合并写入的有用方法。这对于前几代 CUDA 兼容硬件 (G80/G90) 的性能至关重要。在较新的硬件中,这种情况要弱得多。 Fermi 卡有一个非常有效的 L1 和 L2 缓存方案,它可以(在合理范围内)接近过去只有使用共享内存才能实现的方案,而无需任何额外的代码。

    这个问题实际上并没有一个普遍的答案,因为它取决于任何给定代码的作用的很多细节,以及它期望在什么目标硬件上运行良好。

    【讨论】:

    • 好的,谢谢,是的,合并访问是迄今为止我不理解的东西......在编程指南和“cuda by example”一书中都没有。互联网上有没有关于这个话题的简单解释?您能否告诉我是否需要在费米架构的 GTX 460 上进行合并内存访问?!
    • @Col Heather:当前 CUDA 编程指南的附录 G 中对每种类型的 NVIDIA GPU 支持的合并规则和事务大小进行了非常清晰的解释,并附有图表。我无法真正告诉您在运行您的代码的硬件上是否需要它,因为我也无权访问。
    猜你喜欢
    • 2016-03-14
    • 2016-05-17
    • 2010-09-22
    • 2010-12-31
    • 1970-01-01
    • 1970-01-01
    • 2011-07-05
    • 2015-06-28
    • 1970-01-01
    相关资源
    最近更新 更多