计算CUDA中的位奇偶校验

时间:2017-10-06 21:33:37

标签: cuda gpgpu gpu-programming parity

CUDA有32位和64位类型的 popcount 内在函数:__popc()__popcll()

CUDA是否也有内在函数来获得32位和64位类型的奇偶校验? (奇偶校验是指整数是偶数还是奇数的1位。)

例如,GCC对64位整数有__builtin_parityl()

这里有一个C函数可以做同样的事情:

inline uint parity64(uint64 n){
  n ^= n >> 1;
  n ^= n >> 2;
  n  = (n & 0x1111111111111111lu) * 0x1111111111111111lu;
  return (n >> 60) & 1;
}

1 个答案:

答案 0 :(得分:1)

我不知道奇偶校验intrinsic for CUDA

但是,您应该能够使用__popc()(32位无符号大小写)或__popcll()(64位无符号大小写)内在函数创建一个相当简单的函数。

例如,以下函数应指示64位无符号数量中的1位数是奇数(真)还是偶数(假):

__device__ bool my_parity(unsigned long long d){
  return (__popcll(d) & 1);}