GCC对Intel AVX Instrinsic(dvec.h)的支持

GCC对Intel AVX Instrinsic(dvec.h)的支持,gcc,intrinsics,avx,icc,Gcc,Intrinsics,Avx,Icc,GCC是否支持dvec.h,如果不支持,我可以如何移植为ICC编写的代码以与GCC一起工作 我发现了一些错误: fatal error: dvec.h: No such file or directory #include <dvec.h> 致命错误:dvec.h:没有这样的文件或目录 #包括 或者,GCC无法找到F32vec8请参阅Agner Fog的手册。参见第12.5节使用向量类 Agner的功能远比Intel的dvec.h强大,它可以在更多的编译器上工作(包括GCC和

GCC是否支持
dvec.h
,如果不支持,我可以如何移植为ICC编写的代码以与GCC一起工作

我发现了一些错误:

fatal error: dvec.h: No such file or directory
 #include <dvec.h>
致命错误:dvec.h:没有这样的文件或目录
#包括
或者,GCC无法找到
F32vec8

请参阅Agner Fog的手册。参见第12.5节使用向量类

Agner的功能远比Intel的dvec.h强大,它可以在更多的编译器上工作(包括GCC和Clang),而且是免费的。但是,它需要C+++< /p> 另一个选择是使用。YEPP是C++、C++、C语言、java和FORTRAN的工作,而不仅仅是C++。然而,它实际上是一个必须链接的库。VCL只是一组头文件

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

intrinsic的一个缺点是编译器可以以不同于您预期的方式实现它们。这通常不是ICC和GCC的问题。就内在而言,他们是优秀的。然而,MSVC与AVX,尤其是FMA是令人失望的(虽然与苏格兰和南方能源公司,它通常是罚款)。因此,使用带GCC的VCL与使用AVX和FMA的MSVC相比,性能可能会有很大的不同

有了组装,你总能得到你想要的。然而,自从Yeppp!不是内联程序集,您必须处理函数调用开销。在我的例子中,大多数时候我想要一些类似内联汇编的东西,这正是Intrinsic主要实现的


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

我认为你运气不好-你需要用等效的内部函数替换英特尔SIMD类的用法。@PaulR你对如何在GCC中实现它有什么建议吗?这真的取决于类的使用方式-如果你没有编写以前的SIMD代码,但现在您有了一些学习曲线。@PaulR我有,但我不熟悉GCC。这似乎是一个很接近的模拟:<代码> DVEC.H./Cord>,并且有一些支持。是的,你也许可以使用GCC向量扩展,但是如果你想要最大的可移植性,那么你可能想考虑(a)使用本质(与所有编译器一起工作),或者甚至(b)。反向工程回到标量代码,然后让编译器自动向量化标量代码(最简单的解决方案,但性能可能不那么好)-选择取决于代码的性能关键程度,以及您对可移植性、未来证明等的关注程度。VCL+GCC的性能是dvec+ICC的4倍。也没有不兼容(与GCC的向量扩展不同)。Yeppp是高级例程库还是低级例程库?它是如何取代内在的?是的!据我所知,这是一个低级图书馆。至少,它不像Eigen那样是一个高级BLAS库。我只下载、安装、编译并运行了一些基准测试。我还浏览了一些源代码。写了一些关于SIMD的最佳答案。