avx相关内容

vmovdqa 在 vi​​rtualbox 中不起作用?

我使用的是支持 avx 和 avx2 的最新型号 i7 cpu,据说 virtualbox 支持 avx 和 avx2,那么为什么下面的代码会挂起? vmovdqa ymm0, qqword[testmem] testmem 在别处定义为 对齐32测试内存:rb 128 如果我使用 movdqa xmm0, dqword[testmem] 效果很好. FASM 1.72、Wind ..
发布时间:2021-09-18 18:35:26 其他开发

使用 SIMD 右移 32 位压缩负数

我正在编写一些 SSE/AVX 代码,并且有一项任务是将打包的有符号 32 位整数除以 2 的补码.当值为正时,此移位工作正常,但由于符号位移位,它会为负值产生错误结果. 是否有任何 SIMD 操作可以让我移动保留符号位的位置?谢谢 解决方案 SSE2/AVX2 可以选择算术1 与 16 位和 32 位元素大小的逻辑右移.(对于 64 位元素,在 AVX512 之前只有逻辑可用). ..
发布时间:2021-08-27 19:47:17 其他开发

我需要在 2021 年使用 _mm256_zeroupper 吗?

摘自 Agner Fog 的“用 C++ 优化软件": 在某些 Intel 上混合使用和不使用 AVX 支持编译的代码时出现问题处理器.从 AVX 代码到非 AVX 代码会导致性能下降因为 YMM 寄存器状态发生了变化.应该通过调用来避免这种惩罚从 AVX 代码到非 AVX 代码的任何转换之前的内在函数 _mm256_zeroupper().在以下情况下,这可能是必要的: • 如果程序 ..
发布时间:2021-08-27 19:47:05 C/C++开发

SIMD:位包有符号整数

无符号整数可以通过使用“位打包"进行压缩技术:在无符号整数块内仅存储有效位,当块中的所有整数都为“小"时导致数据压缩.该方法称为 FOR(参考框架). 有 SIMD 库可以非常有效地执行此操作. 现在我想使用类似 FOR 的技术来编码 signed 整数,例如来自未排序的无符号整数的差分序列.每个有符号整数的符号都需要存储在某处,有两种选择: 将标志存储在单独的数据块中.这会增加 ..
发布时间:2021-08-27 19:46:55 其他开发

计算大点积的最快方法是什么?

