在 CUDA 中计算位奇偶校验
Compute bit parity in CUDA
CUDA 具有用于 32 位和 64 位类型的 popcount 内在函数:__popc()
和 __popcll()
.
CUDA 是否也有内部函数来获得 32 位和 64 位类型的奇偶校验?
(奇偶性指的是一个整数是否有偶数或奇数的1位。)
例如,GCC __builtin_parityl()
用于 64 位整数。
这里有一个 C 函数做同样的事情:
inline uint parity64(uint64 n){
n ^= n >> 1;
n ^= n >> 2;
n = (n & 0x1111111111111111lu) * 0x1111111111111111lu;
return (n >> 60) & 1;
}
我不知道奇偶校验 intrinsic for CUDA。
但是,您应该能够创建一个相当简单的函数来使用 __popc()
(32-bit unsigned case) or __popcll()
(64 位无符号大小写)内在函数。
例如,下面的函数应该表示64位无符号数中1的位数是奇数(真)还是偶数(假):
__device__ bool my_parity(unsigned long long d){
return (__popcll(d) & 1);}
CUDA 具有用于 32 位和 64 位类型的 popcount 内在函数:__popc()
和 __popcll()
.
CUDA 是否也有内部函数来获得 32 位和 64 位类型的奇偶校验? (奇偶性指的是一个整数是否有偶数或奇数的1位。)
例如,GCC __builtin_parityl()
用于 64 位整数。
这里有一个 C 函数做同样的事情:
inline uint parity64(uint64 n){
n ^= n >> 1;
n ^= n >> 2;
n = (n & 0x1111111111111111lu) * 0x1111111111111111lu;
return (n >> 60) & 1;
}
我不知道奇偶校验 intrinsic for CUDA。
但是,您应该能够创建一个相当简单的函数来使用 __popc()
(32-bit unsigned case) or __popcll()
(64 位无符号大小写)内在函数。
例如,下面的函数应该表示64位无符号数中1的位数是奇数(真)还是偶数(假):
__device__ bool my_parity(unsigned long long d){
return (__popcll(d) & 1);}