19得票2回答
如何旋转一个SSE/AVX向量

我需要尽可能少的时钟周期执行旋转操作。 在第一种情况下,假设源和目标类型为__m128i: 源:|| A0 || A1 || A2 || A3 || 目标:|| A1 || A2 || A3 || A0 ||dest = (__m128i)_mm_shuffle_epi32((__m128...

19得票4回答
如何在256位AVX向量中找到水平最大值

我有一个__m256d向量,其中包含四个64位浮点数值。 我需要找到向量元素的水平最大值,并将结果存储在双精度标量值中; 我的尝试都使用了大量的向量元素洗牌操作,使代码不太优雅也不高效。此外,我发现不可能仅使用AVX指令。在某些时候,我必须使用SSE 128位指令来提取最终的64位值。但是,...

19得票1回答
值得花时间对齐AVX-256内存存储吗?

根据《Intel® 64 和 IA-32 架构优化参考手册》的 B.4(“Sandy Bridge 微架构性能调整技术”)第 B.4.5.2 小节(“辅助操作”),跨越两个页面的 32 字节 AVX 存储指令需要一个代价大约为 150 个时钟周期的辅助操作。 我在堆管理器中使用 YMM 寄存...

18得票3回答
使用SSE/AVX获取存储在__m256d中的值之和

有没有一种方法可以获得存储在__m256d变量中的值的总和? 我有这段代码。acc = _mm256_add_pd(acc, _mm256_mul_pd(row, vec)); //acc in this point contains {2.0, 8.0, 18.0, 32.0} acc = ...

18得票1回答
AVX VMOVDQA比两个SSE MOVDQA慢吗?

当我在处理快速ADD循环(如何提速x64汇编ADD循环)时,我使用SSE和AVX指令测试内存访问。为了执行加法操作,我需要读取两个输入并产生一个输出。因此,我编写了一个虚拟程序,将两个x64值读入寄存器中,并将其中一个写回内存,而没有进行任何操作。显然,这是无用的,只是为了进行基准测试。 我...

18得票2回答
x86 SIMD指令集参考手册/教程?

我正在研究使用这些内容来改善一些代码的性能,但是似乎很难找到有关在*mmintrin.h头文件中定义的函数的好文档,请问谁可以给我提供有关这方面的信息? 编辑:特别感兴趣的是如何入门的基础教程。

17得票2回答
展开循环以实现Ivy Bridge和Haswell处理器的最大吞吐量

我正在使用AVX一次计算八个点积。在我的当前代码中,我做的类似于以下操作(未展开之前): Ivy-Bridge/Sandy-Bridge__m256 areg0 = _mm256_set1_ps(a[m]); for(int i=0; i<n; i++) { _...

17得票3回答
实用的大数AVX/SSE可能吗?

SSE/AVX寄存器可视为整数或浮点BigNum。也就是说,可以忽略存在通道的事实。是否存在一种简单的方法来利用这种观点,并将这些寄存器作为单个或组合的BigNum使用?我之所以问,是因为我很少看到BigNum库,它们几乎普遍存储和对数组进行算术运算,而不是在SSE/AVX寄存器上。可移植性呢...

17得票2回答
ICC是否符合C99规范中关于复数乘法的要求?

考虑这段简单的代码:TBD#include <complex.h> complex float f(complex float x) { return x*x; } 如果你使用英特尔编译器并且使用-O3 -march=core-avx2 -fp-model strict编译它...

16得票4回答
如何在SSE/AVX中执行位求反操作?

是我想象还是SSE和AVX中缺少PNOT指令?也就是说,缺少一个翻转向量中每个位的指令。 如果是的话,有比使用全1向量执行PXOR更好的模拟方法吗?这很烦人,因为我需要设置一个全1向量来使用这种方法。