提问者:小点点

使用C++20的std::popcount和向量优化是否等价于popcnt?


C++20引入了许多新函数,如,我使用Intel内部函数来使用相同的功能。

我编译了这两个选项--可以在编译器资源管理器代码中看到:

除了std的模板中使用的类型检查之外,生成的程序集代码看起来是相同的。

就操作系统不可知论的代码和具有相同的优化而言--假设使用和apt编译器向量优化标志比直接使用intrinsic更好是正确的吗?

谢了。


共1个答案

匿名用户

没有。C++标准只指定了的行为,而没有指定实现(参见[bit.count])

允许实现者做任何他们想要实现这种行为的事情,包括使用内在的,但是他们也可以编写一个while循环:

int set_bits = 0;
while(x)
{
   if (x & 1)
      ++set_bits;
   x >>= 1;
}
return set_bits;

这是标准[bit.count]中的全部措辞:

template<class T>
constexpr int popcount(T x) noexcept;

约束:是一个无符号的整数类型(basic.judial)。
返回:值中的位数。

实事求是地说?编译器编写者非常聪明,会对此进行优化,以尽可能多地使用intrinsic。例如,GCC的实现似乎得到了相当大的优化。

相关问题


MySQL Query : SELECT * FROM v9_ask_question WHERE 1=1 AND question regexp '(c++20|std|popcount|向量|优化|等价|popcnt)' ORDER BY qid DESC LIMIT 20
MySQL Error : Got error 'repetition-operator operand invalid' from regexp
MySQL Errno : 1139
Message : Got error 'repetition-operator operand invalid' from regexp
Need Help?