考虑这个片段: double dot(double* a, double* b, int n) {双和 = 0;for (int i = 0; i 如何使用内在函数或汇编程序加快速度? 注意事项: 您可以采用最新的架构,包括 AVX 扩展. n 是几百个. dot 本身将被紧密循环使用 解决方案 这是一个简单的 SSE 实现: #include "pmmintrin ..
发布时间:2021-08-27 19:46:11 其他开发

如何将两个 __m128 值组合为 __m256?

我想将两个 __m128 值合并为一个 __m256. 像这样: __m128 a = _mm_set_ps(1, 2, 3, 4);__m128 b = _mm_set_ps(5, 6, 7, 8); 类似于: __m256 c = { 1, 2, 3, 4, 5, 6, 7, 8 }; 是否有任何内在函数可用于执行此操作? 解决方案 这应该可以满足您的需求: __m12 ..
发布时间:2021-08-27 19:44:59 其他开发

SIMD何时更快的一些经验法则是什么?(SSE2,AVX)

我有一些代码可以一次处理3个对称集合,每个对称集合包含3个非对称整数值.有大量的条件代码和许多常量. 这已成为性能瓶颈,我正在寻找一些经验法则,以了解64位Intel/AMD CPU上的SIMD何时能获得性能优势.代码很长,而且我以前从未使用过SSE2或AVX,所以在我花时间之前,先了解一下是否有可能赢得性能,这将是很高兴的. 如果您愿意列出经验法则或指向此方面的现有白皮书,我将不胜感 ..
发布时间:2021-04-12 20:55:27 其他开发

用于平铺矩阵乘法的AVX内在函数

我试图使用AVX512内部函数对矩阵乘法(平铺)的循环进行矢量化处理.我使用__mm256d作为变量来存储中间结果并将其存储在我的结果中.但是,这会以某种方式触发内存损坏.我没有暗示为什么会这样,因为非AVX版本可以正常工作.另外,另一个怪异的事情是,磁贴大小现在会以某种方式影响结果. 矩阵结构附在下面的代码部分中.该函数使用两个矩阵指针m1和m2以及tileSize的整数.感谢@harol ..
发布时间:2021-04-12 20:55:21 C/C++开发

使用GCC编译用于Linux设备驱动程序的Intel AVX内置指令

我正在corei7的ubuntu上运行gcc版本4.8.2. 从Google搜索中找到有关AVX内在函数的信息,但是我不确定这组内在函数是否可以用于Linux设备驱动程序并进行编译. 如果可以的话,这里的任何人都可以告诉我,makefile的正确设置是什么,以及要使用gcc编译此avx的c源文件中应包含哪些头文件? 谢谢. 解决方案 使用这些标头 include ..
发布时间:2021-04-12 20:55:14 其他开发

Windows上VS C ++的非法指令

我有一个C ++应用程序,对于某些Windows 7用户,该应用程序在启动时崩溃.我无法在自己的计算机上重现该错误,但使用Breakpad生成了一个.dmp文件,该文件显示代码因初始化静态std :: vector数组的“非法指令"而崩溃.这可能意味着什么? 例外: myApp.exe.4328.dmp中0x000000013F121362(myApp.exe)的未处理异常:0xC00000 ..
发布时间:2021-04-12 20:55:10 C/C++开发

AVX-512指令编码-{er}含义

在《英特尔x86指令集参考》中,有许多AVX-512指令在指令中带有可选的{er}.例如,一种形式的VADDPD被定义为 EVEX.NDS.512.66.0F.W1 58/rVADDPD zmm1 {k1} {z},zmm2,zmm3/m512/m64bcst {er} {er}是什么意思? 解决方案 摘自Intel SDM Volume 2A,3.1.1.3“操作码摘要表中的指令 ..
发布时间:2021-04-12 20:55:07 其他开发

MSVC 2017是否支持自动CPU分派?

我在一些站点上读到,当使用SSE2体系结构并检测AVX支持运行时时,MSVC实际上可以发出AVX指令.是真的吗? 我测试了肯定会从AVX/AVX2支持中受益的各种循环,但是当在调试器中运行时,我真的找不到任何AVX指令. 使用/arch:AVX时,它会发出AVX指令,但是它当然会在不支持它的CPU上崩溃(经过测试),因此也没有运行时检测.我可以使用AVX内在函数,并且可以从中成功创建A ..

使用SIMD double-> float转换将2个double数组快速交织到具有2个float和1个int(循环不变)成员的结构数组中?

我有一段代码是在x86处理器上运行的C ++应用程序中的瓶颈,在这里我们从两个数组中获取双精度值,强制转换为float并存储在结构数组中.之所以成为瓶颈,是因为它被称为非常大的循环或成千上万次. 有没有一种更快的方法来进行此复制&使用SIMD Intrinsics进行投射操作?我已经看到在更快的memcpy上的答案,但没有解决演员表问题. 简单的C ++循环情况如下 int _iN ..
发布时间:2021-04-12 20:54:48 C/C++开发

使用AVX2指令向左移128位数字

我正在尝试在AVX2中向左旋转128位数字.由于没有这样做的直接方法,因此我尝试使用左移和右移来完成任务. 这是我的代码的摘要. l = 4;r = 4;targetrotate = _mm_set_epi64x(l,r);targetleftrotate = _mm_sllv_epi64(target,targetrotate); 上面的code代码片段将目标向左旋转4. 当我使 ..
发布时间:2021-04-12 20:54:45 C/C++开发

使用simd在双打数组中找到nan

这个问题非常类似于: 用于浮点相等比较的SIMD指令(使用NaN == NaN) 尽管该问题集中在128位向量上,并且要求识别+0和-0. 我感觉自己也许可以自己得到一个,但是intel内在函数指南页面似乎已经关闭了:/ 我的目标是获取一个双精度数组,并返回该数组中是否存在NaN.我希望在大多数情况下不会出现这种情况,并且希望该路线具有最佳性能. 最初,我要与自己进行 ..
发布时间:2021-04-12 20:54:39 其他开发