CUDA根据字大小合并了内存访问速度

问题描述 投票:1回答:1

我有一个CUDA程序,其中一个warp需要访问(例如)96字节的全局内存。

它正确地对齐内存位置和通道索引,以便在单个事务中合并和完成访问。

该程序可以使用12个通道访问uint8_t进行访问。或者,它将使用6个通道访问uint16_t,或使用3个​​通道访问uint32_t。

这些替代方案之间是否存在性能差异,如果每个线程访问较少量的内存,访问速度会更快吗?

当每个warp需要访问的内存量不同时,优化它是否有好处,以便在可能的情况下使线程访问较小的单元(16位或8位)?

cuda gpu nvidia gpgpu
1个回答
4
投票

如果不知道数据将如何在寄存器中使用一次,则很难说明最佳选项。对于几乎所有GPU,这些选项之间的性能差异可能非常小。

NVIDIA GPU L1支持从L1返回64字节/ warp(CC5。,6。)或128字节/ warp(CC3。,CC7。)返回。只要每个线程的大小<= 32位,那么性能应该非常相似。

在CC 5./6。减少谓词真实线程的数量可能会有一个小的性能优势(更喜欢更大的数据)。 L1TEX单元将全局访问分解为4 x 8个线程请求。如果断开8个线程的完整组,则保存L1TEX循环。写回寄存器文件需要相同的周期数。没有公开线程的分组顺序。

好的做法是写一个微基准。 CUDA分析器有许多计数器,用于L1TEX路径的不同部分,以帮助查看差异。

© www.soinside.com 2019 - 2024. All rights reserved.