我试图在 512MB 内存中有多少 1,我发现了两种可能的方法,_mm_popcnt_u64()
并且__builtin_popcountll()
在gcc
内置函数中。
_mm_popcnt_u64()
据说用的是CPU介绍SSE4.2,貌似最快,__builtin_popcountll()
除了查表。
所以,我认为__builtin_popcountll()
应该比_mm_popcnt_u64()
.
但是我得到了这样的结果:
两种方法所用的时间几乎相同。我非常怀疑他们使用相同的工作方式。
我也收到了这个popcntintrin.h
/* Calculate a number of bits set to 1. */
extern __inline int __attribute__((__gnu_inline__, __always_inline__, __artificial___))
_mm_popcnt_u32 (unsigned int __X)
{
return __builtin_popcount (__X);
}
#ifdef __x86_64__
extern __inline long long __attribute__((__gnu_inline__, __always_inline__, __artificial__))
_mm_popcnt_u64 (unsigned long long __X)
{
return __builtin_popcountll (__X);
}
#endif
所以,我很困惑__builtin_popcountll()
在地球上是如何运作的