Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Features
Speaker Deck
PRO
Sign in
Sign up for free
Search
Search
SwiftとCPUレジスタ
Search
rikusouda
June 24, 2019
Technology
2
650
SwiftとCPUレジスタ
rikusouda
June 24, 2019
Tweet
Share
More Decks by rikusouda
See All by rikusouda
Swiftのスタック変数とCPUレジスタの関係を読み解いた
rikusouda
2
2.4k
OSSを育てながらiOSアプリでパンくずリストを実現した
rikusouda
2
5.2k
fastlaneはともだち こわくないよ
rikusouda
1
1k
Other Decks in Technology
See All in Technology
Drawing with LLMs
rist
0
240
dbt Cloudの新機能を紹介!データエンジニアリングの民主化:GUIで操作、SQLで管理する新時代のdbt Cloud
sagara
0
170
基調講演: 生成AIを活用したアプリケーションの開発手法とは?
asei
1
110
Two-Tower モデルで実現する 検索リランキング / Shibuya_AI_2
visional_engineering_and_design
2
160
Amazon DevOps Guru のベースラインを整備して1ヶ月ほど運用してみた #jawsug_asa / Amazon DevOps Guru trial
masahirokawahara
3
240
AWS Lambdaでサーバレス設計を学ぼう_ベンダーロックインの懸念を超えて-サーバレスの真価を探る
fukuchiiinu
4
960
堅牢な認証基盤の実現 TypeScriptで代数的データ型を活用する
kakehashi
PRO
1
180
ai bot got sick (abc 2025s version)
kojira
0
160
Introduction to Sansan for Engineers / エンジニア向け会社紹介
sansan33
PRO
5
38k
大失敗しないための Web API 開発レシピ / A recipe for not making a big failure on WebAPI development
yokawasa
1
240
AIエージェント実践集中コース LT
okaru
1
200
Test Smarter, Not Harder: Achieving Confidence in Complex Distributed Systems
eliasnogueira
1
150
Featured
See All Featured
Fireside Chat
paigeccino
37
3.5k
Six Lessons from altMBA
skipperchong
28
3.8k
Helping Users Find Their Own Way: Creating Modern Search Experiences
danielanewman
29
2.6k
Music & Morning Musume
bryan
46
6.6k
Let's Do A Bunch of Simple Stuff to Make Websites Faster
chriscoyier
507
140k
[RailsConf 2023 Opening Keynote] The Magic of Rails
eileencodes
29
9.5k
Building Applications with DynamoDB
mza
95
6.4k
How to Ace a Technical Interview
jacobian
276
23k
Code Review Best Practice
trishagee
68
18k
Save Time (by Creating Custom Rails Generators)
garrettdimon
PRO
31
1.2k
The Language of Interfaces
destraynor
158
25k
Optimising Largest Contentful Paint
csswizardry
37
3.3k
Transcript
SwiftͱCPUϨδελ 2019/06/24 YUMEMI.swift #1 @rikusouda
ࣗݾհ • @rikusouda (٢Ԭ༞थ) • גࣜձࣾGunosy • ϧʔτϏΞ͕͖ • WWDC19͕ॳWWDC
None
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ɻLLVM IRͱ͔ΞηϯϒϥಡΉͱ͍Ζ͍ΖΘ͔ͬͯ໘ന͍Α
LLVM IRͱΞηϯϒϥͱ http://llvm.org/devmtg/2015-10/slides/GroffLattner-SILHighLevelIR.pdf
LLVM IRͱΞηϯϒϥͱ http://llvm.org/devmtg/2015-10/slides/GroffLattner-SILHighLevelIR.pdf
LLVM IRݟͯΈΑ͏
Swiftίʔυ
swiftc -emit-ir -O test.swift > test.ll ௨ৗɺϦϦʔεϏϧυ࠷ద Խ͢ΔͷͰಉ༷ʹ࠷దԽ
None
࠷దԽ͞Ε͗͢!!
Swiftίʔυ
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ͷ Ξηϯϒϥ
None
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ɺҰൠతʹ࠷దԽ͋ΓͳΒϨδ
ελͰ݁͢Δ͜ͱ͕Θ͔ͬͨ
None