GCC 对英特尔 AVX 内部函数的支持 (dvec.h)

GCC support for Intel AVX instrinsics (dvec.h)

GCC 是否支持 dvec.h,如果不支持,我该如何移植为 ICC 编写的代码以与 GCC 一起使用?

我遇到错误:

fatal error: dvec.h: No such file or directory
 #include <dvec.h>

或者,GCC 无法找到 F32vec8

参见 Agner Fog 的手册 Optimizing software in C++。请参阅第 12.5 节使用向量 类.

Agner 的 Vector Class Library (VCL) 比 Intel 的 dvec.h 强大得多,它适用于更多的编译器(包括 GCC 和 Clang),而且它是免费的。但是,它需要 C++。

另一种选择是使用 Yeppp!。 Yepp 适用于 C、C++、C#、Java 和 FORTRAN,而不仅仅是 C++。然而,它实际上是一个你必须 link 的库。VCL 只是一组头文件。

Yeppp的又一区别!而 VCL 就是 Yeppp!是从汇编构建的,而 VCL 使用内部函数。这是 Yeppp 的原因之一!需要 linked in(MSVC 64 位模式不允许内联汇编)。

内在函数的一个缺点是编译器可以以不同于您预期的方式实现它们。这通常不是 ICC 和 GCC 的问题。就内在而言,它们非常出色。但是,带有 AVX 尤其是 FMA 的 MSVC 令人失望(尽管使用 SSE 通常没问题)。因此,与 MSVC 相比,使用带有 GCC 的 VCL 的性能可能与 AVX 和 FMA 有很大不同。

通过组装,您总能得到想要的。然而,自从耶普!不是内联汇编你必须处理函数调用开销。在我的例子中,大多数时候我想要内联汇编之类的东西,这是内在函数主要实现的。

我不知道耶普!很好,但是VCL库的文档非常好,源代码也很清楚。