GCC是否支持dvec.h
,如果没有,我可以做些什么来为ICC编写的代码移植到GCC?
我收到错误:
fatal error: dvec.h: No such file or directory
#include <dvec.h>
或者,GCC找不到F32vec8
。
答案 0 :(得分:2)
参见Agner Fog的手册Optimizing software in C++。请参见12.5使用向量类。
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库的文档非常好,源代码非常清晰。