SwiftͱCPUϨδελ2019/06/24 YUMEMI.swift #1@rikusouda
View Slide
ࣗݾհ• @rikusouda (٢Ԭ༞थ)• גࣜձࣾGunosy• ϧʔτϏΞ͕͖• WWDC19͕ॳWWDC
SwiftͱCPUϨδελ
ͳͥWWDC͔ΒϨδελͷ?• WWDCʹLab͕͋ΔɻAppleͷΤϯδχΞʹ࣭͕Ͱ͖Δॴ• Swiftؔ࿈ͷLabߦ͖ͬͯͨ• ղܾͰ͖ͳ͔ͬͨ͜ͱ͕͋Γɺຊʹؼ͖͔ͬͯͯΒࣗͰௐͨ
CPUϨδελͬͯԿ͚ͩͬ• ԋࢉ͢Δͱ͖ʹ͏࡞ۀྖҬ = ൚༻Ϩδελ• CPUͷ෦ʹ͋ͬͯɺϝΠϯϝϞϦΑΓܻҧ͍ʹૣ͍• ͨͩ͠ेݸͱ͔ɺ͕ݶΒΕ͍ͯΔ• Ϩδελʹͳ͍σʔλΛԋࢉ͢Δͱ͖ϝΠϯϝϞϦ͔ΒҰ୴ϩʔυ͢Δ
ࡐͷSwiftίʔυ
͜͏͍͏ܕͷมʮελοΫͷϝϞϦྖҬʹ֬อ͞ΕΔʯͱ͍͏ͷ༗໊ࡐͷSwiftίʔυ
ϝΠϯϝϞϦΘͣʹϨδελ͚ͩͬͨ΄͏͕ޮΑ͘ͳ͍ ͦ͏ͳ͍ͬͯΔ ࡐͷSwiftίʔυ
LabͰฉ͍ͯΈͨ• SwiftͷLabʹͯ• A. SwiftίϯύΠϥνʔϜͰ୲͍ͯ͠ͳ͍ൣғɻLLVMͷਓʹฉ͘ͱΑͦ͞͏• LLVMͷLabʹͯ• A. SwiftΘ͔Βͳ͍ɻCݴޠͩͱ͢ΔͱYesɻLLVMIRͱ͔ΞηϯϒϥಡΉͱ͍Ζ͍ΖΘ͔ͬͯ໘ന͍Α
LLVM IRͱΞηϯϒϥͱhttp://llvm.org/devmtg/2015-10/slides/GroffLattner-SILHighLevelIR.pdf
LLVM IRݟͯΈΑ͏
Swiftίʔυ
swiftc -emit-ir -O test.swift > test.ll௨ৗɺϦϦʔεϏϧυ࠷దԽ͢ΔͷͰಉ༷ʹ࠷దԽ
࠷దԽ͞Ε͗͢!!
Swiftίʔυϝιουͷࢀরܦ༝ͷݺͼग़͠ʹͯؔ͠ίʔϧ͕ͳ͘ͳΔͷΛආ͚Δ
swiftc -emit-ir -O test.swift > test.ll
LLVM IRίʔυ(barؔ)
LLVM IRίʔυ(barؔ)ͷؔΛίʔϧ݁͠ՌΛGPPؔͷϙΠϯλ͕ʹೖ͍ͬͯΔ
LLVM IRίʔυ(barؔ)ʹΛͯ͠ɺΓΛʹ
LLVM IRίʔυ(barؔ)!MMWNTBEEXJUIPWFSqPXJͷΓߏମ͔Βܭࢉ݁ՌΛऔΓग़͠ɺͦΕΛΓͱͯ͠SFUVSO
Α͛͞
೦ͷҝΞηϯϒϥݟΑ͏ iPhoneΛఆ͠ARM64Ͱ
xcrun -sdk iphoneos swiftc -emit-assembly -O -target arm64-apple-ios12.0 test.swift >test.s͜ͷίϚϯυ͕ϕετͳͷ͔ࣗ৴͕ͳ͍ͷͰϚαΧϦืू
ARM64ͷΞηϯϒϥ
Y ΛҾͱͯ͠YʹඈͿYʹGPPͷΞυϨε͕ೖ͍ͬͯΔ
Γ YΛYʹίϐʔ
YYϨδελͱϦςϥϧͷՃࢉϝϞϦΞΫηεͳ͠
YΛΓͱͯ͠SFUVSO
SwiftͷؔͷIntϨδελͰ͍݁ͯͨ͠
͜Ε͔Β• LLVMίʔυΛݟͯཪ͚͕Ͱ͖͍ͯͳ͍ͷͰΓ͍ͨ• ↑͜͜·ͰͬͯiOSDCͷLTͰΓ͍ͨ
ϓϩϙʔβϧʹελʔ͍ͩ͘͞• 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”Ͱݕࡧ͢Εग़͖ͯ·͢
·ͱΊ• Swiftͷ෦ಈ࡞ΛΓ͍ͨ߹தؒίʔυΛಡΉ͚ͩͰ݁ߏ͔Δɻ• ໋ྩͷ༷ͱ͔άάΕ݁ߏಡΊΔ• ίϯύΠϥͷࣝͳͯ͘͜͜·Ͱߦ͚Δ• SwiftͷIntɺҰൠతʹ࠷దԽ͋ΓͳΒϨδελͰ݁͢Δ͜ͱ͕Θ͔ͬͨ