BLAS、LAPACK、ATLASの関係は?


142

BLAS、LAPACK、ATLASがどのように関連しているか、またそれらをどのように一緒に使用する必要があるのか​​理解できません!私は彼らのすべてのマニュアルを調べてきましたが、BLASとLAPACKの概要と、見つけた非常に少数の例でそれらを使用する方法がありますが、ATLASを使用して実際の例を見つけることはできません。この二つ。

私はマトリックスで低レベルの作業を行おうとしていますが、私の主要言語はCです。最初にGSLを使用したかったのですが、最高のパフォーマンスが必要な場合はBLASとATLASを使用する必要があると書かれています。これらをすべて(Cで)一緒に使用する方法の良い例を示す良いWebページはありますか?言い換えれば、これら3つ(またはそれらのサブセット!)の使用に関するチュートリアルを探しています。要するに私は混乱しています!


回答:


156

BLASは、低レベルの行列とベクトルの算術演算のコレクションです(「ベクトルにスカラーを乗算する」、「2つの行列を乗算して3番目の行列に追加する」など)。

LAPACKは、より高レベルの線形代数演算のコレクションです。「行列の固有値を見つける」、「行列の特異値を見つける」、または「線形システムを解く」などのことを行うために使用される行列分解(LU、LLt、QR、SVD、Schurなど)のようなもの」。LAPACKはBLASの上に構築されています。LAPACKの多くのユーザーはLAPACK インターフェイスのみを使用しており、BLASをまったく意識する必要はありません。LAPACKは通常、BLASとは別にコンパイルされ、利用可能な高度に最適化されたBLAS実装を使用できます。

ATLASは、BLASインターフェースの移植性の高い優れた実装であり、最も一般的に使用されるLAPACK操作のいくつかも実装します。

何を「使用すべきか」は、やろうとしていることや使用しているプラ​​ットフォームの詳細によって多少異なります。ただし、「ATLAS + LAPACKを使用する」ことで、それほど間違いはありません。


説明ありがとうございます。ATLAS + LAPACKの使用例を知っていますか?これらの使用方法を理解するには、いくつかの例を見る必要があります!私は彼らが何のためにあるのか、彼らが何をしているのかの理論を理解していますが、Cで実際に実装する方法の例を見つけることはほとんどできません。
makhlaghi 2013

1
@astroboy:あなたが実際にやろうとしていることに関する情報を教えてもらえますか?LAPACKは特に巨大なライブラリです。
スティーブンキャノン

簡単にするために、行列があり、それを特定の値で乗算するとします。CでATLASと(LAPACKまたはBLAS)を組み合わせてこれを行うにはどうすればよいですか?これらの関数を実装する方法を知りたいだけです。netlib.org/lapack/lapacke.htmlにいくつかの例がありますが、ATLASについての言及はありません!
makhlaghi 2013

BLAS、LAPACK、MKLなど、メモリよりもはるかに大きいオブジェクトで透過的に機能できるものはありますか?
skan

1
MinhNghĩa@:そこ標準は、あるnetlib.org/blas/blast-forumが、()は執行はありません-テストスイートのない標準は本当に標準ではありません-と、(b)は、私は考えていませんそのドキュメントで説明されているインターフェースの完全なセットを誰もが実装すること。それは、ええと、野心的です。
スティーブンキャノン

40

以前、で線形代数を実行し始めたとき、他の多くのライブラリの土台であるにもかかわらず、やその他の基本的なのCチュートリアルが非常に少ないことに驚きました。そのために私はインターネット上で、私はすべてを見つけることができるすべての例/チュートリアルを集め始め、、、、、、...におけるこのGithubのレポBLASLAPACKAPIBLASCBLASLAPACKCLAPACKLAPACKEATLASOpenBLAS

まあ、私は機械エンジニアとしてそのようなgitリポジトリやGitHubを管理した経験がほとんどないことを警告しておきます。それはあなたたちにとって最初は完全に混乱しているように見えます。しかし、厄介な構造をうまく乗り越えることができれば、助けになるかもしれないあらゆる種類の例と指示を見つけるでしょう。それらがコンパイルされることを確認するために、それらのほとんどを試しました。そして、私が言及したコンパイルしないもの。それらの多くをGNU compilersgccg++およびgfortran)でコンパイルできるように変更しました。私が作ったMakeFile、あなたが個々呼び出すことができる方法を学ぶために読むことができるのFortran/FORTRANでルーチンをCまたはC++プログラムを。また、MacとLinuxのインストール手順もいくつか記載しています(Windowsの人はごめんなさい!)。私もいくつか作りましたbash .sh これらのライブラリの一部を自動コンパイルするためのファイル。

