查找提升多精度的第一组指令 (ffs) uint512_t

Find First Set instruction (ffs) for boost multiprecision uint512_t

我正在开发一种使用 __builtin_ffsll()uint64_t 类型的算法。

我想使用 boost 多精度库切换到 512 位字段(我 运行 在支持 avx512 的机器上)。

是否有与提到的内置函数类似的功能?或者,我怎样才能有效地为 512 位整数实现这样的功能?

来自the documentation

unsigned lsb(const number-or-expression-template-type& x);

Returns the (zero-based) index of the least significant bit that is set to 1.

Throws a std::range_error if the argument is <= 0.

ffs() 是从一开始的,因此在 lsb() 的 return 值上加 1 将使其相等。编辑:正如所指出的,考虑传递 0 的情况。

也许像

unsigned ffs512(const boost::multiprecision::uint512_t &n) {
  if (n.is_zero()) {
    return 0;
  } else {
    return boost::multiprecision::lsb(n) + 1;
  }
}