查找提升多精度的第一组指令 (ffs) uint512_t
Find First Set instruction (ffs) for boost multiprecision uint512_t
我正在开发一种使用 __builtin_ffsll()
和 uint64_t
类型的算法。
我想使用 boost 多精度库切换到 512 位字段(我 运行 在支持 avx512 的机器上)。
是否有与提到的内置函数类似的功能?或者,我怎样才能有效地为 512 位整数实现这样的功能?
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;
}
}
我正在开发一种使用 __builtin_ffsll()
和 uint64_t
类型的算法。
我想使用 boost 多精度库切换到 512 位字段(我 运行 在支持 avx512 的机器上)。
是否有与提到的内置函数类似的功能?或者,我怎样才能有效地为 512 位整数实现这样的功能?
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;
}
}