2017-10-06 158 views
0

CUDA具有的計數 32位和64位類型的內在函數:__popc()__popcll()CUDA中的計算位奇偶校驗

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; 
} 
+4

你不能只取popcount並確定該數字是偶數還是奇數,即'__popcll(n)&1'? –

+0

[CUDA文檔](http://docs.nvidia.com/cuda/cuda-math-api/group__CUDA__MATH__INTRINSIC__INT.html)沒有列出*位奇偶校驗*作爲一個內在的,所以我可能不得不採取你的建議 –

回答

1

我不知道奇偶intrinsic for CUDA的。

但是,您應該可以使用__popc()(32位無符號大小寫)或__popcll()(64位無符號大小寫)內在函數創建一個相當簡單的函數。

例如,下面的函數應說明的1位在64位無符號的數量的數量是否是奇數(真)或甚至(假):

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