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

うわっ…もしかして私のコー ド、遅すぎ…?

Sponsored · Your Podcast. Everywhere. Effortlessly. Share. Educate. Inspire. Entertain. You do you. We'll handle the rest.
Avatar for RyuNen344 RyuNen344
December 10, 2022

うわっ…もしかして私のコー ド、遅すぎ…?

Avatar for RyuNen344

RyuNen344

December 10, 2022
Tweet

More Decks by RyuNen344

Other Decks in Technology

Transcript

  1. WARNING • JMHࣗମͷઆ໌ͱඃΔݸॴ͕ଟʑ͋Δ • android, iOS, watchOS • ݱঢ়͏·͘ಈ͔͢ํ๏͕ͳ͍ •

    android͸JMHपΓͷ஌ࣝΛ׆͔ͤΔ • Experimentalঢ়ଶͳͷͰWASMʹ͸৮Εͳ͍ • (ࢲͷखݩͰ͸ͦ΋ͦ΋ಈ͔ͤͳ͔ͬͨɾɾɾ)
  2. About JMH(Java Microbenchmark Harness) • Java, JVM޲͚ͷܭଌπʔϧ • 2013೥ΑΓ։ൃ͞ΕͯΔOpenJDKϓϩδΣΫτͷ1෦ •

    Annotation Processor, ASMΛ࢖༻ͯ͠ܭଌ༻ͷίʔυΛੜ੒͢Δ • ੜ੒͞Εͨίʔυ࣮ߦͯ͠ॲཧ࣌ؒΛܭଌ͢Δ • kotlinx-benchmark΋͢΂ͯͷϓϥοτϑΥʔϜʹ͓͍ͯܭଌ༻ͷί ʔυΛੜ੒ͯ͠ܭଌ͢Δ
  3. Gradle Plugin, Moduleͷ௥Ճ • Gradle Plugin • + kotlinx-benchmark gradle

    plugin • + kotlin-all-open gradle plugin(for JVM) • Module • + kotlinx-benchmark-runtime
  4. BenchmarksExtension Deep Dive • warmups(common) • JIT༻ύϥϝʔλ • ࣮ࡍͷܭଌલʹॲཧΛ૸ΒͤͯJITίϯύΠϥʔΛಇ͔ͤΔ •

    JITίϯύΠϥʔʹม׵͞ΕͨίʔυͰϕϯνϚʔΫΛऔΔΑ͏ʹ ͢Δ • (ART͸ಛघ͕ͩJetpack BenchmarkΛ࢖͏ͱΑ͠ͳʹͰ͖Δ)
  5. BenchmarksExtension Deep Dive • nativeFork(native) • ͋ΔܭଌΛಉ͡ϓϩηεͰ࣮ߦ͢Δ͔ผϓϩηεͰ࣮ߦ͢Δ͔Λઃఆ͢Δ • =K/N RuntimeͷಡΈࠐΈ͔Β࢝ΊΔ͔Ͳ͏͔

    • nativeGCAfterIteration(native) • ܭଌޙʹGarbage CollectΛ࣮ߦ͢Δ͔ઃఆ͢Δ • GCͷ࣮ߦ͸ίετ͕ߴ͍ͨΊσϑΥϧτ͸OFFʹͳ͍ͬͯΔ
  6. Tips In Benchmark Code • @BenchmarkΛ෇༩ͨؔ͠਺಺Ͱݺͼग़͢ॲཧ͸ܭଌ͍ͨ͠ॲཧͷΈ ʹͳΕ͹ͳΔ΄Ͳྑ͍(ʹ݁Ռʹ༨ܭͳཁҼ͕ೖΒͳ͍) • 1ͭͷΫϥεɺؔ਺͸1ͭͷ໾ׂΛ୲͏Α͏ʹ͢Δ •

    ΫϥεࣗମΛૄ݁߹ʹͳΔΑ͏ʹઃܭ͢Δ(=CoroutineDispatcher ͳͲ͸injectͰ͖ΔΑ͏ʹ࡞Δɺetc…) ςετΛॻ͖΍͘͢͢ΔͱϕϯνϚʔΫ΋औΓ΍͘͢ͳΔ
  7. Why In Benchmark Code • ίϯύΠϧ࣌఺ͰৗʹฦΓ஋Λ࢖༻͠ͳ͍ίʔυ͸࠷దԽର৅ͱͯ͠ ίʔυ࡟আ͞ΕΔՄೳੑ͕͋Δ • ࠷దԽର৅ʹͳΒͳ͍ίʔυʹ͢Δʹ͸ʁ •

    ܭଌର৅ͷฦΓ஋ΛϕϯνϚʔΫϝιουͷฦΓ஋ʹ͢Δ • ܭଌର৅ϝιουͷฦΓ஋ΛBlackholeʹٵΘͤΔ Blackhole͸࠷దԽର৅ʹͤ͞ͳ͍ͨΊͷIF
  8. Tailrec Optimization • Kotlinͷ࠶ؼ຤ඌΛ࠷దԽ͢Δम০ࢠ • Stack Over fl owͷ৺഑͕ͳ͘ͳΔ •

    ߴ଎Ͱޮ཰తͳLoopϕʔεͷ࣮૷ʹࠩ͠มΘΔ • https://kotlinlang.org/docs/functions.html#tail-recursive- functions w w
  9. ࢀߟࢿྉ • kotlin/kotlinx-benchmark • https://github.com/Kotlin/kotlinx-benchmark • openjdk/jmh • https://github.com/openjdk/jmh •

    Benchmark.js • https://benchmarkjs.com/ • tailrec • https://kotlinlang.org/docs/functions.html#tail-recursive-functions