AVX float4/double4 结构

AVX float4/double4 struct

我正在寻找 float4 / double4 结构的 AVX-256/512 代码,它重载基本操作 *、+、/、-、按标量缩放等,以便从向量操作中快速提升性能使用 float4/double4 编写的代码。 OpenCL 将这些数据类型作为内部函数,但 XeonPhi 上的 C++ 代码 运行 需要利用 512 位 SIMD 单元的新实现。

您要找的是 Agner Fog 的Vector Class Library(VCL)。我用它来代替 OpenCL 中的矢量类型。

使用 VCL float4Vec4fdouble4Vec4d。与 OpenCL 一样,您无需担心 AVX 与 AVX512。如果您使用 Vec8d 并针对 AVX 进行编译,它将使用两个 AVX 寄存器模拟 AVX512。

VCL 具有您想要的所有操作,例如 *,+,/,-,+=,-=,/=,*=, multiply and divide by scalar 和更多功能。

与 OpenCL 和 VCL 的主要区别在于 OpenCL 基本上创建了一个 CPU 调度程序。而使用 VCL,您必须自己编写一个 CPU 调度程序(它包含一些示例代码来通过文档执行此操作)。 VCL 通过 AVX512 为 SSE2 优化了功能,因此您可以针对多个不同的指令集。 Knights Corner Xeon Phi 甚至还有 a special version of the VCL

我想念的 OpenCL 的另一个特性是置换语法。在 OpenCL 中,要反转 float4 的组件顺序,您可以执行 v.wzyx,而对于 VCL,您可以执行 permute4f<3,2,1,0>(v)。我可能 create this syntax with C++ 但我不确定。

使用 VCL、OpenMP 和自定义 CPU 调度程序,我在 CPU.

上基本上替换了 OpenCL