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都被支持.
通过将缺失的指令实现为受支持的指令的组合来解决指令集之间的任何差异.作为奖励,可以为几个指令集编译相同的代码,将生成的目标文件链接到单个可执行文件,并使用方便的动态调度机制来运行最适合当前处理器的实现.
Vir*_*Vir 12
近年来出现了几个用于抽象显式SIMD编程的库.最重要的是:
要寻找的最重要的事情是拥有一组可用的类型,以正确抽象给定目标的最佳可用SIMD寄存器和指令.显然,对没有SIMD支持的系统完全可移植性.
我写了一个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)
请注意,图书馆还不完善,而且很可能还有新的错误.
看看AMD 的 SSEPlus 项目,可能是你想要的