高速Math.exp()によJNI?
-
09-06-2019 - |
質問
かを計算する必要があり Math.exp()
javaに使用可能でネイティブのバージョンを実行 java's Math.exp()
??
ただjni+Cがより遅いだ java.
解決
+1を書き独自のexp()の実装です。この場合には 本当に ボトルネックにします。場合に対処することができ少しの誤りが非常に効率的な指数を推定アルゴリズムであり、さかのぼしています。私の理解では、Javaのexp()の実装はかなり遅いもののためのアルゴリズムを返さなければなり"正確な"。
ああ、やることを恐れてはいけない書けるexp()の実装は純-Java.JNIのオーバーヘッドのJVMできる最適化bytecode実行時にも超えてC/C++できる。
他のヒント
Javaです。
また、キャッシュの結果expを見ることができる答えをより算定しています。
またラップなループの呼び出し Math.exp()
Cます。その他、オーバーヘッドの整列化の間にJava、Cを圧倒するパフォーマンスです。
ることができるかもしれませんでくださいバッチ.作JNI呼び追加のオーバーヘッドをなくしたいので各exp()必要なものを算出いたします。私が通し配列の100の価値を結合します。
現実の問題は、このなのでしょう。いまの為に、この大きな原因のが遅いのは、下記のうちどれですか。
ない場合は、使用をお勧めのJavaのバージョン。そうしないとの事前の最適化としてこれだけが開発のスピードが鈍化していくひとときをお過ごしくださいの時間に関する問題にはならない場合があります。
うすればいいのかと思うのでお試しい答えです。場合はjni+Cが遅くなり、javaのバージョン。
コモンズMath3 船舶の最適なバージョン: FastMath.exp(double x)
.また高速自分のコードできます。
Fabien た検査の一部で、そのほとんどの倍速 Math.exp()
:
0.75s for Math.exp sum=1.7182816693332244E7
0.40s for FastMath.exp sum=1.7182816693332244E7
こちらはjavadoc:
計算exp(x)の関数の結果は、ほぼ四捨五入で表示。ますので正しく丸めるための理論値は99.9%の入力値、そうでないで1UPLエラーになります。
方法:
Lookup intVal = exp(int(x))
Lookup fracVal = exp(int(x-int(x) / 1024.0) * 1024.0 );
Compute z as the exponential of the remaining bits by a polynomial minus one
exp(x) = intVal * fracVal * (1 + z)
精度:計算を行うこととなり63ビットの精密な結果は正しく丸めを99.9%の入力値により1ULPエラーです。
以降のJavaコードを取得しまとめるネイティブコードのイム(JIT)コンパイラが本当に理由はないJNIを使って呼びネイティブコードです。
また、なんかキャッシュの結果の場合でも、入力パラメータ浮動小数点実数.を得て、得られた時間も失われた額のスペースを使います。
題にJNIの回路オーバーヘッドの呼び出JNI.Java仮想マシンには最適なこの日、電話を内蔵している。exp()自動的に最適化された通話を、C exp()関数やかでも最適化することへの直x87浮動小数点の組み立てください。
あけにまつわるオーバーヘッドを使用は、JNI参照:http://java.sun.com/docs/books/performance/1st_edition/html/JPNativeCode.fm.html
ないことを示唆して照合作業を伴うのJNI.
書には、柔軟性をもたらします。
例えば、全ての指数の電力の使用ビット変わっています。また限られた範囲またはセット値を使用できまとめあげます。必要がなければピンポイント精度でのご使用を不正確に、高速アルゴリズムです。
がありコストを呼び出しのJNI境界線。
だが、ループとの通話exp()は、ネイティブコードなどがあることでネイティブ、それがでる場合がありますが、より良い結果がんにおける合意により、純粋なJavaます。
私は非常に良いのではないかと思いのアプリケーションですが、だいてかなり限定セットの引数の通話を使用できる計算したテーブルをJavaのコードが速くなります。
が高速化アルゴリズムのexpように自分ける国での生活を経験しました。が問題なの空間に限られる範囲で、する必要がある特定の分解能、精度、正確性等
設定されていない場合は問題を非常によく目にすることでしょう利用できるテーブル補間のためのインスタンスには、ブロー近くの他のアルゴリズム。
何の制約での申し込みexp得る可能性が貿易-。
-アダム
まィアルゴリズムと最小のエラーの取り付けて使用すると、結果は大きい 以上の精度Math.exp().
超越論的機能もよりもっとずっとスローな加又は増殖で有名なボトルネックです。されることがわかってい値は狭い範囲で構築のルックアップ-テーブル(レッ;入力、出力)です。利用Arrays.binarySearchス指数を補完す価値の要素で[インデックス]と[インデックス+1]です。
もう一つの方法は分割多くの注目を集めています。きかなど3.81び割れ3+0.81.現在で掛け算するe=2.718時20.08.
今0.81.すべての値を0から1の間の収束の高速知られた指数シリーズ
1+x+x^2/2期+x^3/6+x^4/24....など。
く条件として必要な精度残念ながらでは遅いの場合、xの手法1.でいまx^4,その2.2445の代わりに、正しい2.2448
それぞれの結果2.781^3=20.08と2.781^0.81=2.2445ときの結果 45.07エラーの一部が、二千(修正:45.15).