Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Features
Speaker Deck
PRO
Sign in
Sign up for free
Search
Search
#渋谷java : Java の数学関数を計算速度的に極めたい
Search
KOMIYA Atsushi
April 23, 2016
Programming
7
1.2k
#渋谷java : Java の数学関数を計算速度的に極めたい
第十五回 #渋谷java
http://shibuya-java.connpass.com/event/29113/
での発表資料です。
KOMIYA Atsushi
April 23, 2016
Tweet
Share
More Decks by KOMIYA Atsushi
See All by KOMIYA Atsushi
#JJUG Java における乱数生成器とのつき合い方
komiya_atsushi
5
5k
#JJUG Fork/Join フレームワークを効率的に正しく使いたい
komiya_atsushi
0
430
[#JSUG] SmartNews における container friendly な Spring Boot アプリケーション開発
komiya_atsushi
1
11k
Java のデータ圧縮ライブラリを極める #jjug_ccc #ccc_c7
komiya_atsushi
4
4.4k
#devsumi 自然言語処理・機械学習によるファクトチェック業務の支援
komiya_atsushi
1
4.1k
SmartNews Ads における機械学習の活用とその運用 #mlops
komiya_atsushi
3
19k
GBDT によるクリック率予測を高速化したい #オレシカナイト vol.4
komiya_atsushi
5
1.2k
Maven central repository の artifact をランキングする #渋谷java
komiya_atsushi
0
1.2k
確率的データ構造を Java で扱いたい! #JJUG
komiya_atsushi
6
2.2k
Other Decks in Programming
See All in Programming
OpenAI/Gemini APIを使って EPUBを翻訳するCLIツールをつくってみた
tomiyan
0
790
Android開発者のための Kotlin Multiplatform入門
ntaro
0
190
さきがけから振り返るアーキテクチャ刷新 / Reflecting on the Architectural Renewal from the Vanguard
nrslib
2
780
Modern Angular: Renovation for Your Applications
manfredsteyer
PRO
0
140
小さな開発会社を作った理由
polidog
0
1.9k
AWSでゲームサーバーを運用! Amazon GameLiftのお話
iriikeita
0
200
大規模マルチテナントを解決するYugabyteDBという選択肢
nnaka2992
1
250
Temporalを取り巻く仕様を整理する
sajikix
0
120
HMSコンペ 11th Solution (team : kansai-kaggler)
t88
1
680
Rustのweb開発を助ける 便利なツール紹介
yuki0418
1
190
Exploring the Gradually Lost Technical Skills in the Cloud Native Era
hwchiu
2
3.9k
君たちはどうコードをレビューする (される) か / 大吉祥寺.pm
utgwkk
15
8.5k
Featured
See All Featured
GitHub's CSS Performance
jonrohan
1026
450k
Mobile First: as difficult as doing things right
swwweet
219
8.8k
Building Adaptive Systems
keathley
34
2k
Producing Creativity
orderedlist
PRO
340
39k
Fight the Zombie Pattern Library - RWD Summit 2016
marcelosomers
228
16k
XXLCSS - How to scale CSS and keep your sanity
sugarenia
245
1.2M
Designing for humans not robots
tammielis
247
25k
What's new in Ruby 2.0
geeforr
338
31k
Refactoring Trust on Your Teams (GOTO; Chicago 2020)
rmw
29
2.5k
Optimising Largest Contentful Paint
csswizardry
18
2.6k
Let's Do A Bunch of Simple Stuff to Make Websites Faster
chriscoyier
502
140k
Adopting Sorbet at Scale
ufuk
71
8.8k
Transcript
Java ͷֶؔΛ ܭࢉతʹۃΊ͍ͨ ौ୩ Java 15th, 2016-04-23 KOMIYA Atsushi
͓·͑ͩΕΑ
KOMIYA Atsushi @komiya_atsushi
None
Spark ຊΛॻ͖·ͨ͠ͷͰ ΑΖ͚͠Εͥͻ͝ߪೖ͍ͩ͘͞ʂ
ࠓͷτϐοΫ
Java ͷֶؔ
java.lang.Math ͔Β࢝Ίͯ Java ͷֶؔͷܭࢉΛ ٻ͍͖ͯ͠·͢
Implementations of Math functions in JDK
java.lang.Math & java.lang.StrictMath
JDK ඪ४ͷֶؔ • ֶؔͷ࣮ͱͯ͠ java.lang.Math ͱ java.lang.StrictMath ͕ఏڙ͞Ε͍ͯΔ • ͦΕͧΕԿ͕ҧ͏ͷ͔ʁ
java.lang.StrictMath • https://docs.oracle.com/javase/jp/8/docs/api/java/lang/ StrictMath.html ΑΓ • ʮJavaϓϩάϥϜͷҠ২ੑΛอͭͨΊʹɺ͜ͷύοέʔδʹ͋ΔҰ ෦ͷؔͷఆٛɺطଘͷΞϧΰϦζϜͱಉҰͷܭࢉ݁ՌΛग़ ͢͜ͱ͕ٻΊΒΕ͍ͯ·͢ɻ͜͏ͨ͠ΞϧΰϦζϜɺ༗໊ͳωο τϫʔΫɾϥΠϒϥϦͰ͋Δnetlib͔ΒʮFreely
Distributable Math Libraryʯ(fdlibm)ύοέʔδͱͯ͠ೖखՄೳͰ͢ɻ͜ΕΒͷΞϧΰ ϦζϜCݴޠͰهड़͞Ε͓ͯΓɺͯ͢ͷුಈখԋࢉ͕Java ͷුಈখԋࢉϧʔϧʹै࣮ͬͯߦ͞ΕΔͷͱݟͳ͞Ε· ͢ɻʯ
java.lang.StrictMath • ҟͳΔϓϥοτϑΥʔϜ (OS, CPU ͳͲ) ʹ ͓͍ͯɺϏοτύλʔϯͷϨϕϧͰಉ݁͡Ռ ͕ฦ͞ΕΔ͜ͱ (࠶ݱੑ)
͕อূ͞Ε͍ͯΔ • ੑೳೋͷ࣍
java.lang.Math • https://docs.oracle.com/javase/jp/8/docs/api/ java/lang/Math.html ΑΓ • ʮStrictMathΫϥεͷҰ෦ͷϝιουͱҟͳ ΓɺMathΫϥεͷՁؔͷͯ͢ͷ࣮ɺ ϏοτରϏοτͷಉ݁͡ՌΛฦ͢Α͏ʹఆٛ͞Ε ͍ͯ·ͤΜɻ͜ͷΏΔ͔͞ʹΑͬͯɺݫີͳ࠶ݱ
ੑ͕ཁٻ͞Εͳ͍࣮ʹ͓͍ͯύϑΥʔϚϯεͷ ্͕ՄೳʹͳΓ·͢ɻʯ
java.lang.Math • CPU ʹґଘ໋ͨ͠ྩͳͲར༻͠ͳ͕Βɺ ΑΓΑ͍ੑೳΛఏڙ͢Δ • ͨͩ͠ʮਖ਼֬͞ʯΛ٘ਜ਼ʹ͢ΔΘ͚Ͱͳ͍ • ࣮༷తʹʮਖ਼֬͞ʯʮ୯ௐੑʯ͕ཁٻ ͞Ε͍ͯΔ
Alternatives of java.lang.Math
commons-math3 org.apache.commons:commons-math3:3.6.1
commons-math3 • FastMath Ϋϥε͕ఏڙ͞Ε͍ͯΔ • java.lang.Math ͱಉ͡ϝιουߏ • ΑΓ͘ɺ͔ͭਫ਼͕ߴ͍͜ͱΛᨳ͍ͬͯΔ •
JIT ʹΑΔ࠷దԽΛલఏͱ͠ɺ·ͨେ͖Ίͷ ϧοΫΞοϓςʔϒϧΛར༻ͯ͠ߴԽΛਤͬ ͍ͯΔ
jafama net.jafama:jafama:2.1.0
jafama • ͪ͜Β FastMath Ϋϥε͕ఏڙ͞Ε͍ͯΔ • 1e-15 (0.000000000000001) ͷਫ਼Β͍͠ •
JIT ʹΑΔ࠷దԽΛલఏͱ͍ͯ͠Δ • ਫ਼Λ٘ਜ਼ʹͨ͠ɺֶؔͷߴ࣮ఏڙ͞ Ε͍ͯΔ • xxxQuick() ͷΑ͏ʹɺ”Quick” ͷαϑΟοΫε͕ ͍͍ͯΔ
Comparison: performance
ܭࢉͷൺֱ • java.lang.Math ͱ commons-math3, jafama ͱΛൺֱ͢Δ • jmh ͰεϧʔϓοτΛܭଌ͢Δ
• ࣍ͷֶؔͦΕͧΕʹ͍ͭͯܭଌ͢Δ • log, log1p, exp, tanh, pow, sqrt • ػցֶशͷ࣮ʹͯΑ͘ར༻͢Δؔ܈Ͱ͢ • ֶؔʹɺεέʔϧͷҟͳΔҾΛෳ༻ҙ͢Δ • ಛఆͷ (۠ؒ) ʹରԠͨ͠࠷దԽ࣮͕͞Ε͍ͯΔ߹ ͕͋ΔͨΊ
ϕϯνϚʔΫϓϩάϥϜ https://github.com/komiya-atsushi/ java-playground/tree/master/math- functions
log
log • commons-math3 ͕಄ͻͱͭൈ͖Μग़͍ͯΔ • 1.234 ͷҾΛ༩͑ͨͱ͖ͷੑೳ͕ҟৗత ʹඈͼൈ͚͍ͯΔ͚Ͳɺ͜ΕΘΓͱී௨ Ͱ͢ •
jafama ͱ jdk ΄΅ಉ͡ੑೳ
log1p
log1p • log ͱҟͳΓɺjafama ͕ѹతʹΑ͍ • jdk ͱ commons-math3 େࠩͳ͍͕ɺ
jdk > commons-math3 Ͱ͋Δ • commons-math3 ͷ log ͷ݁ՌԿͩͬͨ ͷ͔…
exp
exp • commons-math3, jafama ͱʹɺҾ͕େ͖ ͘ͳΔʹͭΕͯੑೳ͕ߴ·Δ • ಛʹ jafama શൠతʹੑೳ͕Α͍
• ҰํͰ jdk …
tanh
tanh • ͍ͣΕͷ࣮ɺҾͷεέʔϧ͕େ͖͘ͳ Δͱɺੑೳ͕Α͘ͳΔ • jafama > commons-math3 > jdk
sqrt
sqrt • େࠩͳ͍ • ͲΕΛͬͯ΄ͱΜͲಉ͡
pow
pow • jafama ϐʔΩʔͰ͋Δ͕ɺશମతʹ༏Ε͍ͯ Δ • jdk ϐʔΩʔա͗Δ • power
͕খ͍͞߹ commons-math3 ΑΓ Α͍ੑೳͰ͋Δ • commons-math3 ຌ༱
Comparison: accuracy
ܭࢉਫ਼ͷൺֱ • java.lang.StrictMath ʹ͓͚Δ࣮ͷΓͱൺֱ͢Δ • (StrictMath ͷ͕ਖ਼͍͠Θ͚Ͱͳ͍ͷ͕ͩ…) • Γಉ࢜ͷࠩʹର͠ɺStrictMath ଆͷΓΛ
ͱׂͯ͠߹Λܭࢉ͢Δ • ͦͷׂ߹ͷฏۉઈରͱ࠷େͰਫ਼ΛݟͯΈΔ • Ҿͷݻఆͤͣɺཚੜͨ͠ͷΛ༩͑Δ
Result: average DPNNPOTNBUI KBGBNB MPH & & MPHQ & &
FYQ & & UBOI & & TRSU & &
Result: maximum DPNNPOTNBUI KBGBNB MPH & & MPHQ & &
FYQ & & UBOI & & TRSU & &
Result • ͍ͣΕʹ͓͍ͯɺେ͖ͳࠩҟ͕͋ΔΘ͚Ͱ ͳ͍ • 1e-15 ͷਫ਼อূͰ͖ͦ͏ • jafama ʹ͍ͭͯɺStrictMath
ͷΓͱҟ ͳΔ͜ͱ͕ଟ͍ʹ͋Γͦ͏
Conclusion
·ͱΊ • ʮۜͷؙଘࡏ͠ͳ͔ͬͨʯ • “FastMath” ͱ໊͍ͬͯͯɺͯ͢ͷֶؔ ͷ࣮ʹ͓͍ͯ JDK ͷ࣮ΑΓ༏Ε͍ͯΔɺͱ ͍͏Θ͚Ͱͳ͍
• ·ͨɺֶؔʹ༩͑ΔҾ࣍ୈͰੑೳ͕େ͖͘ҟΔ ͜ͱ͋Γ͏Δ • ϢʔεέʔεʹԠͯ͡ɺ֤छ࣮Λ͍͚Δ͜ͱ͕ ඞཁ
Thank you!