CUDA全局内存事务最大尺寸存疑:NCU分析结果与文档不符
问题解答
核心原因:架构迭代+概念混淆
你遇到的差异来自两个关键点:
- 新GPU架构支持更大的全局内存事务
你看到的“设备可通过对齐的32字节、64字节或128字节事务访问全局内存”是针对Kepler、Maxwell等老一代架构的描述。从Turing架构开始,NVIDIA GPU就支持最大512字节的全局内存事务,Ampere及后续架构已全面支持这一特性。你的测试环境应该是新架构GPU,因此能生成512字节的内存请求。
- NCU中的
Req是合并后的warp级请求
你的代码中,每个线程访问1个float4(16字节)。一个warp包含32个线程,当这些线程的内存访问满足对齐且连续的条件时,硬件会自动将它们的独立请求合并为一个warp级请求,总大小为32 × 16 = 512字节,刚好对应16个32字节的内存扇区(16 × 32 = 512),这就是NCU显示Sectors / Req = 16的原因。
澄清你的两个假设
- 假设1错误:不是每个request对应4个事务,而是单个warp级请求本身就是新架构下的大尺寸事务(512字节),对应老架构4个128字节事务的总大小。
- 假设2部分正确:老文档的描述确实不适用于新架构,新架构下使用连续对齐的
float4访问时,合并后的warp级请求可以达到512字节。
内容的提问来源于stack exchange,提问作者Lifu Huang
相关产品推荐
相关产品推荐

