高精度線形代数演算ライブラリmpack 0.8.0の紹介
DESCRIPTION
高精度線形代数演算ライブラリMPACK 0.8.0の紹介TRANSCRIPT
.
...... 高精度線形代数演算ライブラリMPACK 0.8.0の紹介
中田真秀理化学研究所情報基盤センター
日本数式処理学会東北地区合同分科会@仙台青葉カルチャーセンター 602号室, 2013/1/27 10:40
中田真秀 高精度線形代数演算ライブラリ MPACK 0.8.0 の紹介
高精度線形代数演算ライブラリMPACK�� ��http://mplapack.sourceforge.net/中田真秀@理化学研究所
MPACK:高精度線形代数演算ライブラリ:BLAS,LAPACKをベース線形代数演算のビルディングブロック、参照実装、プログラムインターフェース (API)提供Version 0.8.0 (2012/12/25);ステータス: MBLAS完成, MLAPACK100ルーチン完成NVIDIA GPU C2050での DD精度の行列積の加速綿密なテスト: BLAS、LAPACKにあらゆる値を代入して行われるLinux/FreeBSD/Mac/Win/Intel Xeon Phi/NVIDIA C2050をサポート5つの高精度計算の型をサポート: GMP, MPFR,本物の 4倍精度(binary128), DD, QD,倍精度C++で書きなおした: プログラミングを容易にする。オープンソース: 2-条項 BSDライセンス、再配布、変更など ok!
中田真秀 高精度線形代数演算ライブラリ MPACK 0.8.0 の紹介
中田のやりたいこと:コンピュータ上での線形代数演算おける精度問題を解決したい。
人類は、線形代数を有志以来やってきた。エジプトが最古(パピルス)、中国もガウスの消去法は 1000年以上前に知っていた (九章算術)。コンピュータが生まれ、線形代数演算をコンピュータ上で高速に、大量にやらせることが重要になった。これまで主にスピードおよび規模を追求してきた。これがコンピュータの歴史。いままで無視してきたこと:線形代数的には精度も重要だということ。中田はコンピュータ上での線形代数演算おける精度問題を解決したい。
中田真秀 高精度線形代数演算ライブラリ MPACK 0.8.0 の紹介
中田のやりたいこと:コンピュータ上での線形代数演算おける精度問題を解決したい。
人類は、線形代数を有志以来やってきた。エジプトが最古(パピルス)、中国もガウスの消去法は 1000年以上前に知っていた (九章算術)。コンピュータが生まれ、線形代数演算をコンピュータ上で高速に、大量にやらせることが重要になった。これまで主にスピードおよび規模を追求してきた。これがコンピュータの歴史。いままで無視してきたこと:線形代数的には精度も重要だということ。中田はコンピュータ上での線形代数演算おける精度問題を解決したい。
中田真秀 高精度線形代数演算ライブラリ MPACK 0.8.0 の紹介
中田のやりたいこと:コンピュータ上での線形代数演算おける精度問題を解決したい。
人類は、線形代数を有志以来やってきた。エジプトが最古(パピルス)、中国もガウスの消去法は 1000年以上前に知っていた (九章算術)。コンピュータが生まれ、線形代数演算をコンピュータ上で高速に、大量にやらせることが重要になった。これまで主にスピードおよび規模を追求してきた。これがコンピュータの歴史。いままで無視してきたこと:線形代数的には精度も重要だということ。中田はコンピュータ上での線形代数演算おける精度問題を解決したい。
中田真秀 高精度線形代数演算ライブラリ MPACK 0.8.0 の紹介
中田のやりたいこと:コンピュータ上での線形代数演算おける精度問題を解決したい。
人類は、線形代数を有志以来やってきた。エジプトが最古(パピルス)、中国もガウスの消去法は 1000年以上前に知っていた (九章算術)。コンピュータが生まれ、線形代数演算をコンピュータ上で高速に、大量にやらせることが重要になった。これまで主にスピードおよび規模を追求してきた。これがコンピュータの歴史。いままで無視してきたこと:線形代数的には精度も重要だということ。中田はコンピュータ上での線形代数演算おける精度問題を解決したい。
中田真秀 高精度線形代数演算ライブラリ MPACK 0.8.0 の紹介
中田のやりたいこと:コンピュータ上での線形代数演算おける精度問題を解決したい。
人類は、線形代数を有志以来やってきた。エジプトが最古(パピルス)、中国もガウスの消去法は 1000年以上前に知っていた (九章算術)。コンピュータが生まれ、線形代数演算をコンピュータ上で高速に、大量にやらせることが重要になった。これまで主にスピードおよび規模を追求してきた。これがコンピュータの歴史。いままで無視してきたこと:線形代数的には精度も重要だということ。中田はコンピュータ上での線形代数演算おける精度問題を解決したい。
中田真秀 高精度線形代数演算ライブラリ MPACK 0.8.0 の紹介
中田のやりたいこと:コンピュータ上での線形代数演算おける精度問題を解決したい。
人類は、線形代数を有志以来やってきた。エジプトが最古(パピルス)、中国もガウスの消去法は 1000年以上前に知っていた (九章算術)。コンピュータが生まれ、線形代数演算をコンピュータ上で高速に、大量にやらせることが重要になった。これまで主にスピードおよび規模を追求してきた。これがコンピュータの歴史。いままで無視してきたこと:線形代数的には精度も重要だということ。中田はコンピュータ上での線形代数演算おける精度問題を解決したい。
中田真秀 高精度線形代数演算ライブラリ MPACK 0.8.0 の紹介
どうやってここにきたか
量子化学の研究をしていた (今もしてます w)
量子化学の問題が半正定値計画法の問題に帰着することを示した [Nakata et al 2001](引用回数 100回以上!)
SDPA, SDPARAをもってしても 7桁くらいしか最適値が出ない。(これは仕方ない)
SDPA-GMPの作成を開始 [Nakata et al 2008](2006年くらいから)
SDPA-GMPで、BLAS, LAPACKのルーチンから 50程度の多倍長精度版の関数を作った。Google検索すると高精度 BLAS, LAPACKをほしがっている人がいた。量子化学で食うのは大変...�� ��(就職活動兼ねて)作ってみようか
中田真秀 高精度線形代数演算ライブラリ MPACK 0.8.0 の紹介
どうやってここにきたか
量子化学の研究をしていた (今もしてます w)
量子化学の問題が半正定値計画法の問題に帰着することを示した [Nakata et al 2001](引用回数 100回以上!)
SDPA, SDPARAをもってしても 7桁くらいしか最適値が出ない。(これは仕方ない)
SDPA-GMPの作成を開始 [Nakata et al 2008](2006年くらいから)
SDPA-GMPで、BLAS, LAPACKのルーチンから 50程度の多倍長精度版の関数を作った。Google検索すると高精度 BLAS, LAPACKをほしがっている人がいた。量子化学で食うのは大変...�� ��(就職活動兼ねて)作ってみようか
中田真秀 高精度線形代数演算ライブラリ MPACK 0.8.0 の紹介
どうやってここにきたか
量子化学の研究をしていた (今もしてます w)
量子化学の問題が半正定値計画法の問題に帰着することを示した [Nakata et al 2001](引用回数 100回以上!)
SDPA, SDPARAをもってしても 7桁くらいしか最適値が出ない。(これは仕方ない)
SDPA-GMPの作成を開始 [Nakata et al 2008](2006年くらいから)
SDPA-GMPで、BLAS, LAPACKのルーチンから 50程度の多倍長精度版の関数を作った。Google検索すると高精度 BLAS, LAPACKをほしがっている人がいた。量子化学で食うのは大変...�� ��(就職活動兼ねて)作ってみようか
中田真秀 高精度線形代数演算ライブラリ MPACK 0.8.0 の紹介
どうやってここにきたか
量子化学の研究をしていた (今もしてます w)
量子化学の問題が半正定値計画法の問題に帰着することを示した [Nakata et al 2001](引用回数 100回以上!)
SDPA, SDPARAをもってしても 7桁くらいしか最適値が出ない。(これは仕方ない)
SDPA-GMPの作成を開始 [Nakata et al 2008](2006年くらいから)
SDPA-GMPで、BLAS, LAPACKのルーチンから 50程度の多倍長精度版の関数を作った。Google検索すると高精度 BLAS, LAPACKをほしがっている人がいた。量子化学で食うのは大変...�� ��(就職活動兼ねて)作ってみようか
中田真秀 高精度線形代数演算ライブラリ MPACK 0.8.0 の紹介
どうやってここにきたか
量子化学の研究をしていた (今もしてます w)
量子化学の問題が半正定値計画法の問題に帰着することを示した [Nakata et al 2001](引用回数 100回以上!)
SDPA, SDPARAをもってしても 7桁くらいしか最適値が出ない。(これは仕方ない)
SDPA-GMPの作成を開始 [Nakata et al 2008](2006年くらいから)
SDPA-GMPで、BLAS, LAPACKのルーチンから 50程度の多倍長精度版の関数を作った。Google検索すると高精度 BLAS, LAPACKをほしがっている人がいた。量子化学で食うのは大変...�� ��(就職活動兼ねて)作ってみようか
中田真秀 高精度線形代数演算ライブラリ MPACK 0.8.0 の紹介
どうやってここにきたか
量子化学の研究をしていた (今もしてます w)
量子化学の問題が半正定値計画法の問題に帰着することを示した [Nakata et al 2001](引用回数 100回以上!)
SDPA, SDPARAをもってしても 7桁くらいしか最適値が出ない。(これは仕方ない)
SDPA-GMPの作成を開始 [Nakata et al 2008](2006年くらいから)
SDPA-GMPで、BLAS, LAPACKのルーチンから 50程度の多倍長精度版の関数を作った。Google検索すると高精度 BLAS, LAPACKをほしがっている人がいた。量子化学で食うのは大変...�� ��(就職活動兼ねて)作ってみようか
中田真秀 高精度線形代数演算ライブラリ MPACK 0.8.0 の紹介
どうやってここにきたか
量子化学の研究をしていた (今もしてます w)
量子化学の問題が半正定値計画法の問題に帰着することを示した [Nakata et al 2001](引用回数 100回以上!)
SDPA, SDPARAをもってしても 7桁くらいしか最適値が出ない。(これは仕方ない)
SDPA-GMPの作成を開始 [Nakata et al 2008](2006年くらいから)
SDPA-GMPで、BLAS, LAPACKのルーチンから 50程度の多倍長精度版の関数を作った。Google検索すると高精度 BLAS, LAPACKをほしがっている人がいた。量子化学で食うのは大変...�� ��(就職活動兼ねて)作ってみようか
中田真秀 高精度線形代数演算ライブラリ MPACK 0.8.0 の紹介
どうやってここにきたか
量子化学の研究をしていた (今もしてます w)
量子化学の問題が半正定値計画法の問題に帰着することを示した [Nakata et al 2001](引用回数 100回以上!)
SDPA, SDPARAをもってしても 7桁くらいしか最適値が出ない。(これは仕方ない)
SDPA-GMPの作成を開始 [Nakata et al 2008](2006年くらいから)
SDPA-GMPで、BLAS, LAPACKのルーチンから 50程度の多倍長精度版の関数を作った。Google検索すると高精度 BLAS, LAPACKをほしがっている人がいた。量子化学で食うのは大変...�� ��(就職活動兼ねて)作ってみようか
中田真秀 高精度線形代数演算ライブラリ MPACK 0.8.0 の紹介
あらまし
はじめに:どうして我々は精度がほしいのか?
浮動小数点数と多倍長精度ライブラリについて。MPACK, BLAS, LAPACK:線形代数演算ライブラリサマリ
中田真秀 高精度線形代数演算ライブラリ MPACK 0.8.0 の紹介
はじめに:どうして我々は精度がほしいのか?
中田真秀 高精度線形代数演算ライブラリ MPACK 0.8.0 の紹介
ペタ、エクサスケールの計算機ではより高い精度が必要となる
エクサスケールのコンピュータは 1023 回の浮動小数点演算!を一週間で行う。
コンピュータを使った科学は精度が不足することになるだろうと考えられる。
中田真秀 高精度線形代数演算ライブラリ MPACK 0.8.0 の紹介
ペタ、エクサスケールの計算機ではより高い精度が必要となる
エクサスケールのコンピュータは 1023 回の浮動小数点演算!を一週間で行う。
コンピュータを使った科学は精度が不足することになるだろうと考えられる。
中田真秀 高精度線形代数演算ライブラリ MPACK 0.8.0 の紹介
ペタ、エクサスケールの計算機ではより高い精度が必要となる
エクサスケールのコンピュータは 1023 回の浮動小数点演算!を一週間で行う。
コンピュータを使った科学は精度が不足することになるだろうと考えられる。
中田真秀 高精度線形代数演算ライブラリ MPACK 0.8.0 の紹介
はじめに:どうして我々は精度がほしいのか?
反復法を倍精度で行うと、しばしば収束しないことがある[Hasegawa 2007]。
中田真秀 高精度線形代数演算ライブラリ MPACK 0.8.0 の紹介
はじめに:どうして我々は精度がほしいのか?
反復法を倍精度で行うと、しばしば収束しないことがある[Hasegawa 2007]。
中田真秀 高精度線形代数演算ライブラリ MPACK 0.8.0 の紹介
ペタ、エクサスケールの計算機ではより高い精度が必要となる
半正定値計画問題 (SDP):解くべき線形方程式の条件数が最適解付近で発散する。最適解に近づくほど、数値的に問題が難しくなる。[Nakata et al 2008], [Nakata 2009], [Waki-Nakata-Muramatsu]
1e-10
1e-05
1
100000
1e+10
1e+15
1e+20
0 10 20 30 40 50 60 70 80 90
# of iter.
The 1-norm and the estimated 1-norm condition number of shur complement matrix
1-cond1-norm
中田真秀 高精度線形代数演算ライブラリ MPACK 0.8.0 の紹介
ペタ、エクサスケールの計算機ではより高い精度が必要となる
半正定値計画問題 (SDP):解くべき線形方程式の条件数が最適解付近で発散する。最適解に近づくほど、数値的に問題が難しくなる。[Nakata et al 2008], [Nakata 2009], [Waki-Nakata-Muramatsu]
1e-10
1e-05
1
100000
1e+10
1e+15
1e+20
0 10 20 30 40 50 60 70 80 90
# of iter.
The 1-norm and the estimated 1-norm condition number of shur complement matrix
1-cond1-norm
中田真秀 高精度線形代数演算ライブラリ MPACK 0.8.0 の紹介
ペタ、エクサスケールの計算機ではより高い精度が必要となる
半正定値計画問題 (SDP):解くべき線形方程式の条件数が最適解付近で発散する。最適解に近づくほど、数値的に問題が難しくなる。[Nakata et al 2008], [Nakata 2009], [Waki-Nakata-Muramatsu]
1e-10
1e-05
1
100000
1e+10
1e+15
1e+20
0 10 20 30 40 50 60 70 80 90
# of iter.
The 1-norm and the estimated 1-norm condition number of shur complement matrix
1-cond1-norm
中田真秀 高精度線形代数演算ライブラリ MPACK 0.8.0 の紹介
ペタ、エクサスケールの計算機ではより高い精度が必要となる
半正定値計画問題 (SDP):解くべき線形方程式の条件数が最適解付近で発散する。最適解に近づくほど、数値的に問題が難しくなる。[Nakata et al 2008], [Nakata 2009], [Waki-Nakata-Muramatsu]
1e-10
1e-05
1
100000
1e+10
1e+15
1e+20
0 10 20 30 40 50 60 70 80 90
# of iter.
The 1-norm and the estimated 1-norm condition number of shur complement matrix
1-cond1-norm
中田真秀 高精度線形代数演算ライブラリ MPACK 0.8.0 の紹介
ペタ、エクサスケールの計算機ではより高い精度が必要となる
今後高精度計算はやりやすくなる。演算器 (CPU, GPU,アクセラレータ)などはどんどん高速になるが、メモリバンド幅はあがらないため、演算力は余るのでそれは高精度演算に使える。其れ以前に Intel Xeonなどはとても高速で、演算能力があり過ぎ。10年から 20年前のプログラムは、力技で工夫なくそのまま高精度化しても、十分高速。
中田真秀 高精度線形代数演算ライブラリ MPACK 0.8.0 の紹介
ペタ、エクサスケールの計算機ではより高い精度が必要となる
今後高精度計算はやりやすくなる。演算器 (CPU, GPU,アクセラレータ)などはどんどん高速になるが、メモリバンド幅はあがらないため、演算力は余るのでそれは高精度演算に使える。其れ以前に Intel Xeonなどはとても高速で、演算能力があり過ぎ。10年から 20年前のプログラムは、力技で工夫なくそのまま高精度化しても、十分高速。
中田真秀 高精度線形代数演算ライブラリ MPACK 0.8.0 の紹介
ペタ、エクサスケールの計算機ではより高い精度が必要となる
今後高精度計算はやりやすくなる。演算器 (CPU, GPU,アクセラレータ)などはどんどん高速になるが、メモリバンド幅はあがらないため、演算力は余るのでそれは高精度演算に使える。其れ以前に Intel Xeonなどはとても高速で、演算能力があり過ぎ。10年から 20年前のプログラムは、力技で工夫なくそのまま高精度化しても、十分高速。
中田真秀 高精度線形代数演算ライブラリ MPACK 0.8.0 の紹介
浮動小数点数と多倍長精度ライブラリについて
中田真秀 高精度線形代数演算ライブラリ MPACK 0.8.0 の紹介
倍精度: 最もよく使われている浮動小数点数
“754-2008 IEEE Standard for Floating-Point Arithmetic”
binary64 (倍精度)フォーマットは 10進 16桁の有効桁がある
多くのプラットフォームで使われていて、高速。Core i7 920:∼40GFLOPS; RADEON HD7970 ∼1000GFLOPS,京コンピュータ ∼ 10PFLOPS)�� ��問題点:演算に丸め誤差が入ることがある
中田真秀 高精度線形代数演算ライブラリ MPACK 0.8.0 の紹介
丸め誤差対策に、多倍長精度計算を使う
�� ��多倍長精度を使う: あんまり考えず、力づくで処理
浮動小数点数: コンピュータ上での実数の近似表現の一つ
a + (b + c) , (a + b) + c
浮動小数点数、演算の種類によっては計算結果に誤差が入る。倍精度は 10進 16桁の精度しか持たない。
1 + 0.0000000000000001 = 1
解決方法の一つ: 多倍長精度計算
中田真秀 高精度線形代数演算ライブラリ MPACK 0.8.0 の紹介
丸め誤差対策に、多倍長精度計算を使う
�� ��多倍長精度を使う: あんまり考えず、力づくで処理
浮動小数点数: コンピュータ上での実数の近似表現の一つ
a + (b + c) , (a + b) + c
浮動小数点数、演算の種類によっては計算結果に誤差が入る。倍精度は 10進 16桁の精度しか持たない。
1 + 0.0000000000000001 = 1
解決方法の一つ: 多倍長精度計算
中田真秀 高精度線形代数演算ライブラリ MPACK 0.8.0 の紹介
丸め誤差対策に、多倍長精度計算を使う
�� ��多倍長精度を使う: あんまり考えず、力づくで処理
浮動小数点数: コンピュータ上での実数の近似表現の一つ
a + (b + c) , (a + b) + c
浮動小数点数、演算の種類によっては計算結果に誤差が入る。倍精度は 10進 16桁の精度しか持たない。
1 + 0.0000000000000001 = 1
解決方法の一つ: 多倍長精度計算
中田真秀 高精度線形代数演算ライブラリ MPACK 0.8.0 の紹介
丸め誤差対策に、多倍長精度計算を使う
�� ��多倍長精度を使う: あんまり考えず、力づくで処理
浮動小数点数: コンピュータ上での実数の近似表現の一つ
a + (b + c) , (a + b) + c
浮動小数点数、演算の種類によっては計算結果に誤差が入る。倍精度は 10進 16桁の精度しか持たない。
1 + 0.0000000000000001 = 1
解決方法の一つ: 多倍長精度計算
中田真秀 高精度線形代数演算ライブラリ MPACK 0.8.0 の紹介
丸め誤差対策に、多倍長精度計算を使う
�� ��多倍長精度を使う: あんまり考えず、力づくで処理
浮動小数点数: コンピュータ上での実数の近似表現の一つ
a + (b + c) , (a + b) + c
浮動小数点数、演算の種類によっては計算結果に誤差が入る。倍精度は 10進 16桁の精度しか持たない。
1 + 0.0000000000000001 = 1
解決方法の一つ: 多倍長精度計算
中田真秀 高精度線形代数演算ライブラリ MPACK 0.8.0 の紹介
多倍長精度、多倍長精度計算とは?
�� ��多倍長精度とは、浮動小数点数で仮数部を大きく取る精度
GMPというライブラリが有名。http://gmplib.org/
仮数部は任意に大きくとれる。
演算はソフトウェア的に実装してある。これは最も高速なライブラリだが、それでも演算はかなり遅い。
中田真秀 高精度線形代数演算ライブラリ MPACK 0.8.0 の紹介
多倍長精度、多倍長精度計算とは?
�� ��多倍長精度とは、浮動小数点数で仮数部を大きく取る精度
GMPというライブラリが有名。http://gmplib.org/
仮数部は任意に大きくとれる。
演算はソフトウェア的に実装してある。これは最も高速なライブラリだが、それでも演算はかなり遅い。
中田真秀 高精度線形代数演算ライブラリ MPACK 0.8.0 の紹介
他の多倍長精度演算ライブラリについて
他の多倍長精度演算ライブラリについて:QDライブラリ: double-double (quad-double)精度 : 10進 32(64)桁、非常に高速
binary128, IEEE 754 2008の四倍精度。
IEEE754スタイルの多倍長精度演算ライブラリ: MPFR (実数)および MPC (複素数)。�� ��一番厳密なのはMPFR+MPCの組み合わせ。これを正本として作成している
中田真秀 高精度線形代数演算ライブラリ MPACK 0.8.0 の紹介
他の多倍長精度演算ライブラリについて
他の多倍長精度演算ライブラリについて:QDライブラリ: double-double (quad-double)精度 : 10進 32(64)桁、非常に高速
binary128, IEEE 754 2008の四倍精度。
IEEE754スタイルの多倍長精度演算ライブラリ: MPFR (実数)および MPC (複素数)。�� ��一番厳密なのはMPFR+MPCの組み合わせ。これを正本として作成している
中田真秀 高精度線形代数演算ライブラリ MPACK 0.8.0 の紹介
他の多倍長精度演算ライブラリについて
他の多倍長精度演算ライブラリについて:QDライブラリ: double-double (quad-double)精度 : 10進 32(64)桁、非常に高速
binary128, IEEE 754 2008の四倍精度。
IEEE754スタイルの多倍長精度演算ライブラリ: MPFR (実数)および MPC (複素数)。�� ��一番厳密なのはMPFR+MPCの組み合わせ。これを正本として作成している
中田真秀 高精度線形代数演算ライブラリ MPACK 0.8.0 の紹介
多倍長精度演算ライブラリのまとめ
精度 丸め スピード 複素数 コメント GMP 任意 なし △ とりあえず よく使われるMPFR 任意 厳密 遅い 厳密 最も厳密
DD 32桁 ? 高速 とりあえず 倍精度演算で実現
QD 64桁 ? GMPの 2倍? とりあえず 指数部削られ過ぎdouble 16桁 ハード 超高速 コンパイラ依存 最も高速
binary128 32桁 ? 遅い コンパイラ依存 gcc/iccでサポート有
中田真秀 高精度線形代数演算ライブラリ MPACK 0.8.0 の紹介
BLAS, LAPACK, MPACKの紹介
中田真秀 高精度線形代数演算ライブラリ MPACK 0.8.0 の紹介
BLAS、LAPACKとは?
BLAS:さまざまなタイプのベクトル-ベクトル、行列-ベクトル、行列-行列演算の参照実装。高速な実装も入手できる。たとえば OpenBLAS(GotoBLAS2), Intel MKL, ATLASなど。LAPACK:連立一次方程式、固有値問題、最小二乗法をとく。デファクトスタンダードなライブラリ。多くのソフトウェアがこれを参照している。LAPACKの webページのヒット数: 110,343,542 (Mon Dec10 16:20:25 EST 2012)�� ��BLASと LAPACKは大変重要なライブラリ
中田真秀 高精度線形代数演算ライブラリ MPACK 0.8.0 の紹介
BLAS、LAPACKとは?
BLAS:さまざまなタイプのベクトル-ベクトル、行列-ベクトル、行列-行列演算の参照実装。高速な実装も入手できる。たとえば OpenBLAS(GotoBLAS2), Intel MKL, ATLASなど。LAPACK:連立一次方程式、固有値問題、最小二乗法をとく。デファクトスタンダードなライブラリ。多くのソフトウェアがこれを参照している。LAPACKの webページのヒット数: 110,343,542 (Mon Dec10 16:20:25 EST 2012)�� ��BLASと LAPACKは大変重要なライブラリ
中田真秀 高精度線形代数演算ライブラリ MPACK 0.8.0 の紹介
高精度線形代数演算ライブラリMPACK�� ��http://mplapack.sourceforge.net/中田真秀@理化学研究所
MPACK:高精度線形代数演算ライブラリ:BLAS,LAPACKをベース線形代数演算のビルディングブロック、参照実装、プログラムインターフェース (API)提供Version 0.8.0 (2012/12/25);ステータス: MBLAS完成, MLAPACK100ルーチン完成NVIDIA GPU C2050での DD精度の行列積の加速綿密なテスト: BLAS、LAPACKにあらゆる値を代入して行われるLinux/FreeBSD/Mac/Win/Intel Xeon Phi/NVIDIA C2050をサポート5つの高精度計算の型をサポート: GMP, MPFR,本物の 4倍精度(binary128), DD, QD,倍精度C++で書きなおした: プログラミングを容易にする。オープンソース: 2-条項 BSDライセンス、再配布、変更など ok!
中田真秀 高精度線形代数演算ライブラリ MPACK 0.8.0 の紹介
MPACK 0.8.0: できることとできないこと
Version 0.8.0 (2012/12/25);ステータス: MBLAS完成, MLAPACK100ルーチン完成Rgemm (行列-行列積) : OpenMPで加速Rgemmの倍々精度は NVIDIA C2050での GPU加速MLAPACK :対称、エルミート行列の固有値問題、LU分解、コレスキー分解、条件数推定、逆行列MLAPACK:一般固有値問題、特異値分解、最小に情報、QR分解など...
中田真秀 高精度線形代数演算ライブラリ MPACK 0.8.0 の紹介
MPACKの用途
数値的に不安定な問題を解く場合:反復法、半正定値法の最適解付近。計算機援用証明を行いたい場合。精度保証を行いたい場合: INTLABとコラボレーションできないか?
既存の C++のコードを労力少なく多倍長化したいとき。4倍精度程度の計算を高速に行いたい場合。精度を実行時に様々に変化させたい場合。数値的に不安なときのデバッグに使う。(カジュアルに、例えば)ある値が 0であることを確認したい場合。
中田真秀 高精度線形代数演算ライブラリ MPACK 0.8.0 の紹介
関数の名前の付け方:プログラムインターフェース (API)提供
Prefixの変化float, double→ “R”eal,complex, double complex→ “C”omplex.
daxpy, zaxpy→ Raxpy, Caxpy
dgemm, zgemm→ Rgemm, Cgemm
dsterf, dsyev→ Rsterf, Rsyev
dzabs1, dzasum→ RCabs1, RCasum
中田真秀 高精度線形代数演算ライブラリ MPACK 0.8.0 の紹介
MBLAS 0.8.0でサポートされている全 76ルーチン
LEVEL1 MBLASCrotg Cscal Rrotg Rrot Rrotm CRrot Cswap
Rswap CRscal Rscal Ccopy Rcopy Caxpy RaxpyRdot Cdotc Cdotu RCnrm2 Rnrm2 Rasum iCasum
iRamax RCabs1 Mlsame Mxerbla
LEVEL2 MBLASCgemv Rgemv Cgbmv Rgbmv Chemv Chbmv Chpmv RsymvRsbmv Ctrmv Cgemv Rgemv Cgbmv Rgemv Chemv ChbmvChpmv Rsymv Rsbmv Rspmv Ctrmv Rtrmv Ctbmv CtpmvRtpmv Ctrsv Rtrsv Ctbsv Rtbsv Ctpsv Rger CgeruCgerc Cher Chpr Cher2 Chpr2 Rsyr Rspr Rsyr2Rspr2
LEVEL3 MBLASCgemm Rgemm Csymm Rsymm Chemm Csyrk Rsyrk CherkCsyr2k Rsyr2k Cher2k Ctrmm Rtrmm Ctrsm Rtrsm
中田真秀 高精度線形代数演算ライブラリ MPACK 0.8.0 の紹介
MLAPACK 0.8.0でサポートされている全 100ルーチン
Mutils Rlamch Rlae2 Rlaev2 Claev2 Rlassq ClassqRlanst Clanht Rlansy Clansy Clanhe Rlapy2 RlarfgRlapy3 Rladiv Cladiv Clarfg Rlartg Clartg RlasetClaset Rlasr Clasr Rpotf2 Clacgv Cpotf2 RlasclClascl Rlasrt Rsytd2 Chetd2 Rsteqr Csteqr RsterfRlarf Clarf Rorg2l Cung2l Rorg2r Cung2r RlarftClarft Rlarfb Clarfb Rorgqr Cungqr Rorgql CungqlRlatrd Clatrd Rsytrd Chetrd Rorgtr Cungtr RsyevCheev Rpotrf Cpotrf Clacrm Rtrti2 Ctrti2 RtrtriCtrtri Rgetf2 Cgetf2 Rlaswp Claswp Rgetrf CgetrfRgetri Cgetri Rgetrs Cgetrs Rgesv Cgesv RtrtrsCtrtrs Rlasyf Clasyf Clahef Clacrt Claesy Crot
Cspmv Cspr Csymv Csyr iCmax1 RCsum1 RpotrsRposv Rgeequ Rlatrs Rlange Rgecon Rlauu2 RlauumRpotri Rpocon
中田真秀 高精度線形代数演算ライブラリ MPACK 0.8.0 の紹介
BLAS, LAPACKとの相違点:プログラムインターフェース (API)提供
呼び出し方が若干違う。call by valueが、時々call by referenceになっている。MBLAS/MLAPACK:
Rgemm("n", "n", n, n, n, alpha, A, n, B, n, beta, C, n);
Rgetrf(n, n, A, n, ipiv, &info);
Rgetri(n, A, n, ipiv, work, lwork, &info);
Rsyev("V", "U", n, A, n, w, work, &lwork, &info);
BLAS/LAPACK:
dgemm_f77("N", "N", &n, &n, &n, &One, A, &n, A, &n, &Zero, C, &n);
dgetri_f77(&n, A, &n, ipiv, work, &lwork, &info);
中田真秀 高精度線形代数演算ライブラリ MPACK 0.8.0 の紹介
プログラミング詳細
型は INTEGER, REAL, COMPLEX, LOGICALを使っている。これのみでプログラム作成した。多倍長精度演算ライブラリは “typedef”を使った REAL→mpf class, qd real, dd real etc.
初等関数 (log, sin etc)はあれば使う、無ければ倍精度のものを使った。多倍長精度演算ライブラリは GMP, MPFR, QD, DD,binary128, doubleをサポートいくつか多倍長精度演算ライブラリの違いを吸収するような関数を書いた。ほとんど C++の “double”と同じ感覚でプログラムできる。(例. SDPA-DD,および -GMP)
中田真秀 高精度線形代数演算ライブラリ MPACK 0.8.0 の紹介
MBLASの実装例
Caxpy: Complex version of axpy
void Caxpy(INTEGER n, COMPLEX ca, COMPLEX * cx, INTEGER incx, COMPLEX * cy, INTEGER incy)
{
REAL Zero = 0.0;
if (n <= 0)
return;
if (RCabs1(ca) == Zero)
return;
INTEGER ix = 0;
INTEGER iy = 0;
if (incx < 0)
ix = (-n + 1) * incx;
if (incy < 0)
iy = (-n + 1) * incy;
for (INTEGER i = 0; i < n; i++) {
cy[iy] = cy[iy] + ca * cx[ix];
ix = ix + incx;
中田真秀 高精度線形代数演算ライブラリ MPACK 0.8.0 の紹介
MLAPACK実装例Rsyev; diagonalization of real symmetric matrices
Rlascl(uplo, 0, 0, One, sigma, n, n, A, lda, info);
}
//Call DSYTRD to reduce symmetric matrix to tridiagonal form.
inde = 1;
indtau = inde + n;
indwrk = indtau + n;
llwork = *lwork - indwrk + 1;
Rsytrd(uplo, n, &A[0], lda, &w[0], &work[inde - 1], &work[indtau - 1],
&work[indwrk - 1], llwork, &iinfo);
//For eigenvalues only, call DSTERF. For eigenvectors, first call
//DORGTR to generate the orthogonal matrix, then call DSTEQR.
if (!wantz) {
Rsterf(n, &w[0], &work[inde - 1], info);
} else {
Rorgtr(uplo, n, A, lda, &work[indtau - 1], &work[indwrk - 1], llwork,
&iinfo);
Rsteqr(jobz, n, w, &work[inde - 1], A, lda, &work[indtau - 1], info);
}
//If matrix was scaled, then rescale eigenvalues appropriately.
if (iscale == 1) {
if (*info == 0) {
中田真秀 高精度線形代数演算ライブラリ MPACK 0.8.0 の紹介
MPACK (MBLAS/MLAPACK)についての事実
Googleに”Multiple precision BLAS”でお尋ねすると私のページおよび関連ページばかりがヒットダウンロードは 2013/1/26現在 3043ダウンロード。
中田真秀 高精度線形代数演算ライブラリ MPACK 0.8.0 の紹介
MBLASの品質保証�� ��BLASは代数的な処理のみ行う
想定される様々なケースについて数を代入してみてMPFR+MPC版と BLASの結果と良い一致を得ること。同じことをMPFR+MPC版と DD版、倍精度版、GMP版...と比較して良い一致を得ること。バグが取れる。BLASはこれで ok。for (int k = MIN_K; k < MAX_K; k++) {
for (int n = MIN_N; n < MAX_N; n++) {
for (int m = MIN_M; m < MAX_M; m++) {
...
for (int lda = minlda; lda < MAX_LDA; lda++) {
for (int ldb = minldb; ldb < MAX_LDB; ldb++) {
for (int ldc = max(1, m); ldc < MAX_LDC; ldc++) {
Rgemm(transa, transb, m, n, k, alpha, A, lda, B, ldb, beta, C, ldc);
dgemm_f77(transa, transb, &m, &n, &k, &alphad, Ad, &lda,
Bd, &ldb, &betad, Cd, &ldc);
...
diff = vec_diff(C, Cd, MAT_A(ldc, n), 1);
if (fabs(diff) > EPSILON) {
printf(‘‘#error %lf!!\n’’, diff);
errorflag = TRUE;
}
中田真秀 高精度線形代数演算ライブラリ MPACK 0.8.0 の紹介
MLAPACKの品質保証
�� ��収束の概念が入るため、とても難しい
同じように様々な値を代入して、MPFR+MPC版と LAPACKと一致を得る。収束の概念が入ってくるルーチンもある。
代数的操作しかないルーチンもあるし、反復するものでもだいたい ok
研究に用いると無限ループなどに陥る場合がある。これでもバグがわかる。(Waki et al.)
中田真秀 高精度線形代数演算ライブラリ MPACK 0.8.0 の紹介
GMP, MPFRでは実行時に精度を変更できる
MPACKのパッケージに入っている 50x50のヒルベルト行列とその逆行列を数値的に求めて、単位行列との差を求めるプログラムについて精度を実行時に変更できる。
$ ./hilbert_mpfr
...
1norm(I-A*invA)=1.8784847910273908e-73
$ MPACK_MPFR_PRECISION=1024;
$ export MPACK_MPFR_PRECISION ; ./hilbert_mpfr
...
1norm(I-A*invA)=1.9318639065194500e-226
中田真秀 高精度線形代数演算ライブラリ MPACK 0.8.0 の紹介
ベクトル演算:Raxpyのパフォーマンス測定
on Intel Core i7 920 (2.6GHz) / Ubuntu 10.04 / gcc 4.4.3
y ← αx + y
Raxpy performance in Flops. multithread by OpenMP inparenthesis
MP Library(sign. digs.) Flops (OpenMP)DD(32) 130(570)MQD(64) 13.7(67)M
GMP(77) 11.3(45)MGMP(154) 7.6(32)MMPFR(154) 3.7(17)M
GotoBLAS(16) 1.5G
中田真秀 高精度線形代数演算ライブラリ MPACK 0.8.0 の紹介
行列-ベクトル積:Rgemvのパフォーマンス
on Intel Core i7 920 (2.6GHz) / Ubuntu 10.04 / gcc 4.4.3
y ← αAx + βy
Rgemv performance in Flops.MP Library(sign. digs.) Flops (OpenMP)
DD(32) 140MQD(64) 13M
GMP(77) 11.1MMPFR(77) 4.7MGMP(154) 7.1MMPFR(154) 3.7M
GotoBLAS(16) 3.8G
中田真秀 高精度線形代数演算ライブラリ MPACK 0.8.0 の紹介
行列-行列積:Rgemmのパフォーマンス
on Intel Core i7 920 (2.6GHz) / Ubuntu 10.04 / gcc 4.4.3
Rgemm performance in Flops.
C ← αAB + βC
MP Library(sign. digs.) Flops (OpenMP)DD(32) 136 (605)MQD(64) 13.9 (63)M
GMP(77) 11.5 (44)MMPFR(77) 4.6 (20)MGMP(154) 7.2 (28) MMPFR(154) 3.7 (16) M
GotoBLAS(16) 42.5G
中田真秀 高精度線形代数演算ライブラリ MPACK 0.8.0 の紹介
行列-行列積:Rgemmのパフォーマンス: 倍々精度 (擬似的な 4倍精度) Westmere EP
Intel Composer, Intel WestmereEP, 40 cores, 2.4GHz: apporx5GFlops
中田真秀 高精度線形代数演算ライブラリ MPACK 0.8.0 の紹介
行列-行列積:Rgemmのパフォーマンス: GMP (154桁) WestmereEP
Intel Composer, Intel WestmereEP, 40 cores, 2.4GHz, approx.0.2GFlops
中田真秀 高精度線形代数演算ライブラリ MPACK 0.8.0 の紹介
行列-行列積:Rgemmのパフォーマンス: 倍々精度 (擬似的な四倍精度) Magnycours 48cores
GCC 4.6, Magny cours 2.4GHz, 48 cores : approx 3GFlops
中田真秀 高精度線形代数演算ライブラリ MPACK 0.8.0 の紹介
行列-行列積:Rgemmのパフォーマンス: binary128 (本物の四倍精度) Magnycours 48cores
GCC 4.6, Magny cours 2.4GHz, 48 cores : approx 0.3GFlops
中田真秀 高精度線形代数演算ライブラリ MPACK 0.8.0 の紹介
行列-行列積:Rgemmのパフォーマンス: GMP (154桁)Magnycours 48cores
GCC 4.6, Magny cours 2.4GHz, 48 cores: approx 0.15GFlops
中田真秀 高精度線形代数演算ライブラリ MPACK 0.8.0 の紹介
行列-行列積:Rgemmのパフォーマンス: binary128 (本物の四倍精度) [email protected]
Intel Composer 2013, Xeon [email protected]
0
100
200
300
400
500
600
700
0 100 200 300 400 500 600 700 800 900 1000
FLO
PS
Dimension
Rgemm (__float128) performance
NNNTTNTT
NN 24NN gccNT gccTN gccTT gcc
中田真秀 高精度線形代数演算ライブラリ MPACK 0.8.0 の紹介
行列-行列積:Rgemmのパフォーマンス double-double精度 onNVIDIA C2050
CUDA 3.2, NVIDIA C2050, 16GFlops-26GFlops高速かつ安定したパフォーマンス
0
5
10
15
20
25
0 1000 2000 3000 4000 5000 6000
GFL
OPS
Dimension
QuadMul−Sloppy, QuadAdd−Cray KernelQuadMul−Sloppy, QuadAdd−Cray TotalQuadMul−FMA, QuadAdd−Cray Kernel
QuadMul−FMA, QuadAdd−Cray TotalQuadMul−Sloppy, QuadAdd−IEEE Kernel
QuadMul−Sloppy, QuadAdd−IEEE TotalQuadMul−FMA, QuadAdd−IEEE Kernel
QuadMul−FMA, QuadAdd−IEEE Total
中田真秀 高精度線形代数演算ライブラリ MPACK 0.8.0 の紹介
行列-行列積:Rgemmのパフォーマンス double-double精度 onNVIDIA C2050
CUDAさまざまなバージョンを用いた比較
24000
24500
25000
25500
26000
26500
27000
1540 1550 1560 1570 1580 1590 1600 1610 1620
FLO
PS
Dimension
Rgemm (double-doule) performance on NVIDIA C2050
CUDA 3.1CUDA 3.2CUDA 4.0CUDA 4.2CUDA 5.0
中田真秀 高精度線形代数演算ライブラリ MPACK 0.8.0 の紹介
行列-行列積:Rgemmのパフォーマンス double-double精度 onNVIDIA C2050
CUDAさまざまなバージョンを用いた比較。
14600
14800
15000
15200
15400
15600
15800
16000
16200
16400
16600
1534 1535 1536 1537 1538 1539 1540
FLO
PS
Dimension
Rgemm (double-doule) QuadADD-IEEE, QuadMul-FMA performance on NVIDIA C2050
CUDA 3.1CUDA 3.2CUDA 4.0CUDA 4.2CUDA 5.0
中田真秀 高精度線形代数演算ライブラリ MPACK 0.8.0 の紹介
コレスキー分解:Rportfパフォーマンス double-double精度 onNVIDIA C2050
コレスキー分解分解を行った。Rgemmの加速によりコレスキー分解も加速される。
0
100
200
300
400
500
600
700
800
900
1000
0 100 200 300 400 500 600 700 800 900 1000
FLO
PS
Dimension
Rpotrf performance by NVIDIA C2050 (Note: gpu'ed Rgemm only)
host upperCUDA upper (Gemm only)
host lowerCUDA lower (Gemm only)
中田真秀 高精度線形代数演算ライブラリ MPACK 0.8.0 の紹介
対称固有値問題: Rsyevのパフォーマンス
on Intel Core i7 920 (2.6GHz) / Ubuntu 10.04 / gcc 4.4.3
Rsyevのパフォーマンス (300x300の対称行列、固有値、固有ベクトルを求める、秒)
AX = diag[λ1, λ2, · · · λN]X
MP Library(sign. digs.) secondsDD(32) 2.4QD(64) 25.6
GMP(77) 36.9MPFR(77) 78.9GMP(154) 64.0MPFR(154) 111
GotoBLAS(16) 0.1
中田真秀 高精度線形代数演算ライブラリ MPACK 0.8.0 の紹介
高精度線形代数演算ライブラリMPACK�� ��http://mplapack.sourceforge.net/中田真秀@理化学研究所
MPACK:高精度線形代数演算ライブラリ:BLAS,LAPACKをベース線形代数演算のビルディングブロック、参照実装、プログラムインターフェース (API)提供Version 0.8.0 (2012/12/25);ステータス: MBLAS完成, MLAPACK100ルーチン完成NVIDIA GPU C2050での DD精度の行列積の加速綿密なテスト: BLAS、LAPACKにあらゆる値を代入して行われるLinux/FreeBSD/Mac/Win/Intel Xeon Phi/NVIDIA C2050をサポート5つの高精度計算の型をサポート: GMP, MPFR,本物の 4倍精度(binary128), DD, QD,倍精度C++で書きなおした: プログラミングを容易にする。オープンソース: 2-条項 BSDライセンス、再配布、変更など ok!
中田真秀 高精度線形代数演算ライブラリ MPACK 0.8.0 の紹介
今後やりたいこと/やりたくないこと
精度保証の研究成果の取り込み。LAPACKの実装されてない関数の実装。疎行列、高速フーリエ変換 (FFT)の APIの策定。QPBLAS GPUの取り込み。区間演算はやらない。
中田真秀 高精度線形代数演算ライブラリ MPACK 0.8.0 の紹介