cuda10+ 中 uint2 和 uint64_t 之间有 performance/storage 区别吗?

Are there performance/storage differences between uint2 and uint64_t in cuda10+?

我正在尝试优化 A100 GPU(安培发电机)的一段代码,现在我们使用 uint64_t 但我看到在某些 cuda 代码中使用了 uint2 数据类型。 uint2 是否为寄存器使用提供优势?我知道 64 位寄存器的数量有限,uint2 是否将 x、y 整数拆分为 32 位寄存器以获得更好的占用率?我找不到有关使用这些数据类型的寄存器存储的任何具体信息,因此将不胜感激任何指向它的文档的链接。

Does the uint2 offer advantages for register usage?

没有

I know there are a limited number of 64-bit registers

确实如此。极其有限,即零。我所知道的任何 CUDA 兼容 GPU 中都没有 64 位寄存器。当编译器遇到 64 位类型时,它会从两个相邻的 32 位寄存器中合成它。

does uint2 split the x,y ints across 32-bit registers for better occupancy?

没有。所有 CUDA built-in 向量类型都存在用于内存带宽优化(PTX 中有向量 load/store 指令)并与 texture/surface 硬件兼容,可以对其中一些类型进行过滤,这可以更好地提高性能。