165

BLAS、LAPACK、ATLAS がどのように関連しており、どのように組み合わせて使用​​すればよいかわかりません。私は彼らのすべてのマニュアルに目を通しており、BLAS と LAPACK の概要と、見つけたごくわずかな例でそれらを使用する方法を理解していますが、ATLAS を使用してそれがどのように関連しているかを確認する実際の例を見つけることができません。この二つ。

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

4

4 に答える 4

177

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

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

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

何を「使用する必要がある」かは、何をしようとしているのか、および使用しているプラ​​ットフォームの詳細によって多少異なります。ただし、「ATLAS + LAPACK を使用する」ことをお勧めします。

于 2013-07-25T12:42:25.750 に答える
53

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

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

しかし、あなたの他の質問に行きましょう: BLASandLAPACKはむしろAPI特定の s ではありませんSDK。それらは、実装やライブラリではなく、単なる仕様または言語拡張のリストです。そうは言っても、 にはNetlibによるオリジナルの実装があり、ほとんどの人はとFORTRAN 77について話すときに (紛らわしく!) 参照します。したがって、これらの s を使用しているときに多くの奇妙なことが見られる場合は、ライブラリや関数ではなく、実際にルーチンを呼び出していたことが原因です。私が知る限り、 andはandの最良の実装の一部です。それらはオリジナルに準拠していますが、私の知る限り、それらは実装されていますBLASLAPACKAPIFORTRANCCATLASOpenBLASBLASLACPACKAPIC/C++最初から(わからない!)。CLBlastclBLASclMAGMAArrayFire、およびViennaCLAPIを使用した のGPGPU 実装があります。また、特定のハードウェアまたはプラットフォーム用に最適化されたベンダー固有の実装もありますが、それらを使用することは強くお勧めしません。OpenCL

BLASand LAPACKinを使用して学習したい人には、最初に混合プログラミングCを学習することをお勧めします。FORTRAN-C言及されたレポの最初の章はこの問題に専念しており、そこで私は多くの異なる例を集めました.

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

于 2017-02-13T20:08:06.130 に答える
34

ATLAS は今ではかなり時代遅れです。さまざまなプラットフォーム向けに BLAS を最適化することは人間の能力を超えていると考えられていた時期に開発され、その結果、自動生成と自動チューニングが必要でした。

2000 年代初頭、後藤和茂が登場し、非常に効率的な実装を手作業でコーディングできることを示しました。New York Times の興味深い記事をお楽しみください: 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 の Kazushige の実​​装は、GotoBLAS として知られるようになりました。彼が業界に加わったとき、それは OpenBLAS としてフォークされました。

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

この議論が示しているのは、BLAS には多くの実装があるということです。BLAS 自体は、インターフェイスのデファクト スタンダードです。ATLAS はかつて最先端でした。それはもうありません。

于 2018-09-03T22:47:41.190 に答える
0

私の知る限り、ATLAS リポジトリを調べたところ、C での BLAS の再実装が含まれているようです。

于 2017-03-09T18:34:16.770 に答える