2015-09-29 65 views
1

GCC是否支持dvec.h,如果不支持,我可以做些什麼來編寫用於ICC的代碼以便與GCC協同工作?對英特爾AVX內部函數(dvec.h)的GCC支持

我得到錯誤:

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

另外,GCC找不到F32vec8

+0

我覺得你運氣不好 - 你需要用等效內部函數來替換Intel SIMD類的使用。 –

+0

@PaulR你有建議如何在GCC中完成它? –

+0

這實際上取決於如何使用這些類 - 如果您之前沒有編寫SIMD代碼,那麼在您之前您有一些學習曲線。 –

回答

1

查看Agner霧的手冊Optimizing software in C++。請參見12.5使用矢量類。

enter image description here

昂納的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庫的文檔非常好,源代碼非常清晰。

+0

優秀。 VCL + GCC給了我4倍於dvec + ICC的性能。沒有不兼容性(不像GCC的矢量擴展)。 Yeppp是高級程序庫還是低級程序庫?它如何取代內部函數? –

+0

Yeppp!據我所知,這是一個低級別的圖書館。至少,它不像Eigen那樣是一個高級別的BLAS庫。我只下載它,安裝,編譯並運行一些基準測試。我也瀏覽了一些源代碼。 [Yeppp!的作者](http://stackoverflow.com/users/848177/marat-dukhan)在SO上的SIMD上寫了一些最好的答案。 –

相關問題