Javaによる 数 値 計 算 のすすめ 九 州 工 業 大 学 大 学 院 情 報 工 学 研 究 院 古 賀 雅 伸 古 賀 雅 伸 ( 九 州 工 業 大 学 ) オープンソースカンファレンス2009 福 岡 2009 年 12 月 5 日 1/67
はじめに Javaは 遅 い? 速 い? JavaとCのベンチマーク JITとAOTとLLVM 目 次 Javaによる 数 値 計 算 に 関 する 情 報 書 籍 ( 日 本 語 英 語 ) ライブラリ Javaによる 数 値 計 算 の 応 用 数 値 シミュレーション 高 品 質 数 値 計 算 まとめ 古 賀 雅 伸 ( 九 州 工 業 大 学 ) オープンソースカンファレンス2009 福 岡 2009 年 12 月 5 日 2/67
はじめに 目 次 Javaは 遅 い? 速 い? JavaとCのベンチマーク JITとAOTとLLVM Javaによる 数 値 計 算 に 関 する 情 報 書 籍 ( 日 本 語 英 語 ) ライブラリ Javaによる 数 値 計 算 の 応 用 数 値 シミュレーション 高 品 質 数 値 計 算 まとめ 古 賀 雅 伸 ( 九 州 工 業 大 学 ) オープンソースカンファレンス2009 福 岡 2009 年 12 月 5 日 3/67
数 値 計 算 に 用 いるプログラミング 言 語 汎 用 言 語 手 続 き 指 向 Fortran C 言 語 Java C++ オブジェクト 指 向 要 求 Matlab Mathematica Scilab,MaTX ( 数 値 計 算 言 語 ) 広 く 普 及 した 標 準 技 術 ( 開 発 者 の 確 保 ) 大 規 模 複 雑 化 へ 対 応 可 読 性 保 守 性 に 優 れる + Modelica (モデリング 言 語 ) 特 殊 ( 専 用 ) 言 語 汎 用 言 語 オブジェクト 指 向 数 値 計 算 言 語 古 賀 雅 伸 ( 九 州 工 業 大 学 ) オープンソースカンファレンス2009 福 岡 2009 年 12 月 5 日 4/67
はじめに 目 次 Javaは 遅 い? 速 い? JavaとCのベンチマーク JITとAOTとLLVM Javaによる 数 値 計 算 に 関 する 情 報 書 籍 ( 日 本 語 英 語 ) ライブラリ Javaによる 数 値 計 算 の 応 用 数 値 シミュレーション 高 品 質 数 値 計 算 まとめ 古 賀 雅 伸 ( 九 州 工 業 大 学 ) オープンソースカンファレンス2009 福 岡 2009 年 12 月 5 日 5/67
JavaとCのベンチマーク Stefan Krause (2009.1.29) http://www.stefankrause.net/wp/?p=4 問 題 ( 入 出 力 無 し 文 字 列 処 理 無 し) Mandelbrot, NBody, Spectralnorm ( 実 数 ) Frannkuch ( 整 数 ) 10 回 測 定 した 平 均 Javaでは2 回 目 以 降 使 用 (JITの 起 動 コスト 無 し) 実 行 環 境 CPU: Intel Core 2 Duo 2GHz, RAM: 2GB OS: Ubunto 7.04 32Bit 古 賀 雅 伸 ( 九 州 工 業 大 学 ) オープンソースカンファレンス2009 福 岡 2009 年 12 月 5 日 6/67
Java 環 境 とC 環 境 Java C Sun JDK 6u2, Sun JDK 7b20 IBM JDK 5, Oracle JRockit JDK 6 R 27.3.1 -serverオプション gcc 4.2.1 -mfpmath=387 -march=native -O3... -mfpmath=sse -march=native -O3... Intels ICC 10.0 -xt -fast 古 賀 雅 伸 ( 九 州 工 業 大 学 ) オープンソースカンファレンス2009 福 岡 2009 年 12 月 5 日 7/67
Mandelbrot 速 い icc > gcc(387) > JRockit > jdk7 > jdk6 > gcc(sse) 古 賀 雅 伸 ( 九 州 工 業 大 学 ) オープンソースカンファレンス2009 福 岡 2009 年 12 月 5 日 8/67
Spectalnorm 速 い JRockit > icc > IBM jdk5 > gcc(sse) > jdk7 > jdk6 古 賀 雅 伸 ( 九 州 工 業 大 学 ) オープンソースカンファレンス2009 福 岡 2009 年 12 月 5 日 9/67
NBody 速 い jdk7 > icc > gcc(sse) > gcc(387) > JRockit > jdk6 古 賀 雅 伸 ( 九 州 工 業 大 学 ) オープンソースカンファレンス2009 福 岡 2009 年 12 月 5 日 10/67
Frannkuch 速 い icc > JRockit > gcc(sse) > gcc(387) > IBM jdk > jdk7 古 賀 雅 伸 ( 九 州 工 業 大 学 ) オープンソースカンファレンス2009 福 岡 2009 年 12 月 5 日 11/67
ベンチマーク 結 論 ICCはGCCより 速 い ICCは 無 難 な 選 択 Oracle JRockit JDKは 最 も 早 いJDK JDK7はJDK6より 速 い CとJavaの 速 さは 同 程 度 古 賀 雅 伸 ( 九 州 工 業 大 学 ) オープンソースカンファレンス2009 福 岡 2009 年 12 月 5 日 12/67
JITとAOTとLLVM ソース コード (.java) 実 行 前 Javaコンパイラ 他 言 語 の ソース コード 実 行 前 実 行 前 実 行 前 バイト コード (.class) 中 間 コード Ahead-of -Time コンパイラ 実 行 中 Just-In-Time コンパイラ 実 行 中 実 行 中 フロントエンド LLVM バックエンド 実 行 前 ネイティブ コード 参 考 :http://www.shudo.net/article/fedora-core-expert-200507-gcj/ 古 賀 雅 伸 ( 九 州 工 業 大 学 ) オープンソースカンファレンス2009 福 岡 2009 年 12 月 5 日 13/67
JITとAOTとLLVMの 比 較 JIT(Just In Time)( 実 行 )コンパイラ Sun JDK Oracle JRockit IBM JDK Apache Harmony AOT(Ahead Of Time)( 事 前 )コンパイラ Excelsior JET GNU Compiler for Java LLVM(Lower Level Virtual Machine)コンパイラ フロントエンド( 中 間 コード 生 成 ) 最 適 化 バックエンド( 機 械 コード 生 成 ) 最 適 化 古 賀 雅 伸 ( 九 州 工 業 大 学 ) オープンソースカンファレンス2009 福 岡 2009 年 12 月 5 日 14/67
ベンチマーク 実 行 方 法 Stefan Krause (2008.7.7) http://www.stefankrause.net/wp/?p=9 問 題 ( 入 出 力 無 し 文 字 列 処 理 無 し) Mandelbrot, NBody,Spectralnorm ( 実 数 ) Frannkuch ( 整 数 ) Himeno 10 回 測 定 した 平 均 Javaでは2 回 目 以 降 使 用 (JITの 起 動 コスト 無 し) 実 行 環 境 CPU: Intel Core 2 Duo 2GHz, RAM: 2GB OS: Ubunto 7.04 32Bit 古 賀 雅 伸 ( 九 州 工 業 大 学 ) オープンソースカンファレンス2009 福 岡 2009 年 12 月 5 日 15/67
実 行 環 境 JIT Sun JDK 6u2, Sun JDK 6u6 Apache Harmony m6 IBM JDK5, IBM JDK6 -serverオプション AOT gcc 4.2.3(-O3 -msse2 -march=native =mfpmath=387) Excelsior JET 6.0, JET 6.4 LLVM LLVM 2.3 (-mcpu=core2 -mattr=sse42) 古 賀 雅 伸 ( 九 州 工 業 大 学 ) オープンソースカンファレンス2009 福 岡 2009 年 12 月 5 日 16/67
Mandelbrot 速 い gcj > JDK 6 > LLVM > Harmony > JET > IBM JDK 古 賀 雅 伸 ( 九 州 工 業 大 学 ) オープンソースカンファレンス2009 福 岡 2009 年 12 月 5 日 17/67
Spectralnorm 速 い JET > LLVM > JDK 6 > IBM JDK5 > gcj > Harmony 古 賀 雅 伸 ( 九 州 工 業 大 学 ) オープンソースカンファレンス2009 福 岡 2009 年 12 月 5 日 18/67
Funnkuch 速 い LLVM > JET > gcj > IBM JDK > Harmony > JDK6 古 賀 雅 伸 ( 九 州 工 業 大 学 ) オープンソースカンファレンス2009 福 岡 2009 年 12 月 5 日 19/67
NBody 速 い JET > JDK 6 > gcj > LLVM > IBM JDK6 > Harmony 古 賀 雅 伸 ( 九 州 工 業 大 学 ) オープンソースカンファレンス2009 福 岡 2009 年 12 月 5 日 20/67
Himeno 速 い gcj > JET > LLVM > IBM JDK6 > Harmony > JDK6 古 賀 雅 伸 ( 九 州 工 業 大 学 ) オープンソースカンファレンス2009 福 岡 2009 年 12 月 5 日 21/67
5 個 のベンチマーク 結 果 の 幾 何 平 均 速 い gcj > JET > LLVM > JDK6 > IBM JDK6 > Harmony 古 賀 雅 伸 ( 九 州 工 業 大 学 ) オープンソースカンファレンス2009 福 岡 2009 年 12 月 5 日 22/67
ベンチマークの 結 論 GCJが 一 番 速 い JET6.4が 二 番 目 に 速 い LLVMは かなり 速 い Sun JDKには 不 得 意 な 処 理 がある Harmonyは 改 善 の 余 地 がある AOTやLLVMは 有 望 である 古 賀 雅 伸 ( 九 州 工 業 大 学 ) オープンソースカンファレンス2009 福 岡 2009 年 12 月 5 日 23/67
はじめに 目 次 Javaは 遅 い? 速 い? JavaとCのベンチマーク JITとAOTとLLVM Javaによる 数 値 計 算 に 関 する 情 報 書 籍 ( 日 本 語 英 語 ) ライブラリ Javaによる 数 値 計 算 の 応 用 数 値 シミュレーション 高 品 質 数 値 計 算 まとめ 古 賀 雅 伸 ( 九 州 工 業 大 学 ) オープンソースカンファレンス2009 福 岡 2009 年 12 月 5 日 24/67
Javaによる 数 値 計 算 に 関 する 情 報 (2003 年 以 前 ) Java Numerics http://math.nist.gov/javanumerics/ 1998~2003 JGF(Java Grande Forum )のNumerics WG 情 報 ベンチマーク ライブラリ ツール ユーティリティー 参 考 文 献 関 連 リンク 古 賀 雅 伸 ( 九 州 工 業 大 学 ) オープンソースカンファレンス2009 福 岡 2009 年 12 月 5 日 25/67
Javaによる 数 値 計 算 に 関 する 書 籍 ( 日 本 語 )(1/2) 1999 年 Java2による 数 値 計 算 CとJavaで 学 ぶ 数 値 シミュレーション 入 門 2000 年 Javaで 学 ぶ 数 値 計 算 2001 年 Javaによる 連 続 体 力 学 の 有 限 要 素 法 Javaによる 流 体 熱 流 動 の 数 値 シミュレーション 2003 年 Javaによるオブジェクト 指 向 数 値 計 算 法 2004 年 理 工 系 のJava Javaによる 応 用 数 値 計 算 古 賀 雅 伸 ( 九 州 工 業 大 学 ) オープンソースカンファレンス2009 福 岡 2009 年 12 月 5 日 26/67
Javaによる 数 値 計 算 に 関 する 書 籍 ( 日 本 語 )(2/2) 2005 年 線 形 代 数 とJavaプログラミン Javaで 初 等 数 学 のグラフを 描 く 本 Javaで 学 ぶ 数 値 解 析 JavaとExcelで 学 ぶシミュレーションの 基 礎 2006 年 Javaで 学 ぶシミュレーションの 基 礎 2007 年 Javaで 学 ぶ 遺 伝 的 アルゴリズ CIP 法 とJavaによるCGシミュレーション 古 賀 雅 伸 ( 九 州 工 業 大 学 ) オープンソースカンファレンス2009 福 岡 2009 年 12 月 5 日 27/67
Javaによる 数 値 計 算 に 関 する 書 籍 ( 日 本 語 ) staticメソッドによる 実 装 ベクトルと 行 列 を 配 列 で 表 現 機 能 不 足 拡 張 性 が 低 い 計 算 と 可 視 化 のコードが 混 在 古 賀 雅 伸 ( 九 州 工 業 大 学 ) オープンソースカンファレンス2009 福 岡 2009 年 12 月 5 日 28/67
Javaによる 数 値 計 算 に 関 する 書 籍 ( 英 語 )(1/2) 2000 年 Object-Oriented Implementation of Numerical Methods An Introduction with Java & Smalltalk 2002 年 The Java Programmer's Guide to Numerical Computing 2003 年 Interdisciplinary Computing in Java Programming Language A Numerical Library in Java for Scientists and Engineers 古 賀 雅 伸 ( 九 州 工 業 大 学 ) オープンソースカンファレンス2009 福 岡 2009 年 12 月 5 日 29/67
Javaによる 数 値 計 算 に 関 する 書 籍 ( 英 語 )(2/2) 2004 年 Problems & Solutions In Scientific Computing With C++ And Java Simulations 2007 年 Object-Oriented Computation in C++ And Java Digital Image Processing (An Algorithmic Introduction Using Java) 古 賀 雅 伸 ( 九 州 工 業 大 学 ) オープンソースカンファレンス2009 福 岡 2009 年 12 月 5 日 30/67
Javaによる 数 値 計 算 に 関 する 書 籍 ( 英 語 ) staticメソッドによる 実 装 ベクトルと 行 列 を 配 列 で 表 現 機 能 不 足 拡 張 性 が 低 い 単 精 度 floatのみ 古 賀 雅 伸 ( 九 州 工 業 大 学 ) オープンソースカンファレンス2009 福 岡 2009 年 12 月 5 日 31/67
Javaによる 数 値 計 算 ライブラリ 開 発 が 終 わった( 停 止?)ライブラリ Java Numerical Toolkit (~1998.5.6) JavaNumerics (1998~2003) JAMA (A JAva MAtrix Package) (1998~2005.7.13) JUMP (Java Ultimate Math Package) (~2002.6.7) JAMPACK (A JAva Matrix PACKage) (~2005.7.13) JScience (~2007.10.4) 開 発 継 続 中 のライブラリ 数 学 的 構 造 : JSci JAS 他 言 語 から 変 換 : netlib-java 商 用 : JSML 基 本 数 学 : Apache Commons Math オブジェクト 指 向 : NFC 古 賀 雅 伸 ( 九 州 工 業 大 学 ) オープンソースカンファレンス2009 福 岡 2009 年 12 月 5 日 32/67
Java Numerical Toolkit http://math.nist.gov/jnt/ NIST( 米 国 標 準 技 術 局 ) ~1998.5.6 特 殊 関 数 非 線 形 方 程 式 線 形 代 数 疎 行 列 簡 単 な 演 算 LU 分 解 QR 分 解 古 賀 雅 伸 ( 九 州 工 業 大 学 ) オープンソースカンファレンス2009 福 岡 2009 年 12 月 5 日 33/67
JAMA (A JAva MAtrix Package) http://math.nist.gov/javanumerics/jama/ 1998.8.5~2005.7.13 MathWorks 社 とNIST( 米 国 標 準 技 術 局 ) 線 形 代 数 用 ライブラリ Matrixクラス( 実 行 列 のみ 倍 精 度 四 則 演 算 ) Cholesky 分 解 ( 対 称 正 定 ) LU 分 解 ( 長 方 形 ) QR 分 解 ( 長 方 形 ) 固 有 値 ( 対 称 非 対 称 ) 特 異 値 ( 長 方 形 行 列 ) 古 賀 雅 伸 ( 九 州 工 業 大 学 ) オープンソースカンファレンス2009 福 岡 2009 年 12 月 5 日 34/67
JUMP (Java Ultimate Math Package) http://jump-math.sourceforge.net/ Ernst de Haan ~2002.6.7 任 意 精 度 整 数 任 意 精 度 実 数 有 理 数 古 賀 雅 伸 ( 九 州 工 業 大 学 ) オープンソースカンファレンス2009 福 岡 2009 年 12 月 5 日 35/67
JAMPACK (A JAva Matrix PACKage) ftp://math.nist.gov/pub/jampack/jampack/a boutjampack.html ~2005.7.13 NIST( 米 国 標 準 技 術 局 ) とMaryland 大 学 線 形 代 数 用 ライブラリ 複 素 数 行 列 のみ ピボット 付 きLU 分 解 Cholesky 分 解 QR 分 解 固 有 値 ( 対 称 一 般 ) 特 異 値 Hessenberg 形 式 Schur 分 解 古 賀 雅 伸 ( 九 州 工 業 大 学 ) オープンソースカンファレンス2009 福 岡 2009 年 12 月 5 日 36/67
JScience http://jscience.org/ ~2007.10.4 JSR-275(javax.measure)のリファレンス 実 装 数 学 的 構 造 ( 群 環 体 ベクトル 空 間 ) 複 素 数 有 理 数 多 項 式 有 理 多 項 式 任 意 精 度 整 数 任 意 精 度 実 数 複 素 行 列 疎 密 行 列 LU 分 解 古 賀 雅 伸 ( 九 州 工 業 大 学 ) オープンソースカンファレンス2009 福 岡 2009 年 12 月 5 日 37/67
JSci http://jsci.sourceforge.net/ JSci e-group 数 学 的 構 造 ( 群 環 体 ベクトル 空 間 ) 非 線 形 方 程 式 統 計 ウェーブレット 作 図 行 列 密 疎 行 列 実 行 列 のみ 四 則 演 算 LU 分 解 Cholesky 分 解 QR 分 解 固 有 値 特 異 値 古 賀 雅 伸 ( 九 州 工 業 大 学 ) オープンソースカンファレンス2009 福 岡 2009 年 12 月 5 日 38/67
JAS (Java Algebra System) http://krum.rz.uni-mannheim.de/jas/ 代 数 計 算 用 ライブラリ タイプセーフ(ジェネリクス) マルチスレッド 対 応 可 換 で 可 解 な 多 項 式 クラス 四 則 演 算 最 大 公 約 数 乱 数 古 賀 雅 伸 ( 九 州 工 業 大 学 ) オープンソースカンファレンス2009 福 岡 2009 年 12 月 5 日 39/67
netlib-java http://code.google.com/p/netlib-java/ netlib(blas, eispack, lapackなど)をf2jで 変 換 行 列 実 数 行 列 のみ 密 疎 行 列 圧 縮 行 列 LU 分 解 QR 分 解 Cholesky 分 解 固 有 値 特 異 値 古 賀 雅 伸 ( 九 州 工 業 大 学 ) オープンソースカンファレンス2009 福 岡 2009 年 12 月 5 日 40/67
Apache Commons Math http://commons.apache.org/math/ 数 学 の 基 本 的 ライブラリ データ 生 成 複 素 数 統 計 最 適 化 GA 非 線 形 方 程 式 常 微 分 方 程 式 線 形 代 数 実 行 列 のみ ブロック 行 列 疎 行 列 LU 分 解 QR 分 解 Cholesky 分 解 ( 対 称 のみ) 固 有 値 ( 対 称 のみ) 特 異 値 古 賀 雅 伸 ( 九 州 工 業 大 学 ) オープンソースカンファレンス2009 福 岡 2009 年 12 月 5 日 41/67
JMSL http://www.vnij.com/products/imsl/jmsl/jmsl.html Visual Numerics 社 の 製 品 数 値 計 算 ライブラリIMSLのJava 版 多 くの 機 能 はstaticメソッド 実 装 常 微 分 方 程 式 FFT 補 間 非 線 形 方 程 式 線 形 計 画 法 回 帰 分 析 フィルタ 行 列 ベクトルと 行 列 データを 配 列 で 表 現 疎 行 列 複 素 行 列 倍 精 度 四 則 演 算 LU 分 解 QR 分 解 Cholesky 分 解 固 有 値 特 異 値 古 賀 雅 伸 ( 九 州 工 業 大 学 ) オープンソースカンファレンス2009 福 岡 2009 年 12 月 5 日 42/67
NFC(Numerical Foundation Classes) http://jamox.mklab.org/ 九 州 工 業 大 学 古 賀 研 究 室 オブジェクト 指 向 設 計 日 本 語 Javadoc(http://jamox.mklab.org/doc/javadoc/) 線 形 方 程 式 非 線 形 方 程 式 常 微 分 方 程 式 FFT 信 号 処 理 制 御 系 設 計 汎 用 数 値 型 複 素 数 多 項 式 有 理 多 項 式 行 列 汎 用 数 値 型 を 成 分 とする 行 列 四 則 演 算 LU 分 解 QR 分 解 Chelesky 分 解 固 有 値 一 般 化 固 有 値 特 異 値 古 賀 雅 伸 ( 九 州 工 業 大 学 ) オープンソースカンファレンス2009 福 岡 2009 年 12 月 5 日 43/67
NFCの 汎 用 数 値 クラス NumericalMatrixOperator 行 列 DoubleMatrix NumericalMatrix スカラー double NumericalScalar DoubleNumber MPFloat 任 意 精 度 スカラー double ExFloat Exflib 古 賀 雅 伸 ( 九 州 工 業 大 学 ) オープンソースカンファレンス2009 福 岡 2009 年 12 月 5 日 44/67
はじめに 目 次 Javaは 遅 い? 速 い? JavaとCのベンチマーク JITとAOTとLLVM Javaによる 数 値 計 算 に 関 する 情 報 書 籍 ( 日 本 語 英 語 ) ライブラリ Javaによる 数 値 計 算 の 応 用 数 値 シミュレーション 高 品 質 数 値 計 算 まとめ 古 賀 雅 伸 ( 九 州 工 業 大 学 ) オープンソースカンファレンス2009 福 岡 2009 年 12 月 5 日 45/67
Jamox (http://jamox.mklab.org/) 制 御 系 モデリング シミュレーションツール モデリング モデル 作 成 GUI(SWT JFace Batik) データのXML 保 存 読 込 (JAXB) システム 解 析 設 計 (Scripting API) シミュレーション 時 間 応 答 (ステップ 応 答 等 ) 周 波 数 応 答 (ボード 線 図 等 ) Jamox matj csml wheels Jpit NFC SWT JFace Batik 古 賀 雅 伸 ( 九 州 工 業 大 学 ) オープンソースカンファレンス2009 福 岡 2009 年 12 月 5 日 46/67
Jamoxの 利 用 画 面 倒 立 振 子 ドラッグ&ドロップ ユーザ 定 義 ブロック 変 数 テーブル 変 数 の 登 録 情 報 の 表 示 古 賀 雅 伸 ( 九 州 工 業 大 学 ) オープンソースカンファレンス2009 福 岡 2009 年 12 月 5 日 47/67
古 賀 雅 伸 ( 九 州 工 業 大 学 ) オープンソースカンファレンス2009 福 岡 2009 年 12 月 5 日 48/67
matj (http://matj.mklab.org/) 数 値 計 算 言 語 MaTXの 処 理 系 (http://www.matx.org/) JavaCCによる 構 文 定 義 MaTXコードからJavaコード 生 成 MaTXコードからCコード 生 成 数 値 計 算 エンジン(インタプリタ) Scripting API(JSR223)に 対 応 古 賀 雅 伸 ( 九 州 工 業 大 学 ) オープンソースカンファレンス2009 福 岡 2009 年 12 月 5 日 49/67
数 値 計 算 言 語 Matlab, Mathematica, Scilab, MaTX 行 列 を 言 語 レベルで 扱 う 事 ができる E = AB + CD ( 数 学 的 表 現 ) E = A * B + C * D; ( 数 値 計 算 言 語 ) E = A.multiply(B).add(C.multiply(D)); (Java 言 語 ) 可 読 性 保 守 性 が 高 い 古 賀 雅 伸 ( 九 州 工 業 大 学 ) オープンソースカンファレンス2009 福 岡 2009 年 12 月 5 日 50/67
Jpit (http://jpit.mklab.org/) 対 話 型 グラフ 描 画 パッケージ SWT,JFaceを 利 用 時 間 応 答 グラフ 周 波 数 応 答 グラフ グラフとパラメータが 連 動 Jamoxと 連 携 古 賀 雅 伸 ( 九 州 工 業 大 学 ) オープンソースカンファレンス2009 福 岡 2009 年 12 月 5 日 51/67
CSML (http://csml.mklab.org/) 制 御 系 モデリング 言 語 パッケージ XML Schemaでデータ 構 造 定 義 ( 妥 当 性 検 証 拡 張 性 ) JAXBを 用 いてアクセスコード 生 成 データの 相 互 変 換 Modeling Tool 1 Jamox Modeling Tool 2 制 御 系 の 標 準 データ Modeling Tool 3 古 賀 雅 伸 ( 九 州 工 業 大 学 ) オープンソースカンファレンス2009 福 岡 2009 年 12 月 5 日 52/67
はじめに 目 次 Javaは 遅 い? 速 い? JavaとCのベンチマーク JITとAOTとLLVM Javaによる 数 値 計 算 に 関 する 情 報 書 籍 ( 日 本 語 英 語 ) ライブラリ Javaによる 数 値 計 算 の 応 用 数 値 シミュレーション 高 品 質 数 値 計 算 まとめ 古 賀 雅 伸 ( 九 州 工 業 大 学 ) オープンソースカンファレンス2009 福 岡 2009 年 12 月 5 日 53/67
次 世 代 の 高 品 質 数 値 計 算 CPUの 高 速 化 利 用 可 能 メモリの 増 大 次 世 代 の 数 値 計 算 高 精 度 + 品 質 保 証 高 品 質 数 値 計 算 古 賀 雅 伸 ( 九 州 工 業 大 学 ) オープンソースカンファレンス2009 福 岡 2009 年 12 月 5 日 54/67
浮 動 小 数 点 数 の 丸 め 誤 差 古 賀 雅 伸 ( 九 州 工 業 大 学 ) オープンソースカンファレンス2009 福 岡 2009 年 12 月 5 日 55/67
多 倍 長 精 度 浮 動 小 数 点 数 ( 任 意 桁 ) 古 賀 雅 伸 ( 九 州 工 業 大 学 ) オープンソースカンファレンス2009 福 岡 2009 年 12 月 5 日 56/67
MPFloatパッケージ Java C++ MPFloat.java ExFloat.cpp JNI ExFloat.java 多 倍 長 計 算 ライブラリ Exflib Exflib: 藤 原 宏 志 ( 京 都 大 学 ) 古 賀 雅 伸 ( 九 州 工 業 大 学 ) オープンソースカンファレンス2009 福 岡 2009 年 12 月 5 日 57/67
NFCの 汎 用 数 値 クラス NumericalMatrixOperator 行 列 DoubleMatrix double NumericalMatrix NumericalScalar スカラー DoubleNumber MPFloat double ExFloat Exflib 古 賀 雅 伸 ( 九 州 工 業 大 学 ) オープンソースカンファレンス2009 福 岡 2009 年 12 月 5 日 58/67
速 度 性 能 評 価 100 100の 行 列 の 加 算 と 乗 算 倍 精 度 (10 進 16 桁 )と 多 倍 長 (10 進 115 桁 ) Window XP, Athlon 64 (1.8GHz) 数 百 倍 の 速 度 差 (JNIのオーバーヘッド) 加 算 [s] 9.59 10-2 乗 算 [s] 11.858 3.33 10-4 1.077 10-2 Java(double) MPFloat Java(double) MPFloat 古 賀 雅 伸 ( 九 州 工 業 大 学 ) オープンソースカンファレンス2009 福 岡 2009 年 12 月 5 日 59/67
古 賀 雅 伸 ( 九 州 工 業 大 学 ) オープンソースカンファレンス2009 福 岡 2009 年 12 月 5 日 60/67 精 度 性 能 評 価 (1) 1 1 1 1 1 1, 10 5 0 0 0 0 0 0 10 5 0 0 0 0 0 0 10 4 0 0 0 0 0 0 10 3 0 0 0 0 0 0 10 2 0 0 0 0 0 0 10 1 5 4 4 4 4 4 B A 25 20, 15, 10, 5,, 1 P System: 指 定 極 : 状 態 フィードバックによる 極 配 置 問 題
指 定 極 と(A-BF) 固 有 値 の 差 倍 精 度 ( 商 用 ツール) === Error of poles ( 6 x 1) === ( 1) ( 1) (-5.743007289519024e+2, 0.00000000000000e+0) ( 2) ( 2.861960362183150e+2, 4.95792925226331e+2) ( 3) ( 2.861960362183150e+2, -4.95792925226331e+2) ( 4) ( 3.986909989200000e-3, 0.00000000000000e+0) ( 5) (-3.393522412700000e-3, 0.00000000000000e+0) ( 6) ( 2.083002602000000e-4, 0.00000000000000e+0) 多 倍 長 (10 進 115 桁 ) === Error of poles ( 6 x 1) === ( 1) ( 1) ( 1.0480643517590362e-85,0.0000000000000000e+0) ( 2) (-5.2004154564111335e-83,0.0000000000000000e+0) ( 3) ( 8.2230357211239218e-82,0.0000000000000000e+0) ( 4) (-3.1250414993070453e-81,0.0000000000000000e+0) ( 5) ( 4.3707437346488162e-81,0.0000000000000000e+0) ( 6) (-2.0534137254471678e-81,0.0000000000000000e+0) 0.0038 秒 0.4008 秒 古 賀 雅 伸 ( 九 州 工 業 大 学 ) オープンソースカンファレンス2009 福 岡 2009 年 12 月 5 日 61/67
浮 動 小 数 点 数 の 丸 め 誤 差 古 賀 雅 伸 ( 九 州 工 業 大 学 ) オープンソースカンファレンス2009 福 岡 2009 年 12 月 5 日 62/67
c = a + bの 精 度 保 証 付 き 数 値 計 算 区 間 演 算 ad a au 上 向 きの 丸 め: au = a, bu = b 下 向 きの 丸 め: ad = a, bd = b bd b bu 上 限 と 下 限 : cu = (au + bu), cd = (ad + bd) cd c cu cd c cu 真 の 解 が 含 まれる( 浮 動 小 数 点 数 を 境 界 とする) 集 合 古 賀 雅 伸 ( 九 州 工 業 大 学 ) オープンソースカンファレンス2009 福 岡 2009 年 12 月 5 日 63/67
精 度 保 証 付 き 数 値 計 算 計 算 結 果 の 品 質 保 証 を 行 う 真 の 解 は 存 在 する? 近 似 解 の 精 度 は? 真 の 解 と 近 似 解 を 含 む 集 合 を 求 める 真 の 解 と 近 似 解 を 含 む 集 合 計 算 結 果 は 集 合 真 の 解 近 似 解 古 賀 雅 伸 ( 九 州 工 業 大 学 ) オープンソースカンファレンス2009 福 岡 2009 年 12 月 5 日 64/67
JCGA (Java Computing Guaranteed Accuracy) 主 要 クラス Interval IntervalMatrixクラス 区 間 演 算 区 間 行 列 演 算 LinearVerifierクラス 線 形 方 程 式 求 解 の 精 度 保 証 EigenVerifierクラス 固 有 値 問 題 の 精 度 保 証 HornerVerifierクラス 多 項 式 評 価 の 精 度 保 証 IntervalDerivativeクラス 微 分 値 の 精 度 保 証 NonLinearVerifierクラス 非 線 形 方 程 式 求 解 の 精 度 保 証 参 考 文 献 大 石 進 一 2001 精 度 保 証 付 き 数 値 計 算 コロナ 社 G. I. Hargreaves 2002 Interval Analysis in MATLAB G. I. Hargreaves 2002 Interval Analysis in MATLAB 山 本 の 定 理 : 大 石 進 一 2003 応 用 解 析 セミナー 数 値 計 算 裳 華 房 Rumpの 方 法 :Siegfried M. Rump 2000 Computational error bounds for multiple eigenvalues 山 本 の 定 理 の 応 用 : 大 石 進 一 2003 応 用 解 析 セミナー 数 値 計 算 裳 華 房 自 動 微 分 法 : 大 石 進 一 2000 Linux 数 値 計 算 ツール コロナ 社 クラフチック 法 : 大 石 進 一 2001 精 度 保 証 付 き 数 値 計 算 コロナ 社 古 賀 雅 伸 ( 九 州 工 業 大 学 ) オープンソースカンファレンス2009 福 岡 2009 年 12 月 5 日 65/67
数 値 計 算 環 境 の 構 成 信 号 処 理 制 御 設 計 精 度 指 定 計 算 GAP 多 倍 長 計 算 MPFloat 多 倍 長 計 算 Exflib 精 度 保 証 計 算 JCGA 基 盤 数 値 計 算 NFC 古 賀 雅 伸 ( 九 州 工 業 大 学 ) オープンソースカンファレンス2009 福 岡 2009 年 12 月 5 日 66/67
まとめ CとJavaの 速 さは 同 程 度 AOTやLLVMは 有 望 である 書 籍 中 のコードは 機 能 不 足 拡 張 性 が 低 い 実 用 的 なライブラリが 利 用 可 能 数 値 シミュレーションツールが 利 用 可 能 計 算 機 資 源 を 活 用 した 高 品 質 数 値 計 算 古 賀 雅 伸 ( 九 州 工 業 大 学 ) オープンソースカンファレンス2009 福 岡 2009 年 12 月 5 日 67/67