bmi相关内容

x64 支持是否意味着 BMI1 支持?

可以安全地假设 x64 构建可以使用 TZCNT 不通过 cpu 标志检查其支持? 解决方案 不,当然不是!x86-64 是 2003 年末 (AMD K8) 的新版本,只有旧的 bsf 和 bsr 位扫描指令,没有 BMI1 的其余部分. 第一个支持 BMI1 的 Intel CPU 是 2013 年的 Haswell.(同时引入了 BMI2.) 第一个支持 BMI1 的 AMD ..
发布时间:2021-09-29 19:44:28 其他开发

使用 AVX512 生成蒙版的 BMI

我受到这个链接的启发https://www.sigarch.org/simd-instructions-thinked-harmful/ 查看 AVX512 的性能.我的想法是可以使用 AVX512 掩码操作删除循环后的清理循环. 这是我使用的代码 void daxpy2(int n, double a, const double x[], double y[]) {__m512d av ..
发布时间:2021-09-29 19:31:58 其他开发

编译器宏以检测BMI2指令集

我在网上搜索以找到合适的解决方案,但没有成功. 因此,我希望你们中的一些人对此有所了解:有没有办法检测到"英特尔位操作指令集2 "(BMI2)的编译时间?我想根据它的可用性来做一些有条件的事情. 解决方案 使用GCC,您可以检查__BMI2__宏.如果目标支持BMI2(例如-mbmi2,-march=haswell),则将定义此宏.这是内在的标头(x86intrin.h,bmi2intri ..
发布时间:2020-11-29 20:10:09 C/C++开发

如何有效地找到第n个设置位?

对于与此问题相关的代码,我需要尽快计算以下内容: 给出一个32位整数 i ,计算 n 最低有效位的位置. n 和结果均应为0索引. 例如,给定数字 i = 11010110101 2 和 n = 4,则期望的数字为7,因为第四个设置位是在位置7:110 1 0110101. 使用x86的BMI2指令集扩展中的pdep指令和常用的__builtin_ctz()内在函数,可以很容易地 ..
发布时间:2020-09-21 05:39:46 其他开发

关于bsr和lzcnt的困惑

我对这两个指令有些困惑.首先,当扫描值为0且结果不确定/bsr或位大小/lzcnt时,让我们放弃特殊情况-这种区别很明显,不是我的问题的一部分. 让我们取二进制值0001 1111 1111 1111 1111 1111 1111 1111 根据Intel的规范,lzcnt的结果为3 根据Intel的规范,bsr的结果为28 lzcnt计数,bsr返回距位0(即lsb)的索 ..
发布时间:2020-09-12 23:31:27 其他开发

内在的mulx指令

根据 Intel公司的文档应该有 mulx $ b unsigned __int64 umul128(unsigned __int64 a,unsigned __int64 b,unsigned __int64 * hi); 但是,我从 BMI2下的英特尔内部指南。然而,我从ADX指令集中发现了addcarry内在函数。 根据这个链接内在是 mulx_u64 ,但 ..
发布时间:2018-04-20 16:27:08 其他开发