Slide 1

Slide 1 text

Java ͷ਺ֶؔ਺Λ ܭࢉ଎౓తʹۃΊ͍ͨ ौ୩ Java 15th, 2016-04-23 KOMIYA Atsushi

Slide 2

Slide 2 text

͓·͑ͩΕΑ

Slide 3

Slide 3 text

KOMIYA Atsushi @komiya_atsushi

Slide 4

Slide 4 text

No content

Slide 5

Slide 5 text

Spark ຊΛॻ͖·ͨ͠ͷͰ ΑΖ͚͠Ε͹ͥͻ͝ߪೖ͍ͩ͘͞ʂ

Slide 6

Slide 6 text

ࠓ೔ͷτϐοΫ

Slide 7

Slide 7 text

Java ͷ਺ֶؔ਺

Slide 8

Slide 8 text

java.lang.Math ͔Β࢝Ίͯ Java ͷ਺ֶؔ਺ͷܭࢉ଎౓Λ ௥ٻ͍͖ͯ͠·͢

Slide 9

Slide 9 text

Implementations of Math functions in JDK

Slide 10

Slide 10 text

java.lang.Math & java.lang.StrictMath

Slide 11

Slide 11 text

JDK ඪ४ͷ਺ֶؔ਺ • ਺ֶؔ਺ͷ࣮૷ͱͯ͠ java.lang.Math ͱ java.lang.StrictMath ͕ఏڙ͞Ε͍ͯΔ • ͦΕͧΕԿ͕ҧ͏ͷ͔ʁ

Slide 12

Slide 12 text

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 ͷුಈখ਺఺ԋࢉϧʔϧʹै࣮ͬͯߦ͞ΕΔ΋ͷͱݟͳ͞Ε· ͢ɻʯ

Slide 13

Slide 13 text

java.lang.StrictMath • ҟͳΔϓϥοτϑΥʔϜ (OS, CPU ͳͲ) ʹ
 ͓͍ͯɺϏοτύλʔϯͷϨϕϧͰಉ݁͡Ռ ͕ฦ͞ΕΔ͜ͱ (࠶ݱੑ) ͕อূ͞Ε͍ͯΔ • ଎౓ੑೳ͸ೋͷ࣍

Slide 14

Slide 14 text

java.lang.Math • https://docs.oracle.com/javase/jp/8/docs/api/ java/lang/Math.html ΑΓ • ʮStrictMathΫϥεͷҰ෦ͷ਺஋ϝιουͱ͸ҟͳ ΓɺMathΫϥεͷ౳Ձؔ਺ͷ͢΂ͯͷ࣮૷͸ɺ ϏοτରϏοτͷಉ݁͡ՌΛฦ͢Α͏ʹ͸ఆٛ͞Ε ͍ͯ·ͤΜɻ͜ͷΏΔ΍͔͞ʹΑͬͯɺݫີͳ࠶ݱ ੑ͕ཁٻ͞Εͳ͍࣮૷ʹ͓͍ͯύϑΥʔϚϯεͷ ޲্͕ՄೳʹͳΓ·͢ɻʯ

Slide 15

Slide 15 text

java.lang.Math • CPU ʹґଘ໋ͨ͠ྩͳͲ΋ར༻͠ͳ͕Βɺ
 ΑΓΑ͍଎౓ੑೳΛఏڙ͢Δ • ͨͩ͠ʮਖ਼֬͞ʯΛ٘ਜ਼ʹ͢ΔΘ͚Ͱ͸ͳ͍ • ࣮૷࢓༷తʹ͸ʮਖ਼֬͞ʯʮ୯ௐੑʯ͕ཁٻ ͞Ε͍ͯΔ

Slide 16

Slide 16 text

Alternatives of java.lang.Math

Slide 17

Slide 17 text

commons-math3 org.apache.commons:commons-math3:3.6.1

Slide 18

Slide 18 text

commons-math3 • FastMath Ϋϥε͕ఏڙ͞Ε͍ͯΔ • java.lang.Math ͱಉ͡ϝιουߏ੒ • ΑΓ଎͘ɺ͔ͭਫ਼౓͕ߴ͍͜ͱΛᨳ͍ͬͯΔ • JIT ʹΑΔ࠷దԽΛલఏͱ͠ɺ·ͨେ͖Ίͷ ϧοΫΞοϓςʔϒϧΛར༻ͯ͠ߴ଎ԽΛਤͬ ͍ͯΔ

Slide 19

Slide 19 text

jafama net.jafama:jafama:2.1.0

Slide 20

Slide 20 text

jafama • ͪ͜Β΋ FastMath Ϋϥε͕ఏڙ͞Ε͍ͯΔ • 1e-15 (0.000000000000001) ͷਫ਼౓Β͍͠ • JIT ʹΑΔ࠷దԽΛલఏͱ͍ͯ͠Δ • ਫ਼౓Λ٘ਜ਼ʹͨ͠ɺ਺ֶؔ਺ͷߴ଎࣮૷΋ఏڙ͞ Ε͍ͯΔ • xxxQuick() ͷΑ͏ʹɺ”Quick” ͷαϑΟοΫε͕ ෇͍͍ͯΔ

Slide 21

Slide 21 text

Comparison: performance

Slide 22

Slide 22 text

ܭࢉ଎౓ͷൺֱ • java.lang.Math ͱ commons-math3, jafama ͱΛൺֱ͢Δ • jmh ͰεϧʔϓοτΛܭଌ͢Δ • ࣍ͷ਺ֶؔ਺ͦΕͧΕʹ͍ͭͯܭଌ͢Δ • log, log1p, exp, tanh, pow, sqrt • ػցֶशͷ࣮૷ʹͯΑ͘ར༻͢Δؔ਺܈Ͱ͢ • ਺ֶؔ਺ʹ͸ɺεέʔϧͷҟͳΔҾ਺Λෳ਺༻ҙ͢Δ • ಛఆͷ਺஋ (۠ؒ) ʹରԠͨ͠࠷దԽ࣮૷͕͞Ε͍ͯΔ৔߹ ͕͋ΔͨΊ

Slide 23

Slide 23 text

ϕϯνϚʔΫϓϩάϥϜ https://github.com/komiya-atsushi/ java-playground/tree/master/math- functions

Slide 24

Slide 24 text

log

Slide 25

Slide 25 text

log • commons-math3 ͕಄ͻͱͭൈ͖Μग़͍ͯΔ • 1.234 ͷҾ਺Λ༩͑ͨͱ͖ͷੑೳ͕ҟৗ஋త ʹඈͼൈ͚͍ͯΔ͚Ͳɺ͜Ε͸ΘΓͱී௨ Ͱ͢ • jafama ͱ jdk ͸΄΅ಉ͡ੑೳ

Slide 26

Slide 26 text

log1p

Slide 27

Slide 27 text

log1p • log ͱ͸ҟͳΓɺjafama ͕ѹ౗తʹΑ͍ • jdk ͱ commons-math3 ͸େࠩ͸ͳ͍͕ɺ
 jdk > commons-math3 Ͱ͋Δ • commons-math3 ͷ log ͷ݁Ռ͸Կͩͬͨ ͷ͔…

Slide 28

Slide 28 text

exp

Slide 29

Slide 29 text

exp • commons-math3, jafama ͱ΋ʹɺҾ਺͕େ͖ ͘ͳΔʹͭΕͯੑೳ͕ߴ·Δ • ಛʹ jafama ͸શൠతʹੑೳ͕Α͍ • ҰํͰ jdk ͸…

Slide 30

Slide 30 text

tanh

Slide 31

Slide 31 text

tanh • ͍ͣΕͷ࣮૷΋ɺҾ਺ͷεέʔϧ͕େ͖͘ͳ Δͱɺੑೳ͕Α͘ͳΔ • jafama > commons-math3 > jdk

Slide 32

Slide 32 text

sqrt

Slide 33

Slide 33 text

sqrt • େࠩͳ͍ • ͲΕΛ࢖ͬͯ΋΄ͱΜͲಉ͡

Slide 34

Slide 34 text

pow

Slide 35

Slide 35 text

pow • jafama ͸ϐʔΩʔͰ͸͋Δ͕ɺશମతʹ༏Ε͍ͯ Δ • jdk ΋ϐʔΩʔա͗Δ • power ͕খ͍͞৔߹͸ commons-math3 ΑΓ΋ Α͍ੑೳͰ͸͋Δ • commons-math3 ͸ຌ༱

Slide 36

Slide 36 text

Comparison: accuracy

Slide 37

Slide 37 text

ܭࢉਫ਼౓ͷൺֱ • java.lang.StrictMath ʹ͓͚Δ࣮૷ͷ໭Γ஋ͱൺֱ͢Δ • (StrictMath ͷ஋͕ਖ਼͍͠Θ͚Ͱ΋ͳ͍ͷ͕ͩ…) • ໭Γ஋ಉ࢜ͷࠩ෼ʹର͠ɺStrictMath ଆͷ໭Γ஋Λ ෼฼ͱׂͯ͠߹Λܭࢉ͢Δ • ͦͷׂ߹ͷฏۉઈର஋ͱ࠷େ஋Ͱਫ਼౓ΛݟͯΈΔ • Ҿ਺ͷ஋͸ݻఆͤͣɺཚ਺ੜ੒ͨ͠΋ͷΛ༩͑Δ

Slide 38

Slide 38 text

Result: average DPNNPOTNBUI KBGBNB MPH & & MPHQ & & FYQ & & UBOI & & TRSU & &

Slide 39

Slide 39 text

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

Slide 40

Slide 40 text

Result • ͍ͣΕʹ͓͍ͯ΋ɺେ͖ͳࠩҟ͕͋ΔΘ͚Ͱ ͸ͳ͍ • 1e-15 ͷਫ਼౓͸อূͰ͖ͦ͏ • jafama ʹ͍ͭͯ͸ɺStrictMath ͷ໭Γ஋ͱҟ ͳΔ͜ͱ͕ଟ͍܏޲ʹ͋Γͦ͏

Slide 41

Slide 41 text

Conclusion

Slide 42

Slide 42 text

·ͱΊ • ʮۜͷ஄ؙ͸ଘࡏ͠ͳ͔ͬͨʯ • “FastMath” ͱ໊৐͍ͬͯͯ΋ɺ͢΂ͯͷ਺ֶؔ਺ ͷ࣮૷ʹ͓͍ͯ JDK ͷ࣮૷ΑΓ΋༏Ε͍ͯΔɺͱ ͍͏Θ͚Ͱ͸ͳ͍ • ·ͨɺ਺ֶؔ਺ʹ༩͑ΔҾ਺࣍ୈͰੑೳ͕େ͖͘ҟΔ ͜ͱ΋͋Γ͏Δ • ϢʔεέʔεʹԠͯ͡ɺ֤छ࣮૷Λ࢖͍෼͚Δ͜ͱ͕ ඞཁ

Slide 43

Slide 43 text

Thank you!