在 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);}