当我以 32 宽 warp CUDA 架构为目标时,我应该使用 warpSize 吗?

When I target 32-wide warp CUDA architectures, should I use warpSize?

这是 的后续问题。

假设我有一个 CUDA 内核

template<unsigned ThreadsPerWarp>
___global__ foo(bar_t* a, const baz_t* b);

并且我正在针对 ThreadsPerWarp 为 32 的情况对其进行专门化(这避免了对 Talonmies 对我之前问题的回答的有效批评。)

在此函数(或从它调用的其他 __device__ 函数)的主体中 - 我应该更喜欢使用 ThreadsPerWarp 的常量值吗?还是使用 warpSize 更好?或者 - 就其生成的 PTX 而言,编译器是否完全相同?

不,不要使用 warpSize

似乎除了潜在的面向未来的能力(这在实践中值得怀疑)之外,使用它似乎没有任何优势。相反,您可以很好地使用类似的东西:

enum : unsigned { warp_size = 32 };