LAPACKのソースを表示
←
LAPACK
ナビゲーションに移動
検索に移動
あなたには「このページの編集」を行う権限がありません。理由は以下の通りです:
この操作は、次のグループに属する利用者のみが実行できます:
登録利用者
。
このページのソースの閲覧やコピーができます。
{{Infobox Software | 名称 = Reference LAPACK | ロゴ = <!-- ロゴ画像。[[ファイル:example.png|50px]]のようにウィキ構文で指定する --> | スクリーンショット = <!-- スクリーンショット。[[ファイル:example.png|100px]]のようにウィキ構文で指定する --> | 説明文 = <!-- スクリーンショットの説明文 --> | 開発者 = <!-- 人物の名前 --> | 開発元 = The University of Tennessee and The University of Tennessee Research Foundation, The University of California Berkeley, The University of Colorado Denver<!-- 組織の名前 --><ref>{{cite web |url=https://github.com/Reference-LAPACK/lapack/blob/master/LICENSE |title=lapack/LICENSE at master · Reference-LAPACK/lapack |date= |author= |accessdate= June 10, 2024}}</ref> | 初版 = {{Start date and age|1992|2|29}}<!-- 初版の発表日。{{Start date and age|年|月|日}} 等のテンプレートが便利 --> | 最新版 = 3.12.0 | 最新版発表日 = {{Start date and age|2023|11|24}}<ref>{{Cite web |title=Release History - LAPACK — Linear Algebra PACKage |author= |work=netlib.org |date= |access-date=25 May 2024 |url= https://www.netlib.org/lapack/#_release_history}}</ref><!-- 最新版(安定版)の発表日。{{Start date and age|年|月|日}} 等のテンプレートが便利 --> | 最新評価版 = | 最新評価版発表日 = <!-- 最新評価版の発表日。{{Start date and age|年|月|日}} 等のテンプレートが便利 --> | リポジトリ = {{url|https://github.com/Reference-LAPACK/lapack}}<!-- リポジトリのURL --> | プログラミング言語 = [[Fortran]] 90、[[C言語]] | 対応OS = | エンジン = <!-- ソフトが使用しているエンジン。ウェブブラウザにおけるレンタリングエンジン(Gecko、WebKit)など --> | 対応プラットフォーム = <!-- CPUアーキテクチャなど --> | サイズ = <!-- バイナリのサイズ --> | 対応言語 = | サポート状況 = | 種別 = [[数値線形代数]] | ライセンス = [[三条項BSDライセンス]] | 公式サイト = {{url|https://www.netlib.org/lapack/}} | 前身 = <!-- 前身となったソフトウェアの名称 --> | 後継 = <!-- 後継ソフトウェアの名称 --> | 業種 = <!-- Industry --> | 会員登録 = <!-- Registration --> }} '''LAPACK''' (Linear Algebra PACKage)は[[数値線形代数]]のための[[数値解析ソフトウェア]][[ライブラリ]]で、[[線型方程式系|線型方程式]]や[[最小二乗法|線型最小二乗問題]]、[[固有値|固有値問題]]、[[特異値分解|特異値問題]]等を数値的に解くために利用される。本ライブラリは[[複素数]]または[[実数]]を成分とする行列を扱うことが可能であり、[[LU分解]]や[[コレスキー分解]]、[[QR分解]]、[[シュア分解]]等の[[行列の分解]]を行うための[[サブルーチン]]を含む。サブルーチンは[[単精度]]版と[[倍精度]]版が提供される。{{start date|1992}}のLAPACKの初版は[[FORTRAN#FORTRAN 77|FORTRAN 77]] で実装されていたが、現在は[[FORTRAN#Fortran 90|Fortran 90]]が用いられている。LAPACK 3.4.0からはC言語インターフェースであるLAPACKEが統合され、[[C言語]]や[[C++]]からの利用が容易になった。 LAPACKは[[LINPACK]]および[[EISPACK]]の後継と見做されている。ただし、LINPACKの設計が開発当時近代的であった共有メモリ型[[ベクトル計算機|ベクトルコンピュータ]]を意識したものであるのに対して、本ライブラリの設計は[[キャッシュ (コンピュータシステム)|キャッシュ]]を用いた[[コンピュータ・アーキテクチャ|アーキテクチャ]]を有する、より近代的なコンピュータを意識したものである。LAPACKはLINPACK同様に[[Basic Linear Algebra Subprograms|BLAS]](Basic Linear Algebra Subprograms、基本線型代数サブプログラム群)ライブラリ上に構築されている。LAPACKは後に分散メモリ型のコンピュータ向けに{{仮リンク|ScaLAPACK|en|ScaLAPACK}}や{{仮リンク|PLAPACK|en|PLAPACK}}へと拡張された。 Reference LAPACKは[[三条項BSDライセンス]]で提供される[[オープンソース]]ソフトウェアである。 == サブルーチン == === 構成 === LAPACKのサブルーチンは以下の三種類に大別される。 ; ドライバルーチン(driver routines):LAPACKが扱うことが可能な問題を解くためのルーチン。 問題の例として[[線型方程式系]]を解く問題や[[対称行列]]の[[固有値|固有値問題]]などが挙げられる。利用者の要請に合致する機能のドライバルーチンが存在する場合にはそのルーチンの利用が推奨される。 ; 計算ルーチン(computational routines): 問題を解くために必要な計算タスクを実行するためのルーチン。LAPACKのドライバルーチンは計算ルーチンを連続的に呼び出すことで問題を解く。計算タスクの例として行列を[[LU分解]]することや[[対称行列]]を[[三重対角行列]]に変換することなどが挙げられる。前者は線型方程式系を解くために、そして後者は対称行列の固有値問題を解くために必要である。利用者の要請に合致するドライバルーチンが存在しない場合は計算ルーチンを組み合わせて問題を解くことになる。 ; 補助ルーチン(auxiliary routines): 補助的に利用されるルーチン。ブロックアルゴリズム内部で利用される計算タスクの一部を実行するものや、[[Basic Linear Algebra Subprograms|BLAS]]の機能をわずかに拡張したものが含まれる。 === 命名規則 === LAPACKとBLASのサブルーチンの名称は機能の判別が平易である範囲で短くなるような規則で命名されている。 これは初期のFORTRANにおける関数の名称に関する[[FORTRAN#.E5.88.9D.E6.9C.9F_.28FORTRAN_66.29|仕様上の制限]]を受けたものである。 サブルーチンは<code>pmmaaa</code>の規則で命名される。 以下、LAPACKの<code>DGESV</code>(倍精度一般行列の方程式系の求解)とBLASの<code>DGEMM</code>(倍精度行列の積の計算)を例に挙げる。 * <code>p</code>は通常は一文字の英字で数値データの型を表現するために利用される<ref group="注釈">ただし、LAPACK95のサブルーチンはデータの型を自動判別するため<code>LA_GESV</code>といった名称を持つ。詳細は[http://www.netlib.org/lapack95/DOC/la_gesv.txt]を参照。</ref>。<code>S</code>と<code>D</code>はそれぞれ単精度と倍精度の実数を意味し、<code>C</code>と<code>Z</code>はそれぞれ単精度と倍精度の複素数を意味する。なお、一文字目を別の文字に置き換えてサブルーチンの名称を記述することがある<ref group="注釈">例えば、インテルの[http://software.intel.com/sites/products/documentation/hpc/mkl/mklman/index.htm Math Kernel Libraryのリファレンスマニュアル]では<code>DGESV</code>を<code>?GESV</code>と表記している。</ref>。ただし、サブルーチンが採用するアルゴリズムによっては例外が存在することに注意が必要である<ref group="注釈">LAPACK 3.1.1の<code>DSGESV</code>は行列の分解を単精度で実行して得た解を反復改良することで倍精度の解を得るために<code>DS</code>で始まる名称を持つ。詳細は[http://www.netlib.org/lapack/lapack-3.1.1/html/dsgesv.f.html]を参照。</ref>。 * <code>mm</code>は二文字の英字でサブルーチンが採用するアルゴリズムが想定する行列の型を意味する。行列の型を現す略号は以下に表で示す。サブルーチンが想定する行列データの格納方法は型ごとに異なる。例えば、[[対角行列]]を意味する<code>DI</code>が与えられた場合は対角要素が格納された長さ{{math|''n''}}の配列を、一般行列を意味する<code>GE</code>が与えられた場合は行列の要素が格納された{{math|''n''×''n''}}の配列という具合いである。 * <code>aaa</code>は一文字から三文字の英数字でサブルーチンの処理内容を表現する。例えば<code>SV</code>は線型方程式系の求解を意味し、<code>MM</code>は行列の積を意味する。 {|class="wikitable" |+LAPACKの命名規則における行列の型 |- !略号 !説明 |- |BD |{{仮リンク|二重対角行列|en|Bidiagonal matrix}} |- |DI |[[対角行列]] |- |GB |{{仮リンク|帯行列|en|Band matrix}} |- |GE |一般行列 |- |GG |一般行列、一般化された問題(一般行列の対) |- |GT |一般[[三重対角行列]] |- |HB |[[エルミート行列|エルミート]]{{仮リンク|帯行列|en|Band matrix}} |- |HE |[[エルミート行列]] |- |HG |上{{仮リンク|ヘッセンベルグ行列|en|Hessenberg matrix}}、一般化された問題(ヘッセンベルグ行列と[[三角行列]]) |- |HP |[[エルミート行列]]、{{仮リンク|圧縮格納形式行列|en|Packed storage matrix}} |- |HS |上{{仮リンク|ヘッセンベルグ行列|en|Hessenberg matrix}} |- |OP |[[直交行列]]、{{仮リンク|圧縮格納形式行列|en|Packed storage matrix}} |- |OR |[[直交行列]] |- |PB |[[対称行列#対称行列に関連する行列の各種分解|正値対称]]{{仮リンク|帯行列|en|Band matrix}} または [[エルミート行列#正値エルミート行列|正値エルミート]]{{仮リンク|帯行列|en|Band matrix}} |- |PO |[[対称行列#対称行列に関連する行列の各種分解|正値対称行列]] または [[エルミート行列#正値エルミート行列|正値エルミート行列]] |- |PP |[[対称行列#対称行列に関連する行列の各種分解|正値対称行列]] または [[エルミート行列#正値エルミート行列|正値エルミート行列]]、{{仮リンク|圧縮格納形式行列|en|Packed storage matrix}} |- |PT |[[対称行列#対称行列に関連する行列の各種分解|正値対称]][[三重対角行列]] または [[エルミート行列#正値エルミート行列|正値エルミート]][[三重対角行列]] |- |SB |[[対称行列|対称]]{{仮リンク|帯行列|en|Band matrix}} |- |SP |[[対称行列]]、{{仮リンク|圧縮格納形式行列|en|Packed storage matrix}} |- |ST |[[対称行列|対称]][[三重対角行列]] |- |SY |[[対称行列]] |- |TB |[[三重対角行列]]{{仮リンク|帯行列|en|Band matrix}} |- |TG |[[三角行列]]、一般化された問題(三角行列の対) |- |TP |[[三角行列]]、{{仮リンク|圧縮格納形式行列|en|Packed storage matrix}} |- |TR |[[三角行列]](または準三角行列) |- |TZ |{{仮リンク|台形行列|en|Trapezoidal matrix}} |- |UN |[[ユニタリ行列]] |- |UP |[[ユニタリ行列]]、{{仮リンク|圧縮格納形式行列|en|Packed storage matrix}} |} 命名規則の詳細はLAPACK Users' Guideの当該項目<ref>LAPACK Users' Guide, [http://www.netlib.org/lapack/lug/node24.html Naming scheme]</ref>を参照。 == 実装 == LAPACKにはサブルーチンの機能とインターフェースに互換性のある実装が多く存在する。それぞれの動作環境についてはリンク先を参照。 === 特定のデバイスに限定していない汎用の実装 === ; [https://github.com/Reference-LAPACK/lapack Reference LAPACK] :[[netlib]] による公式[[リファレンス実装]]。 ; [[OpenBLAS]] :[[オープンソース]]実装。x86, x86-64, MIPS32, MIPS64, ARM, ARM64, POWER, IBM zEnterprise, RISC-V 上の Linux, Microsoft Windows, macOS, FreeBSD, OpenBSD, NetBSD, DragonFly BSD, Android, iOS, AIX, Haiku, Solaris で動作。 === ハードウェアベンダーによる、特定のデバイス向けの実装 === <!-- ベンダ名でアルファベット順 --> ; [https://developer.apple.com/documentation/accelerate Accelerateフレームワーク] : [[Apple]] のデバイス用 ; [https://www.amd.com/en/developer/aocl.html AOCL-LAPACK (AMD Optimizing CPU Libraries)] : [[アドバンスト・マイクロ・デバイセズ|AMD]] CPU 用 ; [https://developer.arm.com/Tools%20and%20Software/Arm%20Performance%20Libraries Arm Performance Libraries] : ARM64用 ; [https://docs.nvidia.com/cuda/cusolver/ cuSOLVER] : NVIDIA GPU 用のサブセット実装。 ; [https://www.ibm.com/docs/en/essl ESSL (Engineering and Scientific Subroutine Library)] : [[IBM]]による実装。[[POWER (マイクロプロセッサ)|POWER]]上の[[AIX]]および[[Linux]]で動作。 ; [[Intel Math Kernel Library|Intel oneAPI Math Kernel Library]] : [[インテル]]の CPU, GPU 用 ; [https://www.mathkeisan.com/ MathKeisan] : [[日本電気]]による実装。[[NEC SX]]上の[[SUPER-UX]]をサポート。 ; [https://www.oracle.com/application-development/technologies/developerstudio.html Oracle Developer Studio Performance Library] : [[オラクル (企業)|オラクル]]による実装。[[SPARC]] と [[x64|x86-64]] 上の Oracle Solaris と Linux で動作する BLAS および LAPACK 実装。旧称Sun Performance Library。 ; [https://rocm.docs.amd.com/projects/rocSOLVER/en/latest/ rocSOLVER] : AMD GPU 用のサブセット実装。 === かつて開発されていたライブラリ === ; HP MLIB : [[ヒューレット・パッカード]]による実装。 ; SCSL (Scientific Computing Software Library) : [[シリコングラフィックス|SGI]]による実装。 == LAPACKと言語バインディング == LAPACKはFortran 90以外のプログラミング言語から利用することが可能であり、これを目的とした[[束縛_(情報工学)|言語バインディング]]のためのライブラリも開発されている。LAPACK 3.4.0よりC言語インターフェースであるLAPACKEが統合された。 以下に例を示す。 * [http://www.netlib.org/lapack95/ LAPACK95]: Fortran 95用。インターフェースが簡略化される。 * [http://www.netlib.org/clapack/ CLAPACK]: [[C言語]]用。Fortran版を{{仮リンク|f2c|en|f2c}}によって変換したもの。 * [http://www.netlib.org/lapack/#_standard_c_language_apis_for_lapack LAPACKE]: [[C言語]]用。インテルの[[Math Kernel Library]]互換のC言語インターフェース。 * [http://math.nist.gov/lapack++/ LAPACK++]: [[C++]]用。 * [https://arma.sourceforge.net/ Armadillo]: [[C++]]用。 * [https://cpplapack.sourceforge.net/doc/main_page/Japanese.html CPPLAPACK]: [[C++]]用。 * [http://mathema.tician.de/software/boost-bindings Boost Numeric Bindings]: [[C++]]用。 * [http://www.scipy.org/Installing_SciPy/BuildingGeneral SciPy]: [[Python]]用。 * [http://www.netlib.org/java/f2j/ jlapack]: [[Java]]用。 * [http://www.dotnumerics.com/NumericalLibraries/LinearAlgebra/CSLapack/ CSLapack]: [[C#]]用。 * [http://rubyforge.org/projects/linalg/ Linalg]: [[Ruby]]用。 * [http://www.ocaml.info/home/ocaml_sources.html#lacaml LACAML]: [[OCaml]]用。 * [http://hackage.haskell.org/package/hmatrix hmatrix]: [[Haskell]]用。 * Accelerateフレームワーク: [[Objective-C]]用インターフェースが提供される。 *Gonum: LAPACK and BLAS in Native Go === C言語 === 多くの処理系ではライブラリのC言語バインディングが可能であるため、いくらかの制約があるにせよLAPACKのサブルーチンをC言語の関数のように利用できる。ただし、Fortranコンパイラが存在しない処理系ではCLAPACKも有効な選択肢となる。なお、{{仮リンク|Automatically Tuned Linear Algebra Software|en|Automatically Tuned Linear Algebra Software}}が提供するC言語インターフェース<ref>[https://math-atlas.sourceforge.net/psdoc/lapackqref.ps ATLAS ANSI/ISO C LAPACK API REFERENCE]を参照。</ref>も存在するが、これはf2cのCLAPACKとは互換性が無い。 C言語では慣用のrow-major orderingな行列を計算させる場合、LAPACKEでは指定オプションが用意されている。その場合、内部で[[転置行列|行列転置]]が行われオーバヘッドが発生する。例えば行列積は、内部の計算は下記のように行われる。ここで「<math>\cdot </math>」はBLAS/LAPACK本来のcolumn-major orderingな行列積を意味している。 : <math> C = \left( A^\textrm{T} \cdot B^\textrm{T} \right)^\textrm{T} </math> == 脚注 == {{脚注ヘルプ}} === 注釈 === {{Reflist|group="注釈"}} === 出典 === {{Reflist}} == 関連文献 == <!-- 実際には参考にしていないが、さらにこの項目を理解するのに役立つ関連した文献(書籍、論文、資料、ウェブページなど)一覧(実際に参考にしているのではないので過多にならないように、多すぎたら除去。宣伝はご遠慮下さい、宣伝は除去。実際に参考にした文献は脚注を導入し「参考文献」節へ追加して下さい。) --> * E. Anderson, Z. Bai, C. Bischof, S. Blackford, J. Demmel, J. Dongarra, J. Du Croz, A. Greenbaum, S. Hammarling, A. McKenney, D. Sorensen:”LAPACK Users' Guide (Software, Environments and Tools)”、SIAM、ISBN 978-0898714470(1987年1月1日)。 * 村田健郎、J.J.ドンガラ、小国力、三好 俊郎、長谷川 秀彦:「行列計算ソフトウェア―WS、スーパーコン、並列計算機」、丸善、ISBN 978-4621036549(1991年12月)。 * 小国力:「LAPACK利用の手引―行列計算パッケージ」、丸善、ISBN 978-4621040768(1995年7月)。 * 幸谷智紀:「LAPACK/BLAS入門」、森北出版、ISBN 978-4627848818(2016年12月16日)。 == 関連項目 == <!-- 本文記事を理解する上での補足として役立つ、関連性のある項目へのウィキ間リンク、ウィキリンク。可能なら本文内に埋め込んで下さい。 --> {{Portal|FLOSS}} * [[BLAS]] * [[数値解析ソフトウェア]] == 外部リンク == * [http://www.netlib.org/lapack/lug/ LAPACK Users' Guide] 公式サイトのマニュアル * [http://www.netlib.org/lapack/lawns/ LAWNs (LAPACK Working Notes)] LAPACKの実装に関する文献集 * [http://www.nag-j.co.jp/lapack/ LAPACKサンプルプログラム集] [[Numerical Algorithms Group|NAG]]によるサンプルプログラム集 * [http://icl.cs.utk.edu/plasma/ PLASMA] Parallel Linear Algebra for Scalable Multi-core Architectures、BLAS上に構築された[[マルチコア#ホモジニアスとヘテロジニアス|ホモジニアスマルチコア]]向けの線型計算ライブラリ * [http://www.culatools.com/ CULA] [[NVIDIA]]の[[CUDA]]対応[[Graphics_Processing_Unit|GPU]]上で動作する線型計算ライブラリ * [http://icl.cs.utk.edu/magma/ MAGMA] Matrix Algebra on GPU and Multicore Architectures、LAPACKのサブセットで[[マルチコア]][[CPU]]と[[Graphics_Processing_Unit|GPU]]のハイブリッドアーキテクチャ向け * [https://mplapack.sourceforge.net/ The MPACK; Multiple precision arithmetic BLAS and LAPACK] 多倍長精度版のBLAS/LAPACK * 「BLAS,LAPACK チュートリアル」 MPACKの開発者によるチュートリアル ** [http://www.jsces.org/Issue/Journal/pdf/nakata-0411.pdf パート1 (簡単な使い方とプログラミング)] ** [http://www.jsces.org/Issue/Journal/pdf/nakata-0711.pdf パート2 (GPU編)] {{linear algebra}} [[Category:数値解析ソフトウェア]] [[Category:数値線形代数]] [[Category:スーパーコンピュータ]] [[Category:数学に関する記事|LAPACK]] [[Category:1992年のソフトウェア]] [[Category:FORTRAN]]
このページで使用されているテンプレート:
テンプレート:Infobox Software
(
ソースを閲覧
)
テンプレート:Linear algebra
(
ソースを閲覧
)
テンプレート:Math
(
ソースを閲覧
)
テンプレート:Portal
(
ソースを閲覧
)
テンプレート:Reflist
(
ソースを閲覧
)
テンプレート:Start date
(
ソースを閲覧
)
テンプレート:仮リンク
(
ソースを閲覧
)
テンプレート:脚注ヘルプ
(
ソースを閲覧
)
LAPACK
に戻る。
ナビゲーション メニュー
個人用ツール
ログイン
名前空間
ページ
議論
日本語
表示
閲覧
ソースを閲覧
履歴表示
その他
検索
案内
メインページ
最近の更新
おまかせ表示
MediaWiki についてのヘルプ
特別ページ
ツール
リンク元
関連ページの更新状況
ページ情報