しかし、あなたの他の質問に行きます:BLASそしてLAPACK、むしろAPI特定SDKのものではありません。これらは、実装やライブラリではなく、仕様または言語拡張のリストにすぎません。言ったことで、そこで元の実装であるにNetlibFORTRAN 77ほとんどの人が(紛らわしい!)を参照してくださいについて話すときは、BLASLAPACK。したがって、これらAPIのを使用しているときに多くの奇妙なことが見られるのは、ライブラリや関数FORTRANCはなく実際にルーチンを呼び出しているためですCATLASそして、OpenBLASの最高の実装のいくつかであるBLASLACPACK私の知る限り。彼らは元のAPIに準拠していますが、実装されている私の知識には準拠していますC/C++ゼロから(わからない!)GPGPU実装がありますAPI使用してねOpenCLCLBlastclBLASclMAGMAArrayFireViennaCLをいくつかに言及することは。特定のハードウェアまたはプラットフォーム用に最適化されたベンダー固有の実装もあり、それらを使用することは誰にも推奨しません。

使用して学びたい人に私の推薦BLASLAPACKC学ぶことであるFORTRAN-C第1の混合プログラミングを。言及されたレポの最初の章はこの問題に捧げられており、そこで多くの異なる例を集めました。

PS私は時々リポジトリのdevブランチに取り組んできました。少し面倒くさいようです!


LAPACKのWikipediaページは、「LAPACK(線形代数パッケージ)は標準ソフトウェアライブラリです」で始まります。これはAPI仕様であり、実装ではないため、それは正しくないと言っていますか?
Noah_S 2017

1
いくつかの調査の後、LAPACKとBLASは実際に実装されているようです。BLASに関するNetLibのFAQから:「BLAS(基本線形代数サブプログラム)は、基本的なベクトルおよび行列演算を実行するための標準的なビルディングブロックを提供するルーチンです。」LAPACKのGitHubページから:「LAPACKはFortranサブルーチンのライブラリーです。」これに基づいて、またLAPACKのGitHubプロジェクトを読むと、BLASとLAPACKは実際には実装であるという印象があります。LAPACKはBLASに基づいて構築され、より高度な機能を提供します。
Noah_S 2017

1
@Noah_S私はWikipediaを「the」参照として使用しませんでしたが、私の限られた知識では、LAPACKの実装がいくつかあります。私はそれをAPIと呼ぶほうがより正確だと思います。しかし、私が間違っている場合は修正してください。
Foad 2017

2
私は混乱の一部は、BLASは、API /仕様であることだと思いますが、そこでまた、単に「BLASライブラリー」と呼ばれている(にNetlibから)BLASの「リファレンス実装は、」。参照実装は最適化されていないため、通常、人々がBLASと言うときはAPIを意味します。そのため、実際の業界ではあまり使用されていません。ATLASはいくつかのLAPACKサブルーチンの最適化された実装を提供し、オプションでそれらの残りをLAPACK自体からプルして、ビルドされたATLAS libファイルに完全なLAPACK実装を生成します。
Andrew Janke

1
@Noah_S矛盾はありません。各ライブラリにはAPIがあり、これにより、API互換性を維持しながら実際の機能を再実装することが可能になり、それがLAPACKで起こったことです。
アンドレイ

17

ATLASは今ではかなり時代遅れです。さまざまなプラットフォーム向けにBLASを最適化することは人間の能力を超えていると考えられていた時代に開発され、その結果、自動生成と自動調整が進むべき道でした。

2000年代の初めには、非常に効率的な実装を手動でコーディングする方法を示した後藤一成が登場しました。ニューヨークタイムズの興味深い記事をお楽しみください。https//www.nytimes.com/2005/11/28/technology/writing-the-fastest-code-by-hand-for-fun-a-human- computer-keeps.html

和重氏は、一方では行列-行列乗算の高性能実装の背後にある理論についてより深い洞察を持ち、他方ではこれらをよりよく設計しました。現在のCPUで通常最も高いパフォーマンスを発揮する彼のアプローチは、ATLASが自動調整する検索スペースにはありません。したがって、ATLASは本質的に劣っています。和重のBLASの実装は、GotoBLASとして知られるようになりました。彼が業界に参加したとき、それはOpenBLASとして分岐しました。

GotoBLASの背後にあるアイデアは、新しいアルゴリズムであるBLASのようなライブラリインスタンス化ソフトウェア(BLIS)フレームワーク(https://github.com/flame/blis)にリファクタリングされました。新しいアーキテクチャ用にカスタム実装する必要があります。BLISはCでコーディングされています。

この議論が示すのは、BLASには多くの実装があるということです。BLAS自体は、インターフェースの事実上の標準です。ATLASはかつて最先端でした。もうありません。


0

私の知る限り、ATLASリポジトリを使用した後は、CでのBLASの再実装が含まれているようです。それ以外にも多くの機能がありますが、質問に答えられることを願っています。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.