GCC是否支持dvec.h
,如果不支持,我可以做些什麼來編寫用於ICC的代碼以便與GCC協同工作?對英特爾AVX內部函數(dvec.h)的GCC支持
我得到錯誤:
fatal error: dvec.h: No such file or directory
#include <dvec.h>
另外,GCC找不到F32vec8
。
GCC是否支持dvec.h
,如果不支持,我可以做些什麼來編寫用於ICC的代碼以便與GCC協同工作?對英特爾AVX內部函數(dvec.h)的GCC支持
我得到錯誤:
fatal error: dvec.h: No such file or directory
#include <dvec.h>
另外,GCC找不到F32vec8
。
查看Agner霧的手冊Optimizing software in C++。請參見12.5使用矢量類。
昂納的Vector Class Library (VCL)比英特爾的dvec.h
更爲強大,它適用於更多的編譯器(包括GCC和鐺),而且是免費的。但是,它需要C++。
另一種選擇是使用Yeppp!。 Yepp適用於C,C++,C#,Java和FORTRAN,而不僅僅是C++。但是,它是一個您必須鏈接的實際庫.VCL只是一組頭文件。
Yeppp的另一個區別!而VCL就是Yeppp!是從彙編構建的,而VCL使用內在的。這是Yeppp的原因之一!需要鏈接(MSVC 64位模式不允許內聯彙編)。
內部函數的一個缺點是編譯器可以以不同的方式實現它們。這通常不是ICC和GCC的問題。當涉及到內在時,它們非常出色。但是,使用AVX和特別是FMA的MSVC令人失望(儘管SSE通常很好)。因此,使用GCC的VCL與MSVC相比的性能可能與AVX和FMA有很大不同。
隨着大會,你總是得到你想要的。但是,自從Yeppp!不是內聯彙編,你必須處理函數調用開銷。在我的情況下,大多數時候我想要內聯程序集這是內在函數大部分實現的內容。
我不知道Yeppp!但是VCL庫的文檔非常好,源代碼非常清晰。
優秀。 VCL + GCC給了我4倍於dvec + ICC的性能。沒有不兼容性(不像GCC的矢量擴展)。 Yeppp是高級程序庫還是低級程序庫?它如何取代內部函數? –
Yeppp!據我所知,這是一個低級別的圖書館。至少,它不像Eigen那樣是一個高級別的BLAS庫。我只下載它,安裝,編譯並運行一些基準測試。我也瀏覽了一些源代碼。 [Yeppp!的作者](http://stackoverflow.com/users/848177/marat-dukhan)在SO上的SIMD上寫了一些最好的答案。 –
我覺得你運氣不好 - 你需要用等效內部函數來替換Intel SIMD類的使用。 –
@PaulR你有建議如何在GCC中完成它? –
這實際上取決於如何使用這些類 - 如果您之前沒有編寫SIMD代碼,那麼在您之前您有一些學習曲線。 –