Upgrade to Pro — share decks privately, control downloads, hide ads and more …

#渋谷java : Java の数学関数を計算速度的に極めたい

#渋谷java : Java の数学関数を計算速度的に極めたい

第十五回 #渋谷java http://shibuya-java.connpass.com/event/29113/ での発表資料です。

KOMIYA Atsushi

April 23, 2016
Tweet

More Decks by KOMIYA Atsushi

Other Decks in Programming

Transcript

  1. commons-math3 • FastMath Ϋϥε͕ఏڙ͞Ε͍ͯΔ • java.lang.Math ͱಉ͡ϝιουߏ੒ • ΑΓ଎͘ɺ͔ͭਫ਼౓͕ߴ͍͜ͱΛᨳ͍ͬͯΔ •

    JIT ʹΑΔ࠷దԽΛલఏͱ͠ɺ·ͨେ͖Ίͷ ϧοΫΞοϓςʔϒϧΛར༻ͯ͠ߴ଎ԽΛਤͬ ͍ͯΔ
  2. jafama • ͪ͜Β΋ FastMath Ϋϥε͕ఏڙ͞Ε͍ͯΔ • 1e-15 (0.000000000000001) ͷਫ਼౓Β͍͠ •

    JIT ʹΑΔ࠷దԽΛલఏͱ͍ͯ͠Δ • ਫ਼౓Λ٘ਜ਼ʹͨ͠ɺ਺ֶؔ਺ͷߴ଎࣮૷΋ఏڙ͞ Ε͍ͯΔ • xxxQuick() ͷΑ͏ʹɺ”Quick” ͷαϑΟοΫε͕ ෇͍͍ͯΔ
  3. ܭࢉ଎౓ͷൺֱ • java.lang.Math ͱ commons-math3, jafama ͱΛൺֱ͢Δ • jmh ͰεϧʔϓοτΛܭଌ͢Δ

    • ࣍ͷ਺ֶؔ਺ͦΕͧΕʹ͍ͭͯܭଌ͢Δ • log, log1p, exp, tanh, pow, sqrt • ػցֶशͷ࣮૷ʹͯΑ͘ར༻͢Δؔ਺܈Ͱ͢ • ਺ֶؔ਺ʹ͸ɺεέʔϧͷҟͳΔҾ਺Λෳ਺༻ҙ͢Δ • ಛఆͷ਺஋ (۠ؒ) ʹରԠͨ͠࠷దԽ࣮૷͕͞Ε͍ͯΔ৔߹ ͕͋ΔͨΊ
  4. log

  5. log1p • log ͱ͸ҟͳΓɺjafama ͕ѹ౗తʹΑ͍ • jdk ͱ commons-math3 ͸େࠩ͸ͳ͍͕ɺ


    jdk > commons-math3 Ͱ͋Δ • commons-math3 ͷ log ͷ݁Ռ͸Կͩͬͨ ͷ͔…
  6. exp

  7. pow

  8. pow • jafama ͸ϐʔΩʔͰ͸͋Δ͕ɺશମతʹ༏Ε͍ͯ Δ • jdk ΋ϐʔΩʔա͗Δ • power

    ͕খ͍͞৔߹͸ commons-math3 ΑΓ΋ Α͍ੑೳͰ͸͋Δ • commons-math3 ͸ຌ༱
  9. ܭࢉਫ਼౓ͷൺֱ • java.lang.StrictMath ʹ͓͚Δ࣮૷ͷ໭Γ஋ͱൺֱ͢Δ • (StrictMath ͷ஋͕ਖ਼͍͠Θ͚Ͱ΋ͳ͍ͷ͕ͩ…) • ໭Γ஋ಉ࢜ͷࠩ෼ʹର͠ɺStrictMath ଆͷ໭Γ஋Λ

    ෼฼ͱׂͯ͠߹Λܭࢉ͢Δ • ͦͷׂ߹ͷฏۉઈର஋ͱ࠷େ஋Ͱਫ਼౓ΛݟͯΈΔ • Ҿ਺ͷ஋͸ݻఆͤͣɺཚ਺ੜ੒ͨ͠΋ͷΛ༩͑Δ
  10. Result: average DPNNPOTNBUI KBGBNB MPH & & MPHQ & &

    FYQ & & UBOI &  &  TRSU &  & 
  11. Result: maximum DPNNPOTNBUI KBGBNB MPH & & MPHQ & &

    FYQ & & UBOI &  &  TRSU &  & 
  12. ·ͱΊ • ʮۜͷ஄ؙ͸ଘࡏ͠ͳ͔ͬͨʯ • “FastMath” ͱ໊৐͍ͬͯͯ΋ɺ͢΂ͯͷ਺ֶؔ਺ ͷ࣮૷ʹ͓͍ͯ JDK ͷ࣮૷ΑΓ΋༏Ε͍ͯΔɺͱ ͍͏Θ͚Ͱ͸ͳ͍

    • ·ͨɺ਺ֶؔ਺ʹ༩͑ΔҾ਺࣍ୈͰੑೳ͕େ͖͘ҟΔ ͜ͱ΋͋Γ͏Δ • ϢʔεέʔεʹԠͯ͡ɺ֤छ࣮૷Λ࢖͍෼͚Δ͜ͱ͕ ඞཁ