ATLASは無料のBLAS / LAPACKの代替品であり、コンパイル時にマシンに合わせて調整されます。MKLは、Intelが出荷する商用ライブラリです。パフォーマンスに関しては、これら2つのライブラリは同等ですか、それともMKLが一部のタスクで優位を占めていますか?もしそうなら、どれ?
ATLASは無料のBLAS / LAPACKの代替品であり、コンパイル時にマシンに合わせて調整されます。MKLは、Intelが出荷する商用ライブラリです。パフォーマンスに関しては、これら2つのライブラリは同等ですか、それともMKLが一部のタスクで優位を占めていますか?もしそうなら、どれ?
回答:
BLASはモノリシックではありません。BLAS1とBLAS2はメモリ帯域幅が制限されており、明らかな速度(ループの展開、レベル2のキャッシュブロッキング)を超えて高速化するためにできることはあまりありません。BLAS3はより興味深いものであり、ここでのプロトタイプのベンチマークは行列-行列乗算です。私の知る限り、GOTOBlasは常に明確な勝者でした。たとえば、この比較またはこの比較とこの正当化を参照してください。
数年後、BLIS Projectができました。MKLに代わる最高の無料の代替手段です。
プロフィール、推測しないでください!(「ベンチマーク、推測しないでください!」としても機能します。)
一般的なことはありません。実行したいタスク(BLAS 1/2/3など)と使用しているハードウェアに大きく依存します(明らかに、インテルMKLはARMプロセッサーで実行されません。例;しかし、Intelプロセッサ間でも、パフォーマンスの違いが期待できます)。
言及する価値があるもう1つのことは、AMDがプロセッサに合わせた数学ライブラリであるAMD Core Math Libraryも提供していることです。IntelのMKLほど機能が豊富ではありませんが、BLASが含まれています。
この質問に対する以前の回答は、ほとんどの重要なポイントをカバーしていますが、これに関して1つのコメントを追加します。
MKLにはいくつかのタスクの優位性がありますか?
MKLチームは、将来のIntel命令セットと特定のプロセッサでの実装について知るユニークな立場にあります。さらに、Intel以外の誰も使用できない独自のプロセッサシミュレータと試作前のハードウェアにアクセスできます。したがって、MKLは、将来の製品に関する知識の程度、およびこの知識をいつ入手するかに関して優位にあります。したがって、少なくとも新機能を備えた製品の寿命の早い時期に、BLASの実装が他の誰よりも優れているのであれば、驚くべきことではありません。
一方、インテルはAVX-512命令セットについて非常にオープンであり、開発者がこれらをネイティブにサポートしないプロセッサーでAVX-512命令をエミュレートできるようにするインテル®ソフトウェア開発エミュレーター(SDE)を提供しています。このため、これらの製品の寿命の早い時期にAVX-512をサポートするIntelプロセッサでBLASの高品質のオープンソース実装が利用可能になっても驚くことではありません。
もちろん、特定のプロセッサに関する詳細な情報と、高密度線形代数アルゴリズムの基本情報との違いは、完全には解決されていません。次の引用は、私ができる以上にこの問題に対処しています。
理論的には、理論と実践の間に違いはありません。しかし、実際にはあります。
完全開示:私はインテルで働いています。
ベンダーのBLASライブラリとオープンソースのBLASライブラリの主な違いは、オープンソースが最新のハードウェア機能をサポートするのにかかる時間だと思います。
BLASは広く使用されているため、最新のハードウェア機能をサポートすることはベンダーの関心事です。たとえば、2011年1月に「sandy-bridge」プロセッサで導入されたIntelのAVXベクトル拡張を検討してください。MKLはCPUが利用可能になる前からAVXをサポートしていました。 。
また、アプリケーションが本当にパフォーマンスを必要とし、さまざまなBLASライブラリのベンチマークを開始する前、または最適化に取り組むハッキングを開始する前に、アプリケーションのプロファイルを作成します。人間の直感は非常に効果的なプロファイラーの予測因子ではないことが一般的です。少なくとも私はそうではありません!したがって、時間をランダムに最適化するのではなく、アプリケーションのプロファイルを作成し、各ボトルネックに体系的にアプローチします。