portability-simd-intrinsics

查找 SIMD intrinsics 调用并建议使用 std::experimental::simd (P0214) 替代方案。

如果选项 Suggest 设置为 true,则

_mm_add_epi32(a, b); // x86
vec_add(a, b);       // Power

检查建议使用以下替代方案:operator+std::experimental::simd 对象上。

否则,它只会抱怨 intrinsics 不可移植(并且有 P0214 替代方案)。

许多体系结构提供 SIMD 操作(例如 x86 SSE/AVX、Power AltiVec/VSX、ARM NEON)。通常,实现相同算法的 SIMD 代码是用多个目标分发片段编写的,以优化不同的体系结构或微体系结构。

C++ 标准提案 P0214 及其扩展涵盖了许多常见的 SIMD 操作。通过从目标依赖的 intrinsics 迁移到 P0214 操作,可以简化 SIMD 代码,并将不同目标的片段统一起来。

有关数据并行标准库的介绍和动机,请参阅 P0214

选项

Suggest

如果此选项设置为 true(默认值为 false),则检查将建议使用 P0214 替代方案,否则它只会指出 intrinsic 函数不可移植。

Std

用于建议 P0214 替代方案的命名空间。如果未指定,则对于 -std=c++20 使用 std::,对于 -std=c++11 使用 std::experimental::