GCC支持英特尔AVX instrinsics(dvec.h)

时间:2015-09-29 12:28:55

标签: gcc intrinsics avx icc

GCC是否支持dvec.h,如果没有,我可以做些什么来为ICC编写的代码移植到GCC?

我收到错误:

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

或者,GCC找不到F32vec8

1 个答案:

答案 0 :(得分:2)

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

enter image description here

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

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

Yeppp的另一个区别!和VCL是Yeppp!由汇编构建,而VCL使用内在函数。这是Yeppp的一个原因!需要链接(MSVC 64位模式不允许内联汇编)。

内在函数的一个缺点是编译器可以以不同的方式实现它们。这通常不是ICC和GCC的问题。它们在内在方面非常出色。然而,使用AVX的MSVC尤其是FMA令人失望(尽管SSE通常很好)。因此,与MSVC相比,使用VCL和GCC的性能可能与AVX和FMA完全不同。

通过装配你总能得到你想要的东西。但是,自从Yeppp!不是内联汇编,你必须处理函数调用开销。在我的情况下,大多数时候我想要像内联汇编这样的东西,这是内在函数主要实现的。

我不知道Yeppp!好吧,但VCL库的文档非常好,源代码非常清晰。