avx2相关内容

avx浮点按位逻辑运算的原因是什么?

AVX允许对诸如和/或对浮点数据类型__m256和__m256d进行按位逻辑运算. 但是,C ++合理地不允许对浮点数和双精度数进行按位运算.如果我是正确的话,就不能保证浮点数的内部表示形式,也不能保证编译器是否使用IEEE754,因此程序员无法确定浮点数的样子. 请考虑以下示例: #include #include #inclu ..
发布时间:2020-09-15 05:43:22 C/C++开发

为何两者兼而有之? vperm2f128(avx)与vperm2i128(avx2)

avx引入了指令vperm2f128(通过_mm256_permute2f128_si256公开),而avx2引入了vperm2i128(通过_mm256_permute2x128_si256公开). 它们似乎都做的完全一样,它们各自的等待时间和吞吐量也似乎是相同的. 那么为什么两个指令都存在?这背后必须有一些推理吗?也许我忽略了什么?鉴于avx2在avx引入的数据结构上运行,我无法想 ..
发布时间:2020-09-15 05:43:15 其他开发

如何清除__m256值的高128位?

如何清除m2的高128位: __m256i m2 = _mm256_set1_epi32(2); __m128i m1 = _mm_set1_epi32(1); m2 = _mm256_castsi128_si256(_mm256_castsi256_si128(m2)); m2 = _mm256_castsi128_si256(m1); 不起作用-英特尔关于_mm256_ ..
发布时间:2020-09-15 05:43:13 其他开发

对于许多SIMD算法,为什么只有AVX的处理器性能要优于AVX2处理器?

我一直在研究C#和C ++中SIMD算法的优势,发现在许多情况下,在AVX处理器上使用128位寄存器要比在带有AVX2的处理器上使用256位寄存器更好.我不明白为什么. 通过改进,我的意思是相对于同一台计算机上的非SIMD算法,SIMD算法的提速. 解决方案 在AVX处理器上,当不执行AVX指令时,CPU将关闭256位寄存器和浮点单元的上半部分(VEX编码的操作码) .当代码确实使用 ..
发布时间:2020-09-15 05:41:04 C#/.NET

等效于AVX2的_mm_alignr_epi8(PALIGNR)

在SSE3中,PALIGNR指令执行以下操作: PALIGNR将目标操作数(第一个操作数)和源操作数(第二个操作数)级联为中间合成,将合成以字节粒度向右移动一个常数立即数,并将右对齐的结果提取到目的地. 我目前正在移植我的SSE4代码以使用AVX2指令,并且正在处理256位而不是128位的寄存器. 天真的,我相信内在函数_mm256_alignr_epi8(VPALIGNR)仅在256 ..
发布时间:2020-09-15 05:39:54 其他开发

在AVX寄存器内旋转字节的有效方法

摘要/tl; :除了进行2x移位并将结果混合在一起以外,是否有其他方法可以按位旋转YMM寄存器中的字节(使用AVX)? 对于YMM寄存器中的每8个字节,我需要向左旋转7个字节.每个字节需要比前一个向左旋转一位.因此,第一个字节应旋转0位,第七个字节应旋转6位. 当前,我已经实现了一种实现方法,该方法是通过[将1位旋转作为示例]将寄存器左移1位,然后右移7位.然后,我使用混合操作(固有操 ..
发布时间:2020-09-15 05:39:51 其他开发

AVX中的分散内在函数

我在《英特尔内部指南v2.7》中找不到它们.您知道AVX或AVX2指令集是否支持它们吗? 解决方案 原始AVX指令集中没有分散或收集指令. AVX2添加了收集指令,但没有添加分散指令. AVX512F包括分散指令和收集指令. AVX512PF还提供了收集和分散指令的预取变体. AVX512CD提供了检测分散地址中冲突的说明. Intel MIC(又名Xeo ..
发布时间:2020-09-15 05:38:20 其他开发

性能报告显示此功能"__memset_avx2_unaligned_erms",有开销.这是否意味着内存未对齐?

我正在尝试使用perf工具分析我的C ++代码.实现包含带有SSE/AVX/AVX2指令的代码.除此以外,代码还使用-O3 -mavx2 -march=native标志进行编译.我相信__memset_avx2_unaligned_erms函数是memset的libc实现. perf表明此功能有相当大的开销.函数名称指示内存未对齐,但是在代码中,我正在使用GCC内置宏__attribute__(( ..
发布时间:2020-09-15 05:37:54 C/C++开发

是否所有支持AVX2的CPU也都支持SSE4.2和AVX?

我计划实现SIMD扩展的运行时检测.如果我发现处理器具有AVX2支持,是否也可以保证具有SSE4.2和AVX支持? 解决方案 支持最新的Intel SIMD ISA扩展意味着支持以前的SIMD. AVX2绝对暗含AVX1. 我认为AVX1暗示所有SSE/SSE2/SSE3/SSSE3/SSE4.1/SSE4.2功能位也必须在CPUID中设置.如果没有形式上的保证,很多会做出这个 ..
发布时间:2020-09-15 05:36:35 其他开发

vextracti128和vextractf128有什么区别?

vextracti128和vextractf128具有相同的功能,参数和返回值.另外,一个是AVX指令集,另一个是AVX2.有什么区别? 解决方案 vextracti128和vextractf128不仅具有相同的功能,参数和返回值.它们具有相同的指令长度.并且它们具有相同的吞吐量(根据Agner Fog的优化手册). 还不清楚它们的等待时间值(在具有依赖链的紧密循环中的性能).指令本 ..
发布时间:2020-09-15 05:33:48 其他开发

使用Haswell架构的并行编程

我想学习使用英特尔Haswell CPU微体系结构的并行编程. 关于使用SIMD:ASM/C/C ++/(其他语言)中的SSE4.2,AVX2? 您可以推荐书籍,教程,互联网资源,课程吗? 谢谢! 解决方案 在我看来,您通常需要学习有关CPU的并行编程的知识.我大约在10个月前开始使用SSE,OpenMP或内部函数之前就开始研究此问题,因此让我简要总结一下我学到的一些重要概念和一些有 ..
发布时间:2020-09-15 05:33:44 其他开发

AVX2中的收集指令如何实现?

假设我使用的是AVX2的VGATHERDPS-应该使用8个DWORD索引加载8个单精度浮点数. 当要加载的数据存在于不同的缓存行中时会发生什么?指令是否被实现为一个硬件循环,该硬件循环一个接一个地获取高速缓存行?还是可以一次向多个缓存行发出负载? 我读了几篇陈述前者的论文(那对我来说更有意义),但是我想对此有所了解. 链接到一篇论文: http://arxiv.org/pdf/1 ..
发布时间:2020-09-15 05:33:22 其他开发

将__m256值设置为全1的最快方法

如何为__m256值的所有位设置值1? 使用AVX还是AVX2内部函数? 要获取全零,可以使用_mm256_setzero_si256(). 要获得全部,我目前正在使用_mm256_set1_epi64x(-1),但是我怀疑这比全零情况要慢.这里是否涉及内存访问或Salar/SSE/AVX切换? 在AVX中我似乎找不到简单的按位NOT操作? 如果可以的话,我可以简单地使用setz ..
发布时间:2020-09-15 05:33:15 其他开发

将32位数据打包为32字节SIMD向量的最快方法

将32位存储在内存中的uint32_t中,最快的方法是将每个位解压缩到AVX寄存器的单独字节元素中?这些位可以在其各自字节内的任何位置. 编辑:为澄清起见,我的意思是位0到字节0,位1到字节1.显然,该字节内的所有其他位都为零.目前,我能做到的最好是2 PSHUFB,并且每个位置都有一个掩码寄存器. 如果uint32_t是位图,则相应的矢量元素应为0或非0. (也就是说,我们可以获得一 ..
发布时间:2020-09-15 05:29:05 其他开发

使用AVX/AVX2转置8x8浮动

可以通过制作四个4x4矩阵并对每个矩阵进行转置来实现8x8矩阵的转置. 这不是我想要的. 在另一个问题中,一个答案提供了解决方案,对于8x8矩阵仅需要24条指令即可.但是,这不适用于浮点数. 由于AVX2包含256位的寄存器,因此每个寄存器都可以容纳8个32位的整数(浮点数).但是问题是: 如何使用AVX/AVX2以尽可能小的指令转置8x8浮点矩阵? 解决方案 我已经回答 ..
发布时间:2020-09-15 05:29:00 其他开发

使用AVX最快实现指数函数

我正在寻找对AVX元素(单精度浮点数)进行操作的指数函数的有效(快速)近似值.即-__m256 _mm256_exp_ps( __m256 x )没有SVML. 相对精度应为〜1e-6或〜20个尾数位(2 ^ 20中为1的一部分). 如果它是使用Intel内在函数以C风格编写的,我会很高兴. 代码应该是可移植的(Windows,macOS,Linux,MSVC,ICC,GCC等). ..
发布时间:2020-09-15 05:28:50 其他开发

英特尔avx2中的movemask指令是否有反指令?

movemask指令采用__m256i并返回一个int32,其中每个位(前4位,8位或全部32位,取决于输入矢量元素的类型)是相应矢量元素的最高有效位./p> 我想做个逆运算:取一个32(只有4、8或32个最低有效位才有意义),然后得到一个__m256i,其中每个int8,int32或int64大小的块的最高有效位均已设置到原始位. 基本上,我想从压缩的位掩码转到可以被其他AVX2指令(例 ..
发布时间:2020-09-15 05:27:36 其他开发

如何在AVX/AVX2中增加向量

我想使用内在函数来增加SIMD向量的元素.最简单的方法似乎是在每个元素上加1,如下所示: (注意:vec_inc之前已设置为1) vec = _mm256_add_epi16 (vec, vec_inc); 但是有增加矢量的特殊指令吗?像此页面中的inc一样?还是其他更简单的方法? 解决方案 INC指令不是SIMD级别指令,它在整数标量上运行. 正如您和Paul已经建议的那 ..
发布时间:2020-09-13 00:34:25 其他开发

英特尔AVX2组装开发

我正在使用面向64位体系结构的英特尔程序集优化我的视频解码器.为了进行优化,请使用AVX2指令集. 我的开发环境:- 操作系统:-Win 7(64位) IDE:-MSVS 2008(专业版) CPU:-酷睿i5(最多支持AVX) 汇编程序:-YASM 我想知道是否有任何模拟器可以运行和调试我的AVX2代码,而无需升级硬件. 我主要是想运行&在现有环境中调试我的应用程序. 有什 ..
发布时间:2020-09-12 23:39:48 其他开发