Slide 1

Slide 1 text

Compare Benchmarks and Compiler Optimization In Go Go Un Conference May 27, 2019 @ po3rin

Slide 2

Slide 2 text

@po3rin Software Enginner @ Shiroyagi Corporation QBHF Golang / Python / Rust / Docker / AWS / Elasticsearch

Slide 3

Slide 3 text

QBHF Introduction \

Slide 4

Slide 4 text

QBHF 044ʹίϛοτΛࢼΈΔࡍʹɺʮͳͥ ͜ͷ࣮૷͕ྑ͍͔ʯΛূ໌͢Δҝʹ (Pʹ͓͚ΔϕϯνϚʔΫʹ͍ͭͯௐ΂ ͨͷͰͦΕΛൃද͠·͢ɻ Benchmark of Go Ὂ

Slide 5

Slide 5 text

QBHF ɾϕϯνϚʔΫΛʮূ໌ʯʹ࢖͑ΔΑ͏ʹͳΔ ɾϕϯνϚʔΫ௥ٻ͔ΒίϯύΠϥ࠷దԽΛআ͘ Ὂ the porpose of this talk

Slide 6

Slide 6 text

QBHF Review how to take a benchmark \

Slide 7

Slide 7 text

QBHF Review how to take a benchmark Ὂ ֤ϕϯνϚʔΫؔ਺͸C/ճ൓෮ ͞Ε·͢ɻσϑΥϧτͰ͸C/͸ ͔Β࢝·Γ·͕͢ɺϕϯνϚʔ Ϋػೳ͕ඵҎ಺ʹ׬ྃͨ͠৔߹ C/͕૿Ճͯ͠ϕϯνϚʔΫ͕࠶ ࣮ߦ͞Ε·͢ɻ

Slide 8

Slide 8 text

QBHF Review how to take a benchmark Ὂ ݁ՌΛݟΔͱͱ͍͏TV⒏Y͕͍͍ͭͯ·͢ɻ͜Ε͸͜ͷςετΛ࣮ߦ͢ΔͨΊ ʹ࢖༻͞Εͨ(0."9130$4ͷ஋Ͱ͢ɻ͜ͷ਺͸σϑΥϧτͰىಈ࣌ʹ(Pϓϩ ηεʹݟ͑Δ$16ͷ਺ʹͳΓ·͢ɻ

Slide 9

Slide 9 text

QBHF -cpu Ὂ (0."9130$4͸DQVϑϥάͰมߋͰ͖·͢ɻνʔϜؒͰϕϯνϚʔΫΛ࢖͍ճ ࣌͢͸$16ͷ਺͕ϕϯνϚʔΫʹӨڹΛ༩͑ͳ͍Α͏ʹ஫ҙ͕ඞཁͰ͢ɻ

Slide 10

Slide 10 text

QBHF -benchtime Ὂ ൓෮ճ਺Λ૿΍͢ҝʹ CFODIUJNFϑϥάΛ࢖༻ ͯ͠ϕϯνϚʔΫ࣌ؒΛ ૿΍͢͜ͱ͕Ͱ͖·͢ɻ (P͔ΒCFODIUJNF ϑϥά͸൓෮ճ਺Λࢦఆ Ͱ͖·͢ɻ

Slide 11

Slide 11 text

QBHF Benchmark cost avoidance Ὂ C3FTFU5JNFS ͰηοτΞοϓͰ ൃੜ͢ΔίετΛճආͰ͖·͢ɻ ϧʔϓͷ൓෮͝ͱʹίετ͕ߴ͍ ηοτΞοϓ͕͋Δ৔߹͸ɺ C4UPQ5JNFS ͓Αͼ C4UBSU5JNFS Λ࢖༻͠·͢ɻ

Slide 12

Slide 12 text

QBHF Check allocations Ὂ Ξϩέʔγϣϯͷ਺ͱαΠζ͸ɺϕϯνϚʔΫͱڧ͘૬͍ؔͯ͠·͢ɻΞϩέʔ γϣϯͷ਺ΛϕϯνϚʔΫͰ֬ೝ͢Δ࣌͸CFODINFNΛ࢖͍·͢ɻ

Slide 13

Slide 13 text

QBHF Benchmark stability \

Slide 14

Slide 14 text

QBHF Benchmark stability Ὂ ਺ඦສ·ͨ͸਺ेԯճ΄Ͳ൓෮࣮ߦ͞ ΕΔϕϯνϚʔΫ͕OTdNTͷൣғ ͷͳΔ৔߹ɺϕϯνϚʔΫ਺͸೤ε έʔϦϯάɺϝϞϦہॴੑͳͲ༷ʑͳ ཁҼʹΑΓෆ҆ఆʹͳ͍ͬͯ·͢ɻ

Slide 15

Slide 15 text

QBHF Benchmark stability Ὂ ͜ͷΑ͏ͳ৔߹͸DPVOUϑ ϥάΛ࢖༻ͯ͠ɺϕϯν ϚʔΫΛෳ਺ճ࣮ߦ͢Δ͜ ͱͰϕϯνϚʔΫͷ෼ࢄ΋ ؚΊͯ֬ೝ͢Δͷ͕ಘࡦͰ ͢ɻ

Slide 16

Slide 16 text

QBHF Benchmark stability Ὂ ҰํͰϕϯνϚʔΫͷ҆ఆ౓ΛݟΔͷʹศརͳπʔϧ͕͋Γ· ͢ɻ3VTT$PYʹΑΔCFODITUBUͱ͍͏πʔϧΛ঺հ͠·͢ɻ

Slide 17

Slide 17 text

QBHF Benchmark stability Ὂ CFODITUBU͸Ұ࿈ͷϕϯνϚʔΫ ςετΛ࣮ߦͯ͠ɺͦΕΒ͕ͲΕ ΄Ͳ҆ఆ͍ͯ͠Δ͔Λڭ͑ͯ͘Ε ·͢ɻ

Slide 18

Slide 18 text

QBHF Comparing benchmarks \

Slide 19

Slide 19 text

QBHF Comparing benchmarks Ὂ ϕϯνϚʔΫؒͷύϑΥʔϚϯεͷࠩΛ൑அ͢Δͷ͸໘౗Ͱ͕͢ɺ CFODITUBU͸͜ͷ໰୊΋ղܾ͠·͢ɻ

Slide 20

Slide 20 text

QBHF ૣ଎'JC Λվྑ͍ͨ͠ͷͰ͕͢ɺίʔυΛվྑͨ͠ޙͰɺ ΋͏Ұ౓վྑલͷϕϯνϚʔΫΛऔΓ͍͕ͨ࣌ग़͖ͯͨΒ Ͳ͏͠·͠ΐ͏͔ɻ࣮͸HPUFTUʹ͸લճͷϕϯνϚʔΫ݁ ՌΛੜ੒ͨ͠όΠφϦΛอଘ͓ͯ͘͜͠ͱ͕Ͱ͖ΔػೳΛ ఏڙ͢ΔDϑϥοά͕ଘࡏ͠·͢ɻվྑલͷόΠφϦ໊ ͸UFTU͔ΒHPMEFOʹมߋ͢Δͷ͕௨ྫͷΑ͏Ͱ͢ɻ -c Ὂ

Slide 21

Slide 21 text

QBHF ϕϯνϚʔΫΛൺֱ͢Δҝ ʹ࠶ؼݺͼग़͠Λ̍ͭݮΒ ͠·͢ɻ Reduce recursive calls Ὂ

Slide 22

Slide 22 text

QBHF 'JC Ͱ͸'JC ͱൺ΂ͯͷվྑ͕֬ೝͰ͖·͢ɻιʔείʔυͷมߋ ޙʹͲͷ͘Β͍ͷվળ͕͋ͬͨͷ͔Λূ໌͢Δͷʹ༗༻Ͱ͢ɻ෼ࢄ͕େ͖͍ϕϯ νϚʔΫΛൺֱ͢Δͱ͖͸஫ҙɻ Comparing benchmarks Ὂ

Slide 23

Slide 23 text

QBHF O͸ɺ༗ޮͩͱݟͳ͞Εͨσʔλͷݸ਺Λද͠·͢ɻσʔλͷغ٫཰͕ˋΛ௒͑ Δͱൺֱ͢Δαϯϓϧ͕গͳ͗͢ΔՄೳੑ͕͋Γ·͢ɻ Q͕Λ௒͑Δ͜ͱ͸ϕϯνϚʔΫ͕౷ܭతʹ༗ҙͰ͸ͳ͍͜ͱΛҙຯ͠·͢ɻ Q஋ʹ͍ͭͯ͸Լه͕ৄ͍͠Ͱ͢ɻ ౷ܭֶతݕఆͷ1஋ɺ౷ܭֶతʹ༗ҙɺ༗ҙࠩɺ༗ҙਫ४ͱ͸Կ͔ʁ IUUQUPVLFJMJOLCBTJDTUBUJTUJDTQWBMVF@BOE@TJHOJpDBODF Comparing benchmarks Ὂ

Slide 24

Slide 24 text

QBHF Watch out for compiler optimisations \

Slide 25

Slide 25 text

QBHF ਐ਺Ͱදͨ͠ͱཱ͖͍ͬͯΔ Ϗοτͷ਺Λฦ͠·͢ɻ͜ͷؔ ਺ͷϕϯνϚʔΫΛͱΓ·͠ΐ ͏ɻ compiler optimisations Ὂ

Slide 26

Slide 26 text

QBHF ͜ͷ݁Ռͷඵ͸֓ͶΫϩοΫप೾਺Ͱ͢ɻΑͬͯ͜ͷ஋͸͔ͳΓ͓͔͍͠Ͱ͢ɻ $16͸ΫϩοΫ৴߸ʹ߹Θͤͯಈ࡞͠·͢ QPQDOU͸Ϧʔϑؔ਺ ଞͷؔ਺͸ݺͼग़͠Λ͠ͳ͍ ʹͳ͍ͬͯ·͢ɻɻίϯύΠϥ͸͜ ͷؔ਺ΛΠϯϥΠϯల։Ͱ͖·͢ɻͦͯ͠QPQDOU͸ɺͲͷάϩʔόϧม਺ͷঢ়ଶʹ΋ Өڹ͠·ͤΜɻ͕ͨͬͯ͠ɺݺͼग़ࣗ͠ମ͕ഉআ͞Ε͍ͯ·͢ɻ compiler optimisations Ὂ

Slide 27

Slide 27 text

QBHF ϕϯνϚʔΫΛػೳͤ͞ΔͨΊʹΠϯ ϥΠϯԽΛແޮʹ͢Δ͜ͱ͸ଞͷϕϯ νϚʔΫʹ΋Өڹ͕͋ΔͷͰ͓͢͢Ί ͠·ͤΜɻ্̎ͭ͸ίϯύΠϥ͕ϧʔ ϓຊମΛ࠷దԽͰ͖ͳ͍Α͏ʹ͢Δͨ Ίͷਪ঑ํ๏Ͱ͢ɻ compiler optimisations Ὂ

Slide 28

Slide 28 text

QBHF JOMJOJOHͳͲͷίϯύΠϥ࠷దԽͷঢ়گΛ֬ೝ͢Δʹ͸HDqBHTΛ࢖͍·͢ɻ -gcflags Ὂ

Slide 29

Slide 29 text

QBHF ͞ΒʹڧྗͳJOMJOJOH͕(P͔ΒೖͬͯΔ IUUQTEPDTHPPHMFDPNQSFTFOUBUJPOE8DCMQKQGF,X":'0NK18.@RN/RM2L/B-K1PFEJUTMJEFJEQ Mid Stack inlining Ὂ

Slide 30

Slide 30 text

QBHF Conclusion \

Slide 31

Slide 31 text

QBHF (Pʹ͓͚ΔϕϯνϚʔΫ͸؆୯ʹऔΕΔ͕ɺ࢖͍ํʹ͸஫ҙ͕ඞཁɻ ϕϯνϚʔΫͷ؀ڥͷఏࣔ౷Ұ ϕϯνϚʔΫͷ҆ఆੑͷ֬ೝ ͓͔͍͘͠Β͍଎͍࣌͸ϕϯνϚʔΫ࣌ͷίϯύΠϥ࠷దԽͷڍಈΛ֬ೝ Conclusion Ὂ

Slide 32

Slide 32 text

QBHF Additional Talk \

Slide 33

Slide 33 text

QBHF (P$POGFSFODF'VLVPLB Ͱ΋ొஃ͠·͢ʂ

Slide 34

Slide 34 text

Benchmark and Compiler Optimization In Go Go Un Conference May 27, 2019 @ po3rin