当我以 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 };
这是
假设我有一个 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 };