Slide 1

Slide 1 text

SwiftͱCPUϨδελ 2019/06/24 YUMEMI.swift #1 @rikusouda

Slide 2

Slide 2 text

ࣗݾ঺հ • @rikusouda (٢Ԭ༞थ) • גࣜձࣾGunosy • ϧʔτϏΞ͕޷͖ • WWDC19͕ॳWWDC

Slide 3

Slide 3 text

No content

Slide 4

Slide 4 text

Swiftͱ CPUϨδελ

Slide 5

Slide 5 text

ͳͥWWDC͔ΒϨδελͷ࿩? • WWDCʹ͸Lab͕͋ΔɻAppleͷΤϯδχΞ ʹ࣭໰͕Ͱ͖Δ৔ॴ • Swiftؔ࿈ͷLabߦ͖ͬͯͨ • ղܾͰ͖ͳ͔ͬͨ͜ͱ͕͋Γɺ೔ຊʹؼͬͯ ͖͔ͯΒࣗ෼Ͱௐ΂ͨ

Slide 6

Slide 6 text

CPUϨδελͬͯԿ͚ͩͬ • ԋࢉ͢Δͱ͖ʹ࢖͏࡞ۀྖҬ = ൚༻Ϩδελ • CPUͷ಺෦ʹ͋ͬͯɺϝΠϯϝϞϦΑΓܻҧ ͍ʹૣ͍ • ͨͩ͠਺ेݸͱ͔ɺ਺͕ݶΒΕ͍ͯΔ • Ϩδελʹͳ͍σʔλΛԋࢉ͢Δͱ͖͸ϝΠϯ ϝϞϦ͔ΒҰ୴ϩʔυ͢Δ

Slide 7

Slide 7 text

୊ࡐͷSwiftίʔυ

Slide 8

Slide 8 text

͜͏͍͏஋ܕͷม਺͸ ʮελοΫͷϝϞϦྖҬʹ֬อ ͞ΕΔʯͱ͍͏ͷ͸༗໊ ୊ࡐͷSwiftίʔυ

Slide 9

Slide 9 text

ϝΠϯϝϞϦ࢖ΘͣʹϨδελ ͚ͩ࢖ͬͨ΄͏͕ޮ཰Α͘ͳ͍ ͦ͏ͳ͍ͬͯΔ ୊ࡐͷSwiftίʔυ

Slide 10

Slide 10 text

LabͰฉ͍ͯΈͨ • SwiftͷLabʹͯ • A. SwiftίϯύΠϥνʔϜͰ͸୲౰͍ͯ͠ͳ͍ൣғɻ LLVMͷਓʹฉ͘ͱΑͦ͞͏ • LLVMͷLabʹͯ • A. Swift͸Θ͔Βͳ͍ɻCݴޠͩͱ͢ΔͱYesɻLLVM IRͱ͔ΞηϯϒϥಡΉͱ͍Ζ͍ΖΘ͔ͬͯ໘ന͍Α

Slide 11

Slide 11 text

LLVM IRͱΞηϯϒϥͱ͸ http://llvm.org/devmtg/2015-10/slides/GroffLattner-SILHighLevelIR.pdf

Slide 12

Slide 12 text

LLVM IRͱΞηϯϒϥͱ͸ http://llvm.org/devmtg/2015-10/slides/GroffLattner-SILHighLevelIR.pdf

Slide 13

Slide 13 text

LLVM IRݟͯΈΑ͏

Slide 14

Slide 14 text

Swiftίʔυ

Slide 15

Slide 15 text

swiftc -emit-ir -O test.swift > test.ll ௨ৗɺϦϦʔεϏϧυ͸࠷ద Խ͢ΔͷͰಉ༷ʹ࠷దԽ

Slide 16

Slide 16 text

No content

Slide 17

Slide 17 text

࠷దԽ͞Ε͗͢!!

Slide 18

Slide 18 text

Swiftίʔυ

Slide 19

Slide 19 text

Swiftίʔυ ϝιουͷࢀরܦ༝ͷݺͼग़͠ʹ͠ ͯؔ਺ίʔϧ͕ͳ͘ͳΔͷΛආ͚Δ

Slide 20

Slide 20 text

swiftc -emit-ir -O test.swift > test.ll

Slide 21

Slide 21 text

LLVM IRίʔυ(barؔ਺಺)

Slide 22

Slide 22 text

LLVM IRίʔυ(barؔ਺಺) ͷؔ਺Λίʔϧ݁͠ՌΛ΁ GPPؔ਺ͷϙΠϯλ͕ʹೖ͍ͬͯΔ

Slide 23

Slide 23 text

LLVM IRίʔυ(barؔ਺಺) ʹΛ଍ͯ͠ɺ໭Γ஋Λʹ

Slide 24

Slide 24 text

LLVM IRίʔυ(barؔ਺಺) !MMWNTBEEXJUIPWFSqPXJͷ໭Γ஋ ߏ଄ମ͔Βܭࢉ݁ՌΛऔΓग़͠ɺ ͦΕΛ໭Γ஋ͱͯ͠SFUVSO

Slide 25

Slide 25 text

Α͛͞

Slide 26

Slide 26 text

೦ͷҝΞηϯϒϥ΋ݟΑ͏
 iPhoneΛ૝ఆ͠ARM64Ͱ

Slide 27

Slide 27 text

xcrun -sdk iphoneos swiftc - emit-assembly -O -target arm64- apple-ios12.0 test.swift > test.s ͜ͷίϚϯυ͕ϕετͳͷ͔ ࣗ৴͕ͳ͍ͷͰϚαΧϦืू

Slide 28

Slide 28 text

ARM64ͷ Ξηϯϒϥ

Slide 29

Slide 29 text

No content

Slide 30

Slide 30 text

Y ΛҾ਺ͱͯ͠YʹඈͿ Yʹ͸GPPͷΞυϨε͕ೖ͍ͬͯΔ

Slide 31

Slide 31 text

໭Γ஋ Y ΛYʹίϐʔ

Slide 32

Slide 32 text

YY ϨδελͱϦςϥϧͷՃࢉ ϝϞϦΞΫηεͳ͠

Slide 33

Slide 33 text

YΛ໭Γ஋ͱͯ͠SFUVSO

Slide 34

Slide 34 text

Swiftͷؔ਺಺ͷInt͸ ϨδελͰ׬͍݁ͯͨ͠

Slide 35

Slide 35 text

͜Ε͔Β • LLVMίʔυΛݟͯཪ෇͚͕Ͱ͖͍ͯͳ͍ͷͰ ΍Γ͍ͨ • ↑͜͜·Ͱ΍ͬͯiOSDCͷLTͰ஻Γ͍ͨ

Slide 36

Slide 36 text

ϓϩϙʔβϧʹελʔ͍ͩ͘͞ • SwiftͷελοΫม਺ͱCPUϨδελͷؔ܎ΛಡΈղ͍ͨ • https://fortee.jp/iosdc-japan-2019/proposal/ c2a89fff-ce66-4821-b2d4-4b7b6ff293d5 • Swiftͷ஌ࣝΛ࢖ͬͯC++ͷੈքʹඈͼࠐ΋͏ • https://fortee.jp/iosdc-japan-2019/proposal/ c39e331a-8c70-42ef-b58e-38f798f40295 • “rikusouda”Ͱݕࡧ͢Ε͹ग़͖ͯ·͢

Slide 37

Slide 37 text

·ͱΊ • Swiftͷ಺෦ಈ࡞Λ஌Γ͍ͨ৔߹͸தؒίʔυ ΛಡΉ͚ͩͰ݁ߏ෼͔Δɻ • ໋ྩͷ࢓༷ͱ͔άάΕ͹݁ߏಡΊΔ • ίϯύΠϥͷ஌ࣝͳͯ͘΋͜͜·Ͱ͸ߦ͚Δ • SwiftͷInt͸ɺҰൠతʹ࠷దԽ͋ΓͳΒ͹Ϩδ ελͰ׬݁͢Δ͜ͱ͕Θ͔ͬͨ

Slide 38

Slide 38 text

No content