優れたポータブル SIMD ライブラリ [終了]
-
13-09-2019 - |
質問
c/c++ API を提供し、Intel および AMD の拡張機能と Visual Studio、GCC 互換で動作するポータブル SIMD ライブラリを推奨する人はいますか。double の 512x512 配列のスケーリングなどを高速化したいと考えています。ベクトル内積、行列乗算など。
これまでのところ、私が見つけた唯一のものは次のとおりです。http://simdx86.sourceforge.net/ しかし、最初のページにあるように、Visual Studio ではコンパイルできません。
私が収集した情報によると、AMD では動作しない Intel IPP もあります。AMD の Framewave もありますが、ライブラリのコンパイルとリンクにいくつかの問題があり、フォーラムは完全に機能しなくなっていました。どこかで Framewave を使用できた人はいますか?
ありがとう。
解決
行列とベクトルに対する高レベルの演算について言及しているため、 アトラス, インテルのMKL, プラズマ, 、 そして 炎 興味があるかもしれません。
一部の C++ 行列演算ライブラリには、Boost、Armadillo、Eigen、IT++、Newmat の uBLAS が含まれます。POOMA ライブラリには、おそらくこれらの機能のいくつかも含まれています。 この質問 MTL とも呼ばれます。
下位レベルの移植性プリミティブを探している場合は、私の同僚が SSE2、Altivec、VSX、Larrabee、および Cell SPE ベクトル操作のラッパーを開発しました。それは私たちの中で見つけることができます ソースリポジトリ, ただし、作品の一部として配布する場合、そのライセンス (学術) は適切ではない可能性があります。また、対象となる幅広いアプリケーション ニーズをカバーするために、現在も大幅な開発が行われています。
他のヒント
チェックアウトmacstl: http://www.pixelglow.com/macstl/する
liboilするまたは関連<のhref = "HTTPSを試してみてください。 ORG /モジュール/ orc.html」のrel = "nofollowをnoreferrer"> ORC の。特に、ORCは興味深いです。それはアーキテクチャ固有のコードにコンパイルされ、高レベルのアセンブリ言語を実装します。ずっとそう単純なラッパーのライブラリーよりも、かなり洗練されています。
あなたがダウンして汚いアセンブラとなって気にしないならば、あなたは常にすべてのSIMD命令のための組み込み関数を使用することができます。彼らは、すなわち、SSE4の組み込み関数のみSSE4有効のCPU上で実行され、それが機能拡張があることを確認するのはあなた次第です、プロセッサ固有のものになります。
良い記事がありますここのSIMDの適用についてます。
ただし、任意の外部ライブラリなしであなたのためのSIMDコードを生成するコンパイラを使用することができます。 VectorC の私は個人的にそれを使用したことがありませんが、良いことになっています。それは、私の知る限り、特別なライブラリを必要としない、それだけでSIMDからbenfitできるソースコードのこれらのビットをスポットして、指定したSSEのどんなレベルにコンパイルします。