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 float4
是 Vec4f
,double4
是 Vec4d
。与 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
我正在寻找 float4 / double4 结构的 AVX-256/512 代码,它重载基本操作 *、+、/、-、按标量缩放等,以便从向量操作中快速提升性能使用 float4/double4 编写的代码。 OpenCL 将这些数据类型作为内部函数,但 XeonPhi 上的 C++ 代码 运行 需要利用 512 位 SIMD 单元的新实现。
您要找的是 Agner Fog 的Vector Class Library(VCL)。我用它来代替 OpenCL 中的矢量类型。
使用 VCL float4
是 Vec4f
,double4
是 Vec4d
。与 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