【问题标题】:CUDA: memory transaction size for compute capability 1.2 or laterCUDA:计算能力 1.2 或更高版本的内存事务大小
【发布时间】:2011-07-17 16:57:27
【问题描述】:

所有, 来自“NVIDIA CUDA 编程指南 2.0”第 5.1.2.1 节: “在具有 1.2 及更高计算能力的设备上进行合并”

"查找包含编号最小的活动线程请求的地址的内存段。段大小为 8 位数据为 32 字节,16 位数据为 64 字节,32-、64- 和 128- 为 128 字节位数据。”

我有一个疑问:由于每个半经线有 16 个线程,如果所有线程都访问 8 位数据,那么每个半经线的总大小应该是 16 * 8 位 = 128 位 = 16 字节。而“指南”说“32 字节用于 8 位数据”。似乎浪费了一半的带宽。我理解正确吗?

谢谢 德里克

【问题讨论】:

    标签: memory cuda bandwidth coalescing


    【解决方案1】:

    是的。内存访问始终以 32、64 或 128 字节为单位,无论您实际需要多少内存线。


    更新:

    问题: 这如何解释 16 位数据的 64 字节?

    值:32bytes for 1byte-words, 64bytes for 2byte-words and 128bytes for high-byte words是访问段的最大大小。例如,如果每个线程都在获取 2 字节字并且您的访问完全对齐,则内存访问将减少以仅使用 32 字节行提取。

    查看“CUDA 编程指南 (v3.2)”的 G.3.2.2“计算能力 1.2 和 1.3 的设备”部分。

    我看到您使用了 CUDA PG v. 2.0(可能还有 CUDA 2.0 编译器)。从那以后有很多改进(特别是:错误修复)。

    【讨论】:

    • 这如何解释 16 位数据的 64 字节? (16 * 16 / 8 = 32)
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-05-10
    相关资源
    最近更新 更多