2009-06-11 54 views
20

任何人都可以推薦提供c/C++ API的便攜式SIMD庫,適用於英特爾和AMD擴展以及Visual Studio,兼容GCC。我正在加快縮放512x512陣列雙打的速度。矢量點積,矩陣乘法等。良好的便攜式SIMD庫

到目前爲止,我發現的唯一一個是: http://simdx86.sourceforge.net/但作爲第一頁說,它不能在visual studio上編譯。

還有英特爾IPP從我收集的內容不適用於AMD。還有來自AMD的Framewave,但是我在編譯和鏈接他們的庫時遇到了一些問題,他們的論壇完全死機。任何人都可以在任何地方使用Framewave?

謝謝。

+0

我曾經看過一些關於這個話題的碩士論文。在我的生活中,無法回想一下在搜索中會出現什麼條件。 – dmckee 2009-06-11 16:01:27

+8

查看[libsimdpp](https://github.com/p12tic/libsimdpp)庫 - 它爲SSE2-SSE4.1,AVX,AVX2,NEON,FMA3/4和XOP內在函數提供了一個通用接口。作爲獎勵,提供了方便的動態分派機制:相同的源代碼可以使用不同的編譯器選項(命名空間負責ODR)多次編譯,鏈接到同一個可執行文件中,並且庫會自動選擇目標處理器的最佳實現。 (免責聲明:我是作者) – user12 2013-10-31 03:40:48

+0

將此問題遷移到http://softwarerecs.stackexchange.com – Eonil 2014-05-24 08:45:04

回答

8

由於您提到對矩陣和向量的高級操作,因此可能需要使用ATLAS,Intel's MKL,PLASMAFLAME

一些C++矩陣數學庫包括來自Boost,Armadillo,Eigen,IT ++和Newmat的uBLAS。 POOMA圖書館可能還包括其中一些內容。 This question也指MTL。

如果您正在尋找較低級別的可移植原語,我的一位同事開發了一個圍繞SSE2,Altivec,VSX,Larrabee和Cell SPE矢量操作的封裝。它可以在我們的source repository中找到,但如果您想將其作爲您工作的一部分進行分發,則其許可(學術)可能不合適。它還處於重大發展階段,涵蓋了它所針對的應用需求範圍。

2

如果您不介意使用匯編程序弄壞和弄髒,那麼您始終可以使用所有SIMD指令的內在函數。它們將是特定於處理器的,即SSE4內在函數只能在支持SSE4的CPU上運行,並且由您來確定擴展是否在那裏。

有關應用SIMD的好文章here

但是,您可以使用編譯器爲您生成SIMD代碼,而無需任何外部庫。 VectorC應該是好的,雖然我從來沒有親自使用它。就我所知,它不需要任何特殊的庫,它只是顯示那些可以從SIMD獲得的源代碼,並且可以編譯爲您指定的任何級別的SSE。

3

嘗試liboil或相關的ORC。特別是ORC很有趣;它實現了編譯爲體系結構特定代碼的高級彙編語言。相當複雜,比簡單的包裝庫更重要。

10

EigenMPL2許可證授權僅標頭C++,其具有用於SSE,氖和的Altivec優化向量/矩陣數學庫。他們在附加模塊中有更復雜的數學運算。