23得票8回答
C++ SSE SIMD框架

有人知道一个开源的C++ x86 SIMD指令库吗? 英特尔在其集成性能基元库中提供了我需要的内容,但由于版权问题,我无法使用它。 编辑 我已经了解编译器提供的指令。我的需求是一个方便的接口来使用它们。

22得票5回答
如何将两个__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 };...

22得票2回答
对齐和不对齐的x86 SIMD指令之间的选择

通常有两种类型的SIMD指令: A. 一种是适用于对齐内存地址的指令,如果地址没有对齐到操作数大小的边界,将引发一般保护异常(#GP):movaps xmm0, xmmword ptr [rax] vmovaps ymm0, ymmword ptr [rax] vmovaps zmm0, ...

22得票5回答
在英特尔CPU上实现SIMD前缀和

我需要实现一个前缀和算法,并且希望它尽可能快。 例如: [3, 1, 7, 0, 4, 1, 6, 3] 应该给予: [3, 4, 11, 11, 15, 16, 22, 25] 有没有一种使用SSE SIMD CPU指令的方法来实现这个? 我的第一个想法是并行递归地...

22得票5回答
优化数组压缩

假设有一个数组: k = [1 2 0 0 5 4 0] 我可以通过以下方式计算掩码: m = k > 0 = [1 1 0 0 1 1 0] 只使用掩码m和以下操作, 左/右移位 And/Or 加/减/乘 我可以将k压缩成以下形式: [1 2 5 4] 这是我目前的方法(...

22得票5回答
使用AVX/AVX2转置一个8x8的浮点数

通过制作四个4x4矩阵并对它们进行转置,可以实现8x8矩阵的转置。但这不是我要的。 在另一个问题中,一个答案提供了一个解决方案,只需要24条指令就能处理8x8矩阵。然而,这不适用于浮点数。 由于AVX2包含256位寄存器,每个寄存器可以容纳八个32位整数(浮点数)。但问题是: 如何使用A...

22得票6回答
如何在Java中使用英特尔AVX技术?

我该如何从Java中使用Intel AVX向量指令集?这是一个简单的问题,但答案似乎很难找到。

22得票3回答
如何解决AVX加载/存储操作的32字节对齐问题?

我在使用ymm寄存器时遇到了对齐问题,代码片段看起来对我来说似乎很好。这里是一个最小的工作示例:#include <iostream> #include <immintrin.h> inline void ones(float *a) { __m256 o...

21得票1回答
IntStream导致数组元素错误地设置为0(JVM Bug,Java 11)

在下面的 P 类中,方法 test 看起来似乎总是返回相同的 false 值:import java.util.function.IntPredicate; import java.util.stream.IntStream; public class P implements IntPre...

21得票2回答
如何使用gcc进行向量化?

gcc编译器的v4系列可以自动使用一些现代CPU(如AMD Athlon或Intel Pentium/Core芯片)上的SIMD处理器对循环进行矢量化。这是如何实现的呢?