Successfully reported this slideshow.
We use your LinkedIn profile and activity data to personalize ads and to show you more relevant ads. You can change your ad preferences anytime.
.    高精度線形代数演算ライブラリ MPACK 0.8.0 の紹介.                 中田 真秀              理化学研究所 情報基盤センター    日本数式処理学会東北地区合同分科会@仙台青葉カルチャー    ...
高精度線形代数演算ライブラリ MPACK          §                                ¤          http://mplapack.sourceforge.net/          ¦     ...
中田のやりたいこと:コンピュータ上での線形代数演算おける精度           問題を解決したい。   人類は、線形代数を有志以来やってきた。エジプトが最古   (パピルス)、中国もガウスの消去法は 1000 年以上前に知って   いた (九...
中田のやりたいこと:コンピュータ上での線形代数演算おける精度           問題を解決したい。   人類は、線形代数を有志以来やってきた。エジプトが最古   (パピルス)、中国もガウスの消去法は 1000 年以上前に知って   いた (九...
中田のやりたいこと:コンピュータ上での線形代数演算おける精度           問題を解決したい。   人類は、線形代数を有志以来やってきた。エジプトが最古   (パピルス)、中国もガウスの消去法は 1000 年以上前に知って   いた (九...
中田のやりたいこと:コンピュータ上での線形代数演算おける精度           問題を解決したい。   人類は、線形代数を有志以来やってきた。エジプトが最古   (パピルス)、中国もガウスの消去法は 1000 年以上前に知って   いた (九...
中田のやりたいこと:コンピュータ上での線形代数演算おける精度           問題を解決したい。   人類は、線形代数を有志以来やってきた。エジプトが最古   (パピルス)、中国もガウスの消去法は 1000 年以上前に知って   いた (九...
中田のやりたいこと:コンピュータ上での線形代数演算おける精度           問題を解決したい。   人類は、線形代数を有志以来やってきた。エジプトが最古   (パピルス)、中国もガウスの消去法は 1000 年以上前に知って   いた (九...
どうやってここにきたか量子化学の研究をしていた (今もしてます w)量子化学の問題が半正定値計画法の問題に帰着することを示した [Nakata et al 2001](引用回数 100 回以上!)SDPA, SDPARA をもってしても 7 桁...
どうやってここにきたか量子化学の研究をしていた (今もしてます w)量子化学の問題が半正定値計画法の問題に帰着することを示した [Nakata et al 2001](引用回数 100 回以上!)SDPA, SDPARA をもってしても 7 桁...
どうやってここにきたか量子化学の研究をしていた (今もしてます w)量子化学の問題が半正定値計画法の問題に帰着することを示した [Nakata et al 2001](引用回数 100 回以上!)SDPA, SDPARA をもってしても 7 桁...
どうやってここにきたか量子化学の研究をしていた (今もしてます w)量子化学の問題が半正定値計画法の問題に帰着することを示した [Nakata et al 2001](引用回数 100 回以上!)SDPA, SDPARA をもってしても 7 桁...
どうやってここにきたか量子化学の研究をしていた (今もしてます w)量子化学の問題が半正定値計画法の問題に帰着することを示した [Nakata et al 2001](引用回数 100 回以上!)SDPA, SDPARA をもってしても 7 桁...
どうやってここにきたか量子化学の研究をしていた (今もしてます w)量子化学の問題が半正定値計画法の問題に帰着することを示した [Nakata et al 2001](引用回数 100 回以上!)SDPA, SDPARA をもってしても 7 桁...
どうやってここにきたか量子化学の研究をしていた (今もしてます w)量子化学の問題が半正定値計画法の問題に帰着することを示した [Nakata et al 2001](引用回数 100 回以上!)SDPA, SDPARA をもってしても 7 桁...
どうやってここにきたか量子化学の研究をしていた (今もしてます w)量子化学の問題が半正定値計画法の問題に帰着することを示した [Nakata et al 2001](引用回数 100 回以上!)SDPA, SDPARA をもってしても 7 桁...
あらましはじめに:どうして我々は精度がほしいのか?浮動小数点数と多倍長精度ライブラリについて。MPACK, BLAS, LAPACK: 線形代数演算ライブラリサマリ             中田 真秀   高精度線形代数演算ライブラリ MPAC...
はじめに:どうして我々は精度がほしいのか?       中田 真秀   高精度線形代数演算ライブラリ MPACK 0.8.0 の紹介
ペタ、エクサスケールの計算機ではより高い精度が必要となる  エクサスケールのコンピュータは 1023 回の浮動小数点演算!  を一週間で行う。    コンピュータを使った科学は精度が不足することになるだろ    うと考えられる。        ...
ペタ、エクサスケールの計算機ではより高い精度が必要となる  エクサスケールのコンピュータは 1023 回の浮動小数点演算!  を一週間で行う。    コンピュータを使った科学は精度が不足することになるだろ    うと考えられる。        ...
ペタ、エクサスケールの計算機ではより高い精度が必要となる  エクサスケールのコンピュータは 1023 回の浮動小数点演算!  を一週間で行う。    コンピュータを使った科学は精度が不足することになるだろ    うと考えられる。        ...
はじめに:どうして我々は精度がほしいのか?反復法 を倍精度で行うと、しばしば 収束しないことがある[Hasegawa 2007]。         中田 真秀   高精度線形代数演算ライブラリ MPACK 0.8.0 の紹介
はじめに:どうして我々は精度がほしいのか?反復法 を倍精度で行うと、しばしば 収束しないことがある[Hasegawa 2007]。         中田 真秀   高精度線形代数演算ライブラリ MPACK 0.8.0 の紹介
ペタ、エクサスケールの計算機ではより高い精度が必要となる  半正定値計画問題 (SDP): 解くべき線形方程式の条件数が最  適解付近で発散する。  最適解に近づくほど、数値的に問題が難しくなる。  [Nakata et al 2008], [...
ペタ、エクサスケールの計算機ではより高い精度が必要となる  半正定値計画問題 (SDP): 解くべき線形方程式の条件数が最  適解付近で発散する。  最適解に近づくほど、数値的に問題が難しくなる。  [Nakata et al 2008], [...
ペタ、エクサスケールの計算機ではより高い精度が必要となる  半正定値計画問題 (SDP): 解くべき線形方程式の条件数が最  適解付近で発散する。  最適解に近づくほど、数値的に問題が難しくなる。  [Nakata et al 2008], [...
ペタ、エクサスケールの計算機ではより高い精度が必要となる  半正定値計画問題 (SDP): 解くべき線形方程式の条件数が最  適解付近で発散する。  最適解に近づくほど、数値的に問題が難しくなる。  [Nakata et al 2008], [...
ペタ、エクサスケールの計算機ではより高い精度が必要となる  今後高精度計算はやりやすくなる。演算器 (CPU, GPU, アク  セラレータ) などはどんどん高速になるが、メモリバンド幅  はあがらないため、演算力は余るのでそれは高精度演算に使...
ペタ、エクサスケールの計算機ではより高い精度が必要となる  今後高精度計算はやりやすくなる。演算器 (CPU, GPU, アク  セラレータ) などはどんどん高速になるが、メモリバンド幅  はあがらないため、演算力は余るのでそれは高精度演算に使...
ペタ、エクサスケールの計算機ではより高い精度が必要となる  今後高精度計算はやりやすくなる。演算器 (CPU, GPU, アク  セラレータ) などはどんどん高速になるが、メモリバンド幅  はあがらないため、演算力は余るのでそれは高精度演算に使...
浮動小数点数と多倍長精度ライブラリについて       中田 真秀   高精度線形代数演算ライブラリ MPACK 0.8.0 の紹介
倍精度: 最もよく使われている浮動小数点数“754-2008 IEEE Standard for Floating-Point Arithmetic”binary64 (倍精度) フォーマットは 10 進 16 桁の有効桁がある多くのプラットフ...
丸め誤差対策に、多倍長精度計算を使う §                                              ¤ 多倍長精度を使う: あんまり考えず、力づくで処理 ¥ ¦浮動小数点数: コンピュータ上での実数の近似表現の一...
丸め誤差対策に、多倍長精度計算を使う §                                              ¤ 多倍長精度を使う: あんまり考えず、力づくで処理 ¥ ¦浮動小数点数: コンピュータ上での実数の近似表現の一...
丸め誤差対策に、多倍長精度計算を使う §                                              ¤ 多倍長精度を使う: あんまり考えず、力づくで処理 ¥ ¦浮動小数点数: コンピュータ上での実数の近似表現の一...
丸め誤差対策に、多倍長精度計算を使う §                                              ¤ 多倍長精度を使う: あんまり考えず、力づくで処理 ¥ ¦浮動小数点数: コンピュータ上での実数の近似表現の一...
丸め誤差対策に、多倍長精度計算を使う §                                              ¤ 多倍長精度を使う: あんまり考えず、力づくで処理 ¥ ¦浮動小数点数: コンピュータ上での実数の近似表現の一...
多倍長精度、多倍長精度計算とは?§                                                     ¤多倍長精度とは、浮動小数点数で仮数部を大きく取る精度 ¥¦    GMP というライブラリが有名。ht...
多倍長精度、多倍長精度計算とは?§                                                     ¤多倍長精度とは、浮動小数点数で仮数部を大きく取る精度 ¥¦    GMP というライブラリが有名。ht...
他の多倍長精度演算ライブラリについて他の多倍長精度演算ライブラリについて:  QD ライブラリ: double-double (quad-double) 精度 : 10 進 32  (64) 桁、非常に高速    binary128, IEEE...
他の多倍長精度演算ライブラリについて他の多倍長精度演算ライブラリについて:  QD ライブラリ: double-double (quad-double) 精度 : 10 進 32  (64) 桁、非常に高速    binary128, IEEE...
他の多倍長精度演算ライブラリについて他の多倍長精度演算ライブラリについて:  QD ライブラリ: double-double (quad-double) 精度 : 10 進 32  (64) 桁、非常に高速    binary128, IEEE...
多倍長精度演算ライブラリのまとめ            精度     丸め     スピード          複素数             コメント  GMP        任意     なし        △         とりあえず ...
BLAS, LAPACK, MPACK の紹介      中田 真秀   高精度線形代数演算ライブラリ MPACK 0.8.0 の紹介
BLAS、LAPACK とは?BLAS: さまざまなタイプのベクトル-ベクトル、行列-ベクトル、行列-行列演算の参照実装。高速な実装も入手できる。たとえば OpenBLAS(GotoBLAS2), Intel MKL, ATLAS など。LAP...
BLAS、LAPACK とは?BLAS: さまざまなタイプのベクトル-ベクトル、行列-ベクトル、行列-行列演算の参照実装。高速な実装も入手できる。たとえば OpenBLAS(GotoBLAS2), Intel MKL, ATLAS など。LAP...
高精度線形代数演算ライブラリ MPACK          §                                ¤          http://mplapack.sourceforge.net/          ¦     ...
MPACK 0.8.0: できることとできないことVersion 0.8.0 (2012/12/25); ステータス: MBLAS 完成, MLAPACK100 ルーチン完成Rgemm (行列-行列積) : OpenMP で加速Rgemm の倍...
MPACK の用途数値的に不安定な問題を解く場合:反復法、半正定値法の最適解付近。計算機援用証明を行いたい場合。精度保証を行いたい場合: INTLAB とコラボレーションできないか?既存の C++のコードを労力少なく多倍長化したいとき。4 倍精...
関数の名前の付け方:プログラムインターフェース (API) 提供Prefix の変化float, double → “R”eal,complex, double complex → “C”omplex.    daxpy, zaxpy → Raxp...
MBLAS 0.8.0 でサポートされている全 76 ルーチン                            LEVEL1 MBLAS  Crotg      Cscal      Rrotg     Rrot   Rrotm     ...
MLAPACK 0.8.0 でサポートされている全 100 ルーチンMutils    Rlamch    Rlae2    Rlaev2    Claev2    Rlassq   ClassqRlanst    Clanht    Rlan...
BLAS, LAPACK との相違点:プログラムインターフェース (API) 提供  呼び出し方が若干違う。call by value が、時々call by reference に  なっている。MBLAS/MLAPACK:  Rgemm("...
プログラミング詳細型は INTEGER, REAL, COMPLEX, LOGICAL を使っている。これのみでプログラム作成した。多倍長精度演算ライブラリは “typedef” を使った REAL →mpf class, qd real, d...
MBLAS の実装例Caxpy: Complex version of axpyvoid Caxpy(INTEGER n, COMPLEX ca, COMPLEX * cx, INTEGER incx, COMPLEX * cy, INTE{ ...
MLAPACK 実装例Rsyev; diagonalization of real symmetric matrices        Rlascl(uplo, 0, 0, One, sigma, n, n, A, lda, info);   ...
MPACK (MBLAS/MLAPACK) についての事実Google に”Multiple precision BLAS” でお尋ねすると私のページおよび関連ページばかりがヒットダウンロードは 2013/1/26 現在 3043 ダウンロード...
MBLAS の品質保証               §                ¤               BLAS は代数的な処理のみ行う ¥               ¦想定される様々なケースについて数を代入してみてMPFR+M...
MLAPACK の品質保証         §                                ¤        収束の概念が入るため、とても難しい ¥        ¦    同じように様々な値を代入して、MPFR+MPC 版と...
GMP, MPFR では実行時に精度を変更できるMPACK のパッケージに入っている 50x50 のヒルベルト行列とその逆行列を数値的に求めて、単位行列との差を求めるプログラムについて精度を実行時に変更できる。$ ./hilbert_mpfr....
ベクトル演算:Raxpy のパフォーマンス測定on Intel Core i7 920 (2.6GHz) / Ubuntu 10.04 / gcc 4.4.3                           y ← αx + y     R...
行列-ベクトル積:Rgemv のパフォーマンスon Intel Core i7 920 (2.6GHz) / Ubuntu 10.04 / gcc 4.4.3                          y ← α Ax + βy    ...
行列-行列積:Rgemm のパフォーマンスon Intel Core i7 920 (2.6GHz) / Ubuntu 10.04 / gcc 4.4.3                   Rgemm performance in Flops...
行列-行列積:Rgemm のパフォーマンス: 倍々精度 (擬似的な 4 倍精              度) Westmere EP Intel Composer, Intel WestmereEP, 40 cores, 2.4GHz: app...
行列-行列積:Rgemm のパフォーマンス: GMP (154 桁) Westmere                 EP Intel Composer, Intel WestmereEP, 40 cores, 2.4GHz, approx....
行列-行列積:Rgemm のパフォーマンス: 倍々精度 (擬似的な四倍精            度) Magnycours 48cores GCC 4.6, Magny cours 2.4GHz, 48 cores : approx 3GFlo...
行列-行列積:Rgemm のパフォーマンス: binary128 (本物の四倍精            度) Magnycours 48cores GCC 4.6, Magny cours 2.4GHz, 48 cores : approx 0...
行列-行列積:Rgemm のパフォーマンス: GMP (154 桁)           Magnycours 48coresGCC 4.6, Magny cours 2.4GHz, 48 cores: approx 0.15GFlops   ...
行列-行列積:Rgemm のパフォーマンス: binary128 (本物の四倍精              度) X5680@3.33GHz Intel Composer 2013, Xeon X5680@3.33GHz            ...
行列-行列積:Rgemm のパフォーマンス double-double 精度 on              NVIDIA C2050 CUDA 3.2, NVIDIA C2050, 16GFlops-26GFlops 高速かつ安定した パフォ...
行列-行列積:Rgemm のパフォーマンス double-double 精度 on              NVIDIA C2050 CUDA さまざまなバージョンを用いた比較                            Rgemm...
行列-行列積:Rgemm のパフォーマンス double-double 精度 on              NVIDIA C2050 CUDA さまざまなバージョンを用いた比較。              Rgemm (double-doul...
コレスキー分解:Rportf パフォーマンス double-double 精度 on               NVIDIA C2050 コレスキー分解分解を行った。Rgemm の加速によりコレスキー 分解も加速される。           ...
対称固有値問題: Rsyev のパフォーマンスon Intel Core i7 920 (2.6GHz) / Ubuntu 10.04 / gcc 4.4.3Rsyev のパフォーマンス (300x300 の対称行列、固有値、固有ベ      ...
高精度線形代数演算ライブラリ MPACK          §                                ¤          http://mplapack.sourceforge.net/          ¦     ...
今後やりたいこと/やりたくないこと精度保証の研究成果の取り込み。LAPACK の実装されてない関数の実装。疎行列、高速フーリエ変換 (FFT) の API の策定。QPBLAS GPU の取り込み。区間演算はやらない。            中...
Upcoming SlideShare
Loading in …5
×

高精度線形代数演算ライブラリMPACK 0.8.0の紹介

高精度線形代数演算ライブラリMPACK 0.8.0の紹介

  • Login to see the comments

高精度線形代数演算ライブラリMPACK 0.8.0の紹介

  1. 1. . 高精度線形代数演算ライブラリ MPACK 0.8.0 の紹介. 中田 真秀 理化学研究所 情報基盤センター 日本数式処理学会東北地区合同分科会@仙台青葉カルチャー センター 602 号室, 2013/1/27 10:40 中田 真秀 高精度線形代数演算ライブラリ MPACK 0.8.0 の紹介
  2. 2. 高精度線形代数演算ライブラリ 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 の紹介
  3. 3. 中田のやりたいこと:コンピュータ上での線形代数演算おける精度 問題を解決したい。 人類は、線形代数を有志以来やってきた。エジプトが最古 (パピルス)、中国もガウスの消去法は 1000 年以上前に知って いた (九章算術)。 コンピュータが生まれ、線形代数演算をコンピュータ上で高 速に、大量にやらせることが重要になった。 これまで主にスピードおよび規模を追求してきた。これがコ ンピュータの歴史。 いままで無視してきたこと:線形代数的には精度も重要だとい うこと。 中田はコンピュータ上での線形代数演算おける精度問題を解 決したい。 中田 真秀 高精度線形代数演算ライブラリ MPACK 0.8.0 の紹介
  4. 4. 中田のやりたいこと:コンピュータ上での線形代数演算おける精度 問題を解決したい。 人類は、線形代数を有志以来やってきた。エジプトが最古 (パピルス)、中国もガウスの消去法は 1000 年以上前に知って いた (九章算術)。 コンピュータが生まれ、線形代数演算をコンピュータ上で高 速に、大量にやらせることが重要になった。 これまで主にスピードおよび規模を追求してきた。これがコ ンピュータの歴史。 いままで無視してきたこと:線形代数的には精度も重要だとい うこと。 中田はコンピュータ上での線形代数演算おける精度問題を解 決したい。 中田 真秀 高精度線形代数演算ライブラリ MPACK 0.8.0 の紹介
  5. 5. 中田のやりたいこと:コンピュータ上での線形代数演算おける精度 問題を解決したい。 人類は、線形代数を有志以来やってきた。エジプトが最古 (パピルス)、中国もガウスの消去法は 1000 年以上前に知って いた (九章算術)。 コンピュータが生まれ、線形代数演算をコンピュータ上で高 速に、大量にやらせることが重要になった。 これまで主にスピードおよび規模を追求してきた。これがコ ンピュータの歴史。 いままで無視してきたこと:線形代数的には精度も重要だとい うこと。 中田はコンピュータ上での線形代数演算おける精度問題を解 決したい。 中田 真秀 高精度線形代数演算ライブラリ MPACK 0.8.0 の紹介
  6. 6. 中田のやりたいこと:コンピュータ上での線形代数演算おける精度 問題を解決したい。 人類は、線形代数を有志以来やってきた。エジプトが最古 (パピルス)、中国もガウスの消去法は 1000 年以上前に知って いた (九章算術)。 コンピュータが生まれ、線形代数演算をコンピュータ上で高 速に、大量にやらせることが重要になった。 これまで主にスピードおよび規模を追求してきた。これがコ ンピュータの歴史。 いままで無視してきたこと:線形代数的には精度も重要だとい うこと。 中田はコンピュータ上での線形代数演算おける精度問題を解 決したい。 中田 真秀 高精度線形代数演算ライブラリ MPACK 0.8.0 の紹介
  7. 7. 中田のやりたいこと:コンピュータ上での線形代数演算おける精度 問題を解決したい。 人類は、線形代数を有志以来やってきた。エジプトが最古 (パピルス)、中国もガウスの消去法は 1000 年以上前に知って いた (九章算術)。 コンピュータが生まれ、線形代数演算をコンピュータ上で高 速に、大量にやらせることが重要になった。 これまで主にスピードおよび規模を追求してきた。これがコ ンピュータの歴史。 いままで無視してきたこと:線形代数的には精度も重要だとい うこと。 中田はコンピュータ上での線形代数演算おける精度問題を解 決したい。 中田 真秀 高精度線形代数演算ライブラリ MPACK 0.8.0 の紹介
  8. 8. 中田のやりたいこと:コンピュータ上での線形代数演算おける精度 問題を解決したい。 人類は、線形代数を有志以来やってきた。エジプトが最古 (パピルス)、中国もガウスの消去法は 1000 年以上前に知って いた (九章算術)。 コンピュータが生まれ、線形代数演算をコンピュータ上で高 速に、大量にやらせることが重要になった。 これまで主にスピードおよび規模を追求してきた。これがコ ンピュータの歴史。 いままで無視してきたこと:線形代数的には精度も重要だとい うこと。 中田はコンピュータ上での線形代数演算おける精度問題を解 決したい。 中田 真秀 高精度線形代数演算ライブラリ MPACK 0.8.0 の紹介
  9. 9. どうやってここにきたか量子化学の研究をしていた (今もしてます 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 の紹介
  10. 10. どうやってここにきたか量子化学の研究をしていた (今もしてます 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 の紹介
  11. 11. どうやってここにきたか量子化学の研究をしていた (今もしてます 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 の紹介
  12. 12. どうやってここにきたか量子化学の研究をしていた (今もしてます 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 の紹介
  13. 13. どうやってここにきたか量子化学の研究をしていた (今もしてます 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 の紹介
  14. 14. どうやってここにきたか量子化学の研究をしていた (今もしてます 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 の紹介
  15. 15. どうやってここにきたか量子化学の研究をしていた (今もしてます 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 の紹介
  16. 16. どうやってここにきたか量子化学の研究をしていた (今もしてます 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 の紹介
  17. 17. あらましはじめに:どうして我々は精度がほしいのか?浮動小数点数と多倍長精度ライブラリについて。MPACK, BLAS, LAPACK: 線形代数演算ライブラリサマリ 中田 真秀 高精度線形代数演算ライブラリ MPACK 0.8.0 の紹介
  18. 18. はじめに:どうして我々は精度がほしいのか? 中田 真秀 高精度線形代数演算ライブラリ MPACK 0.8.0 の紹介
  19. 19. ペタ、エクサスケールの計算機ではより高い精度が必要となる エクサスケールのコンピュータは 1023 回の浮動小数点演算! を一週間で行う。 コンピュータを使った科学は精度が不足することになるだろ うと考えられる。 中田 真秀 高精度線形代数演算ライブラリ MPACK 0.8.0 の紹介
  20. 20. ペタ、エクサスケールの計算機ではより高い精度が必要となる エクサスケールのコンピュータは 1023 回の浮動小数点演算! を一週間で行う。 コンピュータを使った科学は精度が不足することになるだろ うと考えられる。 中田 真秀 高精度線形代数演算ライブラリ MPACK 0.8.0 の紹介
  21. 21. ペタ、エクサスケールの計算機ではより高い精度が必要となる エクサスケールのコンピュータは 1023 回の浮動小数点演算! を一週間で行う。 コンピュータを使った科学は精度が不足することになるだろ うと考えられる。 中田 真秀 高精度線形代数演算ライブラリ MPACK 0.8.0 の紹介
  22. 22. はじめに:どうして我々は精度がほしいのか?反復法 を倍精度で行うと、しばしば 収束しないことがある[Hasegawa 2007]。 中田 真秀 高精度線形代数演算ライブラリ MPACK 0.8.0 の紹介
  23. 23. はじめに:どうして我々は精度がほしいのか?反復法 を倍精度で行うと、しばしば 収束しないことがある[Hasegawa 2007]。 中田 真秀 高精度線形代数演算ライブラリ MPACK 0.8.0 の紹介
  24. 24. ペタ、エクサスケールの計算機ではより高い精度が必要となる 半正定値計画問題 (SDP): 解くべき線形方程式の条件数が最 適解付近で発散する。 最適解に近づくほど、数値的に問題が難しくなる。 [Nakata et al 2008], [Nakata 2009], [Waki-Nakata-Muramatsu] The 1-norm and the estimated 1-norm condition number of shur complement matrix 1e+20 1-cond 1-norm 1e+15 1e+10 100000 1 1e-05 1e-10 0 10 20 30 40 50 60 70 80 90 # of iter. 中田 真秀 高精度線形代数演算ライブラリ MPACK 0.8.0 の紹介
  25. 25. ペタ、エクサスケールの計算機ではより高い精度が必要となる 半正定値計画問題 (SDP): 解くべき線形方程式の条件数が最 適解付近で発散する。 最適解に近づくほど、数値的に問題が難しくなる。 [Nakata et al 2008], [Nakata 2009], [Waki-Nakata-Muramatsu] The 1-norm and the estimated 1-norm condition number of shur complement matrix 1e+20 1-cond 1-norm 1e+15 1e+10 100000 1 1e-05 1e-10 0 10 20 30 40 50 60 70 80 90 # of iter. 中田 真秀 高精度線形代数演算ライブラリ MPACK 0.8.0 の紹介
  26. 26. ペタ、エクサスケールの計算機ではより高い精度が必要となる 半正定値計画問題 (SDP): 解くべき線形方程式の条件数が最 適解付近で発散する。 最適解に近づくほど、数値的に問題が難しくなる。 [Nakata et al 2008], [Nakata 2009], [Waki-Nakata-Muramatsu] The 1-norm and the estimated 1-norm condition number of shur complement matrix 1e+20 1-cond 1-norm 1e+15 1e+10 100000 1 1e-05 1e-10 0 10 20 30 40 50 60 70 80 90 # of iter. 中田 真秀 高精度線形代数演算ライブラリ MPACK 0.8.0 の紹介
  27. 27. ペタ、エクサスケールの計算機ではより高い精度が必要となる 半正定値計画問題 (SDP): 解くべき線形方程式の条件数が最 適解付近で発散する。 最適解に近づくほど、数値的に問題が難しくなる。 [Nakata et al 2008], [Nakata 2009], [Waki-Nakata-Muramatsu] The 1-norm and the estimated 1-norm condition number of shur complement matrix 1e+20 1-cond 1-norm 1e+15 1e+10 100000 1 1e-05 1e-10 0 10 20 30 40 50 60 70 80 90 # of iter. 中田 真秀 高精度線形代数演算ライブラリ MPACK 0.8.0 の紹介
  28. 28. ペタ、エクサスケールの計算機ではより高い精度が必要となる 今後高精度計算はやりやすくなる。演算器 (CPU, GPU, アク セラレータ) などはどんどん高速になるが、メモリバンド幅 はあがらないため、演算力は余るのでそれは高精度演算に使 える。 其れ以前に Intel Xeon などはとても高速で、演算能力があり 過ぎ。10 年から 20 年前のプログラムは、力技で工夫なくそ のまま高精度化しても、十分高速。 中田 真秀 高精度線形代数演算ライブラリ MPACK 0.8.0 の紹介
  29. 29. ペタ、エクサスケールの計算機ではより高い精度が必要となる 今後高精度計算はやりやすくなる。演算器 (CPU, GPU, アク セラレータ) などはどんどん高速になるが、メモリバンド幅 はあがらないため、演算力は余るのでそれは高精度演算に使 える。 其れ以前に Intel Xeon などはとても高速で、演算能力があり 過ぎ。10 年から 20 年前のプログラムは、力技で工夫なくそ のまま高精度化しても、十分高速。 中田 真秀 高精度線形代数演算ライブラリ MPACK 0.8.0 の紹介
  30. 30. ペタ、エクサスケールの計算機ではより高い精度が必要となる 今後高精度計算はやりやすくなる。演算器 (CPU, GPU, アク セラレータ) などはどんどん高速になるが、メモリバンド幅 はあがらないため、演算力は余るのでそれは高精度演算に使 える。 其れ以前に Intel Xeon などはとても高速で、演算能力があり 過ぎ。10 年から 20 年前のプログラムは、力技で工夫なくそ のまま高精度化しても、十分高速。 中田 真秀 高精度線形代数演算ライブラリ MPACK 0.8.0 の紹介
  31. 31. 浮動小数点数と多倍長精度ライブラリについて 中田 真秀 高精度線形代数演算ライブラリ MPACK 0.8.0 の紹介
  32. 32. 倍精度: 最もよく使われている浮動小数点数“754-2008 IEEE Standard for Floating-Point Arithmetic”binary64 (倍精度) フォーマットは 10 進 16 桁の有効桁がある多くのプラットフォームで使われていて、高速。Core i7 920:∼40GFLOPS; RADEON HD7970 ∼1000GFLOPS, 京コンピュータ ∼ 10PFLOPS) § ¤ 問題点:演算に丸め誤差が入ることがある ¥ ¦ 中田 真秀 高精度線形代数演算ライブラリ MPACK 0.8.0 の紹介
  33. 33. 丸め誤差対策に、多倍長精度計算を使う § ¤ 多倍長精度を使う: あんまり考えず、力づくで処理 ¥ ¦浮動小数点数: コンピュータ上での実数の近似表現の一つ a + (b + c) (a + b) + c浮動小数点数、演算の種類によっては計算結果に誤差が入る。倍精度は 10 進 16 桁の精度しか持たない。 1 + 0.0000000000000001 = 1解決方法の一つ: 多倍長精度計算 中田 真秀 高精度線形代数演算ライブラリ MPACK 0.8.0 の紹介
  34. 34. 丸め誤差対策に、多倍長精度計算を使う § ¤ 多倍長精度を使う: あんまり考えず、力づくで処理 ¥ ¦浮動小数点数: コンピュータ上での実数の近似表現の一つ a + (b + c) (a + b) + c浮動小数点数、演算の種類によっては計算結果に誤差が入る。倍精度は 10 進 16 桁の精度しか持たない。 1 + 0.0000000000000001 = 1解決方法の一つ: 多倍長精度計算 中田 真秀 高精度線形代数演算ライブラリ MPACK 0.8.0 の紹介
  35. 35. 丸め誤差対策に、多倍長精度計算を使う § ¤ 多倍長精度を使う: あんまり考えず、力づくで処理 ¥ ¦浮動小数点数: コンピュータ上での実数の近似表現の一つ a + (b + c) (a + b) + c浮動小数点数、演算の種類によっては計算結果に誤差が入る。倍精度は 10 進 16 桁の精度しか持たない。 1 + 0.0000000000000001 = 1解決方法の一つ: 多倍長精度計算 中田 真秀 高精度線形代数演算ライブラリ MPACK 0.8.0 の紹介
  36. 36. 丸め誤差対策に、多倍長精度計算を使う § ¤ 多倍長精度を使う: あんまり考えず、力づくで処理 ¥ ¦浮動小数点数: コンピュータ上での実数の近似表現の一つ a + (b + c) (a + b) + c浮動小数点数、演算の種類によっては計算結果に誤差が入る。倍精度は 10 進 16 桁の精度しか持たない。 1 + 0.0000000000000001 = 1解決方法の一つ: 多倍長精度計算 中田 真秀 高精度線形代数演算ライブラリ MPACK 0.8.0 の紹介
  37. 37. 丸め誤差対策に、多倍長精度計算を使う § ¤ 多倍長精度を使う: あんまり考えず、力づくで処理 ¥ ¦浮動小数点数: コンピュータ上での実数の近似表現の一つ a + (b + c) (a + b) + c浮動小数点数、演算の種類によっては計算結果に誤差が入る。倍精度は 10 進 16 桁の精度しか持たない。 1 + 0.0000000000000001 = 1解決方法の一つ: 多倍長精度計算 中田 真秀 高精度線形代数演算ライブラリ MPACK 0.8.0 の紹介
  38. 38. 多倍長精度、多倍長精度計算とは?§ ¤多倍長精度とは、浮動小数点数で仮数部を大きく取る精度 ¥¦ GMP というライブラリが有名。http://gmplib.org/ 仮数部は任意に大きくとれる。 演算はソフトウェア的に実装してある。 これは最も高速なライブラリだが、それでも演算はかなり 遅い。 中田 真秀 高精度線形代数演算ライブラリ MPACK 0.8.0 の紹介
  39. 39. 多倍長精度、多倍長精度計算とは?§ ¤多倍長精度とは、浮動小数点数で仮数部を大きく取る精度 ¥¦ GMP というライブラリが有名。http://gmplib.org/ 仮数部は任意に大きくとれる。 演算はソフトウェア的に実装してある。 これは最も高速なライブラリだが、それでも演算はかなり 遅い。 中田 真秀 高精度線形代数演算ライブラリ MPACK 0.8.0 の紹介
  40. 40. 他の多倍長精度演算ライブラリについて他の多倍長精度演算ライブラリについて: QD ライブラリ: double-double (quad-double) 精度 : 10 進 32 (64) 桁、非常に高速 binary128, IEEE 754 2008 の四倍精度。 IEEE754 スタイルの多倍長精度演算ライブラリ: MPFR (実 数) および MPC (複素数)。§一番厳密なのは MPFR+MPC の組み合わせ。これを正本として作成して¦ 中田 真秀 高精度線形代数演算ライブラリ MPACK 0.8.0 の紹介
  41. 41. 他の多倍長精度演算ライブラリについて他の多倍長精度演算ライブラリについて: QD ライブラリ: double-double (quad-double) 精度 : 10 進 32 (64) 桁、非常に高速 binary128, IEEE 754 2008 の四倍精度。 IEEE754 スタイルの多倍長精度演算ライブラリ: MPFR (実 数) および MPC (複素数)。§一番厳密なのは MPFR+MPC の組み合わせ。これを正本として作成して¦ 中田 真秀 高精度線形代数演算ライブラリ MPACK 0.8.0 の紹介
  42. 42. 他の多倍長精度演算ライブラリについて他の多倍長精度演算ライブラリについて: QD ライブラリ: double-double (quad-double) 精度 : 10 進 32 (64) 桁、非常に高速 binary128, IEEE 754 2008 の四倍精度。 IEEE754 スタイルの多倍長精度演算ライブラリ: MPFR (実 数) および MPC (複素数)。§一番厳密なのは MPFR+MPC の組み合わせ。これを正本として作成して¦ 中田 真秀 高精度線形代数演算ライブラリ MPACK 0.8.0 の紹介
  43. 43. 多倍長精度演算ライブラリのまとめ 精度 丸め スピード  複素数 コメント  GMP 任意 なし △ とりあえず よく使われる MPFR 任意 厳密 遅い 厳密 最も厳密 DD 32 桁 ? 高速 とりあえず 倍精度演算で実現 QD 64 桁 ? GMP の 2 倍? とりあえず 指数部削られ過ぎ double 16 桁 ハード 超高速 コンパイラ依存 最も高速binary128 32 桁 ? 遅い コンパイラ依存 gcc/icc でサポート有 中田 真秀 高精度線形代数演算ライブラリ MPACK 0.8.0 の紹介
  44. 44. BLAS, LAPACK, MPACK の紹介 中田 真秀 高精度線形代数演算ライブラリ MPACK 0.8.0 の紹介
  45. 45. 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 の紹介
  46. 46. 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 の紹介
  47. 47. 高精度線形代数演算ライブラリ 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 の紹介
  48. 48. 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 の紹介
  49. 49. MPACK の用途数値的に不安定な問題を解く場合:反復法、半正定値法の最適解付近。計算機援用証明を行いたい場合。精度保証を行いたい場合: INTLAB とコラボレーションできないか?既存の C++のコードを労力少なく多倍長化したいとき。4 倍精度程度の計算を高速に行いたい場合。精度を実行時に様々に変化させたい場合。数値的に不安なときのデバッグに使う。(カジュアルに、例えば) ある値が 0 であることを確認したい場合。 中田 真秀 高精度線形代数演算ライブラリ MPACK 0.8.0 の紹介
  50. 50. 関数の名前の付け方:プログラムインターフェース (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 の紹介
  51. 51. MBLAS 0.8.0 でサポートされている全 76 ルーチン LEVEL1 MBLAS Crotg Cscal Rrotg Rrot Rrotm CRrot Cswap Rswap CRscal Rscal Ccopy Rcopy Caxpy Raxpy Rdot 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 の紹介
  52. 52. 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 Rsterf Rlarf Clarf Rorg2l Cung2l Rorg2r Cung2r RlarftClarft Rlarfb Clarfb Rorgqr Cungqr Rorgql CungqlRlatrd Clatrd Rsytrd Chetrd Rorgtr Cungtr RsyevCheev Rpotrf Cpotrf Clacrm Rtrti2 Ctrti2 Rtrtri Ctrtri Rgetf2 Cgetf2 Rlaswp Claswp Rgetrf CgetrfRgetri Cgetri Rgetrs Cgetrs Rgesv Cgesv RtrtrsCtrtrs Rlasyf Clasyf Clahef Clacrt Claesy CrotCspmv Cspr Csymv Csyr iCmax1 RCsum1 RpotrsRposv Rgeequ Rlatrs Rlange Rgecon Rlauu2 RlauumRpotri Rpocon 中田 真秀 高精度線形代数演算ライブラリ MPACK 0.8.0 の紹介
  53. 53. 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 の紹介
  54. 54. プログラミング詳細型は 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 の紹介
  55. 55. MBLAS の実装例Caxpy: Complex version of axpyvoid Caxpy(INTEGER n, COMPLEX ca, COMPLEX * cx, INTEGER incx, COMPLEX * cy, INTE{ 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 の紹介
  56. 56. 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 の紹介
  57. 57. MPACK (MBLAS/MLAPACK) についての事実Google に”Multiple precision BLAS” でお尋ねすると私のページおよび関連ページばかりがヒットダウンロードは 2013/1/26 現在 3043 ダウンロード。 中田 真秀 高精度線形代数演算ライブラリ MPACK 0.8.0 の紹介
  58. 58. 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); 中田 真秀 高精度線形代数演算ライブラリ MPACK 0.8.0 の紹介
  59. 59. MLAPACK の品質保証  § ¤ 収束の概念が入るため、とても難しい ¥ ¦ 同じように様々な値を代入して、MPFR+MPC 版と LAPACK と一致を得る。 収束の概念が入ってくるルーチンもある。 代数的操作しかないルーチンもあるし、反復するものでもだ いたい ok 研究に用いると無限ループなどに陥る場合がある。これでも バグがわかる。(Waki et al.) 中田 真秀 高精度線形代数演算ライブラリ MPACK 0.8.0 の紹介
  60. 60. 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 の紹介
  61. 61. ベクトル演算: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 in parenthesis MP Library(sign. digs.) Flops (OpenMP) DD(32) 130(570)M QD(64) 13.7(67)M GMP(77) 11.3(45)M GMP(154) 7.6(32)M MPFR(154) 3.7(17)M GotoBLAS(16) 1.5G 中田 真秀 高精度線形代数演算ライブラリ MPACK 0.8.0 の紹介
  62. 62. 行列-ベクトル積: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) 140M QD(64) 13M GMP(77) 11.1M MPFR(77) 4.7M GMP(154) 7.1M MPFR(154) 3.7M GotoBLAS(16) 3.8G 中田 真秀 高精度線形代数演算ライブラリ MPACK 0.8.0 の紹介
  63. 63. 行列-行列積: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)M QD(64) 13.9 (63)M GMP(77) 11.5 (44)M MPFR(77) 4.6 (20)M GMP(154) 7.2 (28) M MPFR(154) 3.7 (16) M GotoBLAS(16) 42.5G 中田 真秀 高精度線形代数演算ライブラリ MPACK 0.8.0 の紹介
  64. 64. 行列-行列積:Rgemm のパフォーマンス: 倍々精度 (擬似的な 4 倍精 度) Westmere EP Intel Composer, Intel WestmereEP, 40 cores, 2.4GHz: apporx 5GFlops 中田 真秀 高精度線形代数演算ライブラリ MPACK 0.8.0 の紹介
  65. 65. 行列-行列積:Rgemm のパフォーマンス: GMP (154 桁) Westmere EP Intel Composer, Intel WestmereEP, 40 cores, 2.4GHz, approx. 0.2GFlops 中田 真秀 高精度線形代数演算ライブラリ MPACK 0.8.0 の紹介
  66. 66. 行列-行列積:Rgemm のパフォーマンス: 倍々精度 (擬似的な四倍精 度) Magnycours 48cores GCC 4.6, Magny cours 2.4GHz, 48 cores : approx 3GFlops 中田 真秀 高精度線形代数演算ライブラリ MPACK 0.8.0 の紹介
  67. 67. 行列-行列積:Rgemm のパフォーマンス: binary128 (本物の四倍精 度) Magnycours 48cores GCC 4.6, Magny cours 2.4GHz, 48 cores : approx 0.3GFlops 中田 真秀 高精度線形代数演算ライブラリ MPACK 0.8.0 の紹介
  68. 68. 行列-行列積:Rgemm のパフォーマンス: GMP (154 桁) Magnycours 48coresGCC 4.6, Magny cours 2.4GHz, 48 cores: approx 0.15GFlops 中田 真秀 高精度線形代数演算ライブラリ MPACK 0.8.0 の紹介
  69. 69. 行列-行列積:Rgemm のパフォーマンス: binary128 (本物の四倍精 度) X5680@3.33GHz Intel Composer 2013, Xeon X5680@3.33GHz Rgemm (__float128) performance 700 600 500 400 FLOPS 300 NN NT TN 200 TT NN 24 NN gcc 100 NT gcc TN gcc TT gcc 0 0 100 200 300 400 500 600 700 800 900 1000 Dimension 中田 真秀 高精度線形代数演算ライブラリ MPACK 0.8.0 の紹介
  70. 70. 行列-行列積:Rgemm のパフォーマンス double-double 精度 on NVIDIA C2050 CUDA 3.2, NVIDIA C2050, 16GFlops-26GFlops 高速かつ安定した パフォーマンス 25 20 GFLOPS 15 10 QuadMul−Sloppy, QuadAdd−Cray Kernel QuadMul−Sloppy, QuadAdd−Cray Total QuadMul−FMA, QuadAdd−Cray Kernel QuadMul−FMA, QuadAdd−Cray Total 5 QuadMul−Sloppy, QuadAdd−IEEE Kernel QuadMul−Sloppy, QuadAdd−IEEE Total QuadMul−FMA, QuadAdd−IEEE Kernel QuadMul−FMA, QuadAdd−IEEE Total 0 0 1000 2000 3000 4000 5000 6000 中田 真秀 高精度線形代数演算ライブラリ MPACK 0.8.0 の紹介 Dimension
  71. 71. 行列-行列積:Rgemm のパフォーマンス double-double 精度 on NVIDIA C2050 CUDA さまざまなバージョンを用いた比較 Rgemm (double-doule) performance on NVIDIA C2050 27000 26500 26000 FLOPS 25500 25000 CUDA 3.1 24500 CUDA 3.2 CUDA 4.0 CUDA 4.2 CUDA 5.0 24000 1540 1550 1560 1570 1580 1590 1600 1610 1620 Dimension 中田 真秀 高精度線形代数演算ライブラリ MPACK 0.8.0 の紹介
  72. 72. 行列-行列積:Rgemm のパフォーマンス double-double 精度 on NVIDIA C2050 CUDA さまざまなバージョンを用いた比較。 Rgemm (double-doule) QuadADD-IEEE, QuadMul-FMA performance on NVIDIA C2050 16600 16400 16200 16000 15800 FLOPS 15600 15400 15200 CUDA 3.1 15000 CUDA 3.2 CUDA 4.0 14800 CUDA 4.2 CUDA 5.0 14600 1534 1535 1536 1537 1538 1539 1540 Dimension 中田 真秀 高精度線形代数演算ライブラリ MPACK 0.8.0 の紹介
  73. 73. コレスキー分解:Rportf パフォーマンス double-double 精度 on NVIDIA C2050 コレスキー分解分解を行った。Rgemm の加速によりコレスキー 分解も加速される。 Rpotrf performance by NVIDIA C2050 (Note: gpued Rgemm only) 1000 900 800 700 600 FLOPS 500 400 300 200 host upper CUDA upper (Gemm only) 100 host lower CUDA lower (Gemm only) 0 0 100 200 300 400 500 600 700 800 900 1000 Dimension 中田 真秀 高精度線形代数演算ライブラリ MPACK 0.8.0 の紹介
  74. 74. 対称固有値問題: Rsyev のパフォーマンスon Intel Core i7 920 (2.6GHz) / Ubuntu 10.04 / gcc 4.4.3Rsyev のパフォーマンス (300x300 の対称行列、固有値、固有ベ クトルを求める、秒) AX = diag[λ1 , λ2 , · · · λ N ]X MP Library(sign. digs.) seconds DD(32) 2.4 QD(64) 25.6 GMP(77) 36.9 MPFR(77) 78.9 GMP(154) 64.0 MPFR(154) 111 GotoBLAS(16) 0.1 中田 真秀 高精度線形代数演算ライブラリ MPACK 0.8.0 の紹介
  75. 75. 高精度線形代数演算ライブラリ 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 の紹介
  76. 76. 今後やりたいこと/やりたくないこと精度保証の研究成果の取り込み。LAPACK の実装されてない関数の実装。疎行列、高速フーリエ変換 (FFT) の API の策定。QPBLAS GPU の取り込み。区間演算はやらない。 中田 真秀 高精度線形代数演算ライブラリ MPACK 0.8.0 の紹介

×