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
660
SwiftとCPUレジスタ
rikusouda
June 24, 2019
Tweet
Share
More Decks by rikusouda
See All by rikusouda
末尾再帰なら安心でしょ?って信じてたSwiftコードが落ちた夜
rikusouda
0
160
Swiftのスタック変数とCPUレジスタの関係を読み解いた
rikusouda
2
2.5k
OSSを育てながらiOSアプリでパンくずリストを実現した
rikusouda
2
5.4k
fastlaneはともだち こわくないよ
rikusouda
1
1.1k
Other Decks in Technology
See All in Technology
Amazon Q Developer CLIをClaude Codeから使うためのベストプラクティスを考えてみた
dar_kuma_san
0
370
AI-ready"のための"データ基盤 〜 LLMOpsで事業貢献するための基盤づくり
ismk
0
130
これからアウトプットする人たちへ - アウトプットを支える技術 / that support output
soudai
PRO
13
4.2k
AWS 環境で GitLab Self-managed を試してみた/aws-gitlab-self-managed
emiki
0
310
Kotlinで型安全にバイテンポラルデータを扱いたい! ReladomoラッパーをAIと実装してみた話
itohiro73
3
300
累計5000万DLサービスの裏側 – LINEマンガのKotlinで挑む大規模 Server-side ETLの最適化
ldf_tech
0
210
【AWS reInvent 2025 関西組 事前勉強会】re:Inventの“感動と興奮”を思い出してモチベ爆上げしたいです
ttelltte
0
110
Beyond Prompts: Building Intelligent Applications with Genkit and the Model Context Protocol
peterfriese
0
110
メタプログラミングRuby問題集の活用
willnet
1
370
Zabbix Conference Japan 2025 ダッシュボードコンテストLT
katayamatg
0
140
Copilotの精度を上げる!カスタムプロンプト入門.pdf
ismk
10
2.7k
Boxを“使われる場”にする統制と自動化の仕組み
demaecan
0
220
Featured
See All Featured
Statistics for Hackers
jakevdp
799
220k
Responsive Adventures: Dirty Tricks From The Dark Corners of Front-End
smashingmag
253
22k
How to Think Like a Performance Engineer
csswizardry
28
2.3k
The Illustrated Children's Guide to Kubernetes
chrisshort
51
51k
Building Flexible Design Systems
yeseniaperezcruz
329
39k
RailsConf & Balkan Ruby 2019: The Past, Present, and Future of Rails at GitHub
eileencodes
140
34k
A better future with KSS
kneath
239
18k
Large-scale JavaScript Application Architecture
addyosmani
514
110k
Navigating Team Friction
lara
190
15k
Understanding Cognitive Biases in Performance Measurement
bluesmoon
31
2.7k
Bash Introduction
62gerente
615
210k
Improving Core Web Vitals using Speculation Rules API
sergeychernyshev
21
1.2k
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