便携式仅包含头文件的 C++ 低级 SIMD 库
libsimdpp 是一个可移植的、只包含头文件的、零开销的 C++ 低级 SIMD 库。该库提供了对 x86、ARM、PowerPC 和 MIPS 架构中存在的 SIMD 指令集的单一接口。在支持不同 SIMD 指令集的架构中,该库允许将相同的源代码文件编译为每个 SIMD 指令集,然后将其连接到内部或第三方的动态调度机制中。这样,就可以在运行时查询处理器的功能,并选择最有效的实现。
该库位于 SIMD 内部编程和更高级的 SIMD 库之间的中间位置。为开发者提供尽可能多的控制,以便准确预测编译器将生成的代码。在可预见的未来,不计划进行 API 突变的更改。
库支持以下体系结构和指令集: - x86, x86-64: SSE2, SSE3, SSSE3, SSE4.1, AVX, AVX2, FMA3, FMA4, AVX512F, AVX512BW, AVX512DQ, AVX512VL, XOP, popcnt - ARM 32 位: NEON, NEONv2 - ARM 64 位: NEON, NEONv2 - PowerPC 32 位大端字节: Altivec, VSX v2.06, VSX v2.07 - PowerPC 64 位小端字节: Altivec, VSX v2.06, VSX v2.07 - MIPS 32 位小端字节: MSA - MIPS 64 位小端字节: MSA 主要的库开发工作是在 C++14 中进行的。 支持的编译器: - GCC: 4.8-7.x - Clang: 3.3-4.0 - Xcode 7.0-9.x - MSVC: 2013, 2015, 2017 - ICC (在 Linux 和 Windows 上): 2013, 2015, 2016, 2017
由于编译器错误或未完全实现的指令集,不同的编译器版本在不同的指令集上不受支持。有关详细信息,请参阅 simdpp/detail/workarounds.h。
暂无开放 Issues,或尚未同步最近议题。