2013-03-30 14 views
14

私はSSEとAVXのSIMD数学ライブラリ(好ましくはオープンソース)を探しています。私は、例えば8つの浮動小数点値を持つAVXレジスタvを持っていれば、sin(v)が8つの値のすべての罪を一度に返すことを望んでいます。SSEとAVXのSIMD数学ライブラリ

AMDには、いくつかのSIMD演算機能を備えたLibM http://developer.amd.com/tools/cpu-development/libm/がありますが、LibMはIntel CPUにはないFMA4を検出した場合にのみAVXを使用します。また、すべての関数名がs4(d2)で終了し、s8(d4)ではなく、AVXを完全に使用しているかどうかはわかりません。 Intel CPU上の標準的な数学ライブラリよりも優れた性能を発揮しますが、あまり良くありません。

インテルはSVMLをC++コンパイラの一部として持っていますが、コンパイラスイートはWindowsでは非常に高価です。さらに、インテルは非インテルのCPU上でライブラリを使用していません。

いくつかの数学関数(exp、log、sin、cos、およびsincos)をサポートする次のAVXライブラリhttp://software-lisc.fbk.eu/avx_mathfun/が見つかりました。それはSVMLよりも速い、私にとって非常に速い結果をもたらしますが、私は精度をチェックしていません。それは単一の浮動小数点でのみ動作し、Visual Studioでは動作しません(ただし、修正するのは簡単です)。それは別のSSEライブラリに基づいています。

他に提案がありますか?

編集:私は Vectorized Trig functions in C?

+1

それは独自のソリューションですが、Intelのマス・カーネル・ライブラリーは、かなり包括的なオプションです。ただし、Intel CPU上でのみ最適なパフォーマンスを発揮します。 Intel以外のプロセッサで実行している場合、最適化されていないコードパスを逸らすことは過去に知られていたと思います。しかし、それが現代版の場合はわかりません。 –

+0

ここでは対数を取得できます:https://stackoverflow.com/a/45898937/1915854 –

+0

Agner Fogの[Vector Class Library](http://agner.org/optimize/#vectorclass)はGPLedです。インテル固有の組み込み関数のラッパーで、手動ベクトル化をより便利にすることができますが、expやlogのような数学ライブラリ関数があります。 –

答えて

7

このテーマに多くの答えを持っているSOスレッドを発見した私は2つの他のプロジェクト(アインシュタインツールキット、およびのPOCl http://pocl.sourceforge.net/)のための汎用的なライブラリとしてVecmathlib https://bitbucket.org/eschnett/vecmathlib/を実装しています。 Vecmathlibはオープンソースで、C++で書かれています。

+1

それはまさに私が探しているパッケージのようです。私はそれを試して、あなたに戻ってきます。 –

+1

そのライブラリは非常に有望ですが、私はいくつかの問題に遭遇しました:a)bitbucket上のバージョンは#endifがなくなってコンパイルされません。b)ベンチマークデータは非常に失望しています。通常VMLは、私のテストでは - ここでは風にMINGW。そして、MSVCでコンパイルできないようです – ibell

関連する問題