我注意到 PTX 代码允许一些具有复杂语义的指令,例如位字段提取 ( bfe
)、查找最重要的非符号位 ( bfind
) 和人口计数 ( popc
)。
显式使用它们比在 C/C++ 中使用其预期语义编写代码更有效吗?
例如:“人口计数”,或popc
,表示计数一位。所以我应该写:
__device__ int popc(int a) {
int d = 0;
while (a != 0) {
if (a & 0x1) d++;
a = a >> 1;
}
return d;
}
对于该功能,或者我应该使用:
__device__ int popc(int a) {
int d;
asm("popc.u32 %1 %2;":"=r"(d): "r"(a));
return d;
}
? 内联 PTX 会更高效吗?我们是否应该编写内联 PTX 以获得最佳性能?
还有 - GPU 是否有一些与 PTX 指令相对应的额外魔法指令?