c ++ SSE SIMD框架

22 c++ sse simd intrinsics

有谁知道一个开源的C++ x86 SIMD内在函数库?

英特尔在其集成性能原语库中提供了我所需要的,但由于版权所有,我无法使用它.

编辑

我已经知道编译器提供的内在函数了.我需要的是一个方便的界面来使用它们.

小智 24

看看libsimdpp仅限头文件的C++ SIMD包装器库.

该库通过单个接口支持多个指令集:SSE2,SSE3,SSSE3,SSE4.1,AVX,AVX2,AVX512F,XOP,FMA3/4,NEON,NEONv2,Altivec.所有Clang,GCC,MSVC和ICC都被支持.

通过将缺失的指令实现为受支持的指令的组合来解决指令集之间的任何差异.作为奖励,可以为几个指令集编译相同的代码,将生成的目标文件链接到单个可执行文件,并使用方便的动态调度机制来运行最适合当前处理器的实现.

  • @Sebastian你应该看看现在处于发布候选阶段的2.0版本.应该有很少的错误,如果有的话,因为所有支持的配置都在不断测试.文档也得到了显着改进.免责声明:我是图书馆的作者. (2认同)

Vir*_*Vir 12

近年来出现了几个用于抽象显式SIMD编程的库.最重要的是:

要寻找的最重要的事情是拥有一组可用的类型,以正确抽象给定目标的最佳可用SIMD寄存器和指令.显然,对没有SIMD支持的系统完全可移植性.

  • Vectorclass库不受许可许可 - 仅限GPL或商业许可. (2认同)

Lir*_*una 6

我写了一个GLSL风格的库,它将转换为近乎完美的ASM代码.

一个非常常见的操作 - 交叉产品:

vec4 cross(const vec4 &a, const vec4 &b)
{
    return a.yzxw * b.zxyw - a.zxyw * b.yzxw;
}
Run Code Online (Sandbox Code Playgroud)

将使用glsl-sse2转换为此组合代码:

_Z5crossRK4vec4S1_:
    movaps    (%rsi), %xmm1
    movaps    (%rdx), %xmm2
    pshufd    $201, %xmm1, %xmm5
    pshufd    $210, %xmm2, %xmm0
    pshufd    $210, %xmm1, %xmm4
    pshufd    $201, %xmm2, %xmm3
    mulps     %xmm0, %xmm5
    mulps     %xmm3, %xmm4
    subps     %xmm4, %xmm5
    movaps    %xmm5, (%rdi)
    ret
Run Code Online (Sandbox Code Playgroud)

请注意,图书馆还不完善,而且很可能还有新的错误.


Nec*_*lis 5

看看AMD 的 SSEPlus 项目,可能是你想要的

  • @VioletGiraffe:从技术上讲,最后一次更新是在 2008 年,因为它只打算包含 SSE,因此缺少 FMA、XOP 和 VMX 等较新的集合。在稳定性方面,它基本上只是一组大量的包装器,因此它应该非常稳定。 (2认同)