2013-07-25 48 views
93

BLAS、LAPACK、ATLASがどのように関連しているのか、どうやって一緒に使うべきなのか分かりません!私はすべてのマニュアルを見てきましたが、私はBLASとLAPACKの一般的な考え方と、私が見つけたほんのわずかの例でそれらを使用する方法を持っていますが、ATLASを使って実際の例を見つけることはできませんこの二つ。BLASとLAPACKとATLASとの関係

私はマトリックスで低レベルの作業をしようとしています。私の主な言語はCです。まずはGSLを使いたかったのですが、BLASとATLASを使用することをお勧めします。どのようにこれらを(C言語で)一緒に使うかの良い例を挙げている良いウェブページはありますか?言い換えれば、私はこれらの3つ(またはそれらのサブセット)の使用に関するチュートリアルを探しています。要するに私は混乱している!

+1

http://scicomp.stackexchange.com/questions/8052/what-is-the-relationship-of-blas-lapack-and-other-linear-algebra-libraries –

答えて

8

私は周りを見渡し、いくつかの簡単な例でこれらの2つのWebページを見つけることができました。もっと多くの人々がこれらのライブラリを使用するためのコードの例を追加したいと思っています。 BLAS、ATLASとの関係のためにグーグル

http://www.seehuhn.de/pages/linear

http://www.lindonslog.com/programming/atlas-blas-lapack-linear-algebra-libraries/

+2

このレポを見てください:https://github.com/Foadsf/Cmathtutsここではたくさんの例を集めました。あなたが言及したこれらの記事のものを含めて、私がインターネット上で見つけることができるほとんどすべて。 – Foad

112

BLASは、低レベルの行列演算とベクトル演算(「スカラーでベクトルを乗算する」、「2つの行列を乗算して第3の行列に加算する」など)の集合です。

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

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

「使用する」とは、何をしようとしているのか、どのプラットフォームを使用しているのかによって異なります。しかし、あなたは "ATLAS + LAPACKを使う"ということで間違っていないでしょう。

+0

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

+1

@astroboy:あなたが実際にやろうとしていることについていくつかの情報を教えてもらえますか? LAPACKは特に*巨大な*ライブラリです。 –

+0

簡単にするために、私は行列を持っていて、ある値でそれを掛けたいとします。 CでATLASと(LAPACKまたはBLAS)をどのように組み合わせることができますか?これらの機能の実装方法を見てみたいです。 http://www.netlib.org/lapack/lapacke.htmlにいくつかの例がありますが、ATLASについての言及はありません! – makhlaghi

2

私、LAPACKは、このページに私をもたらしました。質問はすでに古くて、スティーブン・キヤノンの答えは当初の理解に非常に役立ちましたが、私は同じ質問の他の人にWikipedia entry on BLASを紹介します。その中のページとリンクは私にとってとても役に立ちました。

+0

wikiのリンクは確かなリファレンスですが、blasやアトラスに焦点を当てています。 – javadba

21

私はCに、いくつかの線形代数を始めたときに前に、それは彼らが何らかの形で礎石であるという事実にもかかわらず、非常に少ないBLASのためのチュートリアル、LAPACKおよびその他の基本的なAPI sがあります見て驚きと私のところに来たものの他の多くの図書館のそのため、私はthis Github repoに...私はBLASCBLASLAPACKCLAPACKLAPACKEATLASOpenBLASのためにすべてのインターネット上で見つけることができるすべての例/チュートリアルを集め始めました。

機械的な技術者として、このようなレポやギターを管理する経験はほとんどありません。それはまずあなたたちに完全な混乱として見えるでしょう。しかし、あなたが不器用な構造を乗り越えることができれば、助けになるかもしれないあらゆる種類の例と指示を見つけることができます。私は彼らがコンパイルしていることを確認するために最も努力しましたが、コンパイルしないものは私が言及しました。私はGNU compilersgcc,g++およびgfortran)とコンパイルできるようにそれらの多くを修正しました。私はMakeFileを作成して、CまたはC++プログラムで個々のFortran/FORTRANルーチンを呼び出す方法を学ぶことができます。私はまた、MacとLinux(申し訳ありませんがWindowsの人!)のためのいくつかのインストール手順を入れている。また、これらのライブラリの一部を自動的にコンパイルするためのファイルをbash.shとしました。 およびLAPACKは、API(具体的にはSDK)ではありません。それらは、実装やライブラリではなく、仕様や言語拡張のリストです。それによると、オリジナルの実装はNetlibFORTRAN 77にあり、ほとんどの人はBLASLAPACKを話すときに混乱しています!したがって、APIを使用しているときに奇妙なことがたくさん見られるのは、Cライブラリと関数ではなく、で実際にFORTRANルーチンを呼び出していたからです。 ATLASOpenBLASは、私が知る限りBLASLACPACKの最良の実装のいくつかです。私の知る限りでは、彼らはゼロからC/C++に実装されていますが(確かではありません!)、元のAPIに準拠しています。特定のハードウェアやプラットフォームに合わせて最適化されたベンダー固有の実装もあります。誰でもそれらを使用することを強くお勧めします。 とLAPACKCに入力することをお勧めする人には、FORTRAN-Cを最初に習得することをお勧めします。前述のレポの最初の章はこの問題に専念しています。そこで、私は多くの異なる例を収集しました。

+5

私は一部のSOユーザーの敵意を理解しませんでした。私は実際に何人かの人々の助けになるかもしれないこれらの例を収集するために数週間を費やしており、最後に私はこの質問に答えるのに十分なポイントを持っています。分かりません。この返信に間違いがあった場合は、単にコメントしてお知らせしていただきますように、私は編集して改善することができます。あなたは編集を提案することができます。 – Foad

+2

Foadこれは古いコメントですが、私はあなたの努力とあなたの不満に感謝します。私は敵意も理解していない。私はいくつかの民間人の使用をルートとしていると思いますので、芝生として見るものを踏み台にして誰でも投票して敬意を払ってください。 – cdcdcd

+1

@cdcdcd遅れて返信してくださり、ありがとうございました。完全にあなたと同意します。もちろん、初心者のSOユーザーとして、私は多くの問題を抱えているかもしれませんが、私に改善勧告を与えずに私にdownvotingすることは、むしろ破壊的です。お互いにもっと寛容で辛抱強くなる日が待ち望まれています。 – Foad

0

私が知っている限り、ATLASリポジトリで作業した後、CにBLASの再実装が含まれているようです。それ以上のことはありますが、質問に答えることを願っています。