Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Sign up for free
Menu
Search
Features
All features
Private URLs
Password Protection
Custom URLS
Scheduled publishing
Remove Branding
Restrict embedding
Deck Collections
Notes
Features
All features
Private URLs
Password Protection
Custom URLS
Scheduled publishing
Remove Branding
Restrict embedding
Deck Collections
Notes
Explore
Featured decks
Featured speakers
Programming
Technology
Storyboards
Explore
Featured decks
Featured speakers
Programming
Technology
Storyboards
Pricing
Search
Sign in
Sign up for free
iOS エンジニアのための LLVM Optimiazation
Search
Sponsored
·
Ship Features Fearlessly
Turn features on and off without deploys. Used by thousands of Ruby developers.
→
Toshihiro Morimoto
November 29, 2014
Technology
1.7k
2
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
iOS エンジニアのための LLVM Optimiazation
横浜へなちょこiOS勉強会#34.1 での発表資料です
Toshihiro Morimoto
November 29, 2014
More Decks by Toshihiro Morimoto
See All by Toshihiro Morimoto
Xcode8 で開発はどうかわったのか
dealforest
10
6.6k
魅せるデバッグ技術
dealforest
4
1.6k
LLDB の世界からみた Swift
dealforest
4
5.6k
Xcode で快適なデバッグライフを追い求める
dealforest
29
25k
Intrducing debug in WWDC2016
dealforest
3
840
swift build と Xcode での Build の違い
dealforest
3
2.2k
RIP Xcode Plugin 🙏
dealforest
0
4.9k
Introducing Xcode Editor Extension
dealforest
2
4.7k
Introducing Anglerfish
dealforest
2
3.6k
Other Decks in Technology
See All in Technology
AI 時代の Azure エンジニアリング ~ 私たちは何を磨き、何を任せるのか ~
chack411
1
350
AgentCoreで実践するハーネスエンジニアリング
yakumo
1
190
KanaAI
shreyas1009
0
140
インバスケット試験対策アプリを 作って見えたAIエージェント構築 ナレッジ2選
shichijoyuhi
1
110
AIに書かせて、プラットフォームで縛る ― EKSプラットフォームで実践した責任境界と権限設計
elmodev09
1
1.1k
The kernel report
ennael
PRO
1
190
OSC2026on_the-world-is-waiting-for-your-voice.pdf
naruoga
0
230
[2026 Oracle Technical Deep Dive] オンプレミスDBのCloud移行アプローチ:移行計画に基づくメソッドとツールの選択 (2026年9月17日開催)
oracle4engineer
PRO
0
110
Swap and Memory Reclaim - Squeezing Out More RAM
ennael
PRO
1
1.5k
高負荷プロダクション環境におけるAWS Lambdaのリアル 〜スケールとコストを左右する実行ライフサイクルの技術仕様〜
maimyyym
2
850
サーバーフルコンピューティング?AWS Lambda
iwatatomoya
0
130
いちAWSエンジニアのAI活用を振り返る #devio2026 / devio osaka 2026 kawahara
masahirokawahara
2
310
Featured
See All Featured
Music & Morning Musume
bryan
48
7.4k
コードの90%をAIが書く世界で何が待っているのか / What awaits us in a world where 90% of the code is written by AI
rkaga
63
46k
Highjacked: Video Game Concept Design
rkendrick25
PRO
1
470
AI Search: Where Are We & What Can We Do About It?
aleyda
0
8k
<Decoding/> the Language of Devs - We Love SEO 2024
nikkihalliwell
1
340
Tips & Tricks on How to Get Your First Job In Tech
honzajavorek
1
780
Automating Front-end Workflow
addyosmani
1369
210k
Leveraging Curiosity to Care for An Aging Population
cassininazir
1
520
AI Search: Implications for SEO and How to Move Forward - #ShenzhenSEOConference
aleyda
1
1.4k
Avoiding the “Bad Training, Faster” Trap in the Age of AI
tmiket
0
260
16th Malabo Montpellier Forum Presentation
akademiya2063
PRO
0
390
RailsConf 2023
tenderlove
30
1.6k
Transcript
iOS ΤϯδχΞͷͨΊͷ LLVM Optimiazation 2014/11/29 ԣͳͪΐ͜iOSษڧձ#34.1 @dealforest Toshihro Morimoto
ࣗݾհ http://about.me/dealforest ! ! iOS App / Web Application(perl, ruby)
@dealforest Toshihro Morimoto
Έͳ͞Μ ͜Μͳܦݧ͋Γ·ͤΜ͔ʁ
Debug ϏϧυͰ͔֬͠ೝͤͣ ৹ࠪʹͩͯ͠͠·ͬͨ͜ͱ
͍͟ϦϦʔε͞ΕΔͱ...
ʊਓਓਓਓਓਓਓਓʊ ʼɹಥવͷ Crashɹʻ ʉY^Y^Y^Y^Y^Y^Yʉ
ͳͥͦΜͳ͜ͱ͕͓͖Δͷ͔ʁ
LLVM ͷ࠷దԽʹΑΓ ͜ͷΑ͏ͳ͜ͱ͕ ى͖ͯ͠·͏έʔε͕͋Γ·͢
LLVM ͷ࠷దԽԿΛ͍ͯ͠Δͷ͔ʁ
όΠφϦαΠζΛখͨ͘͞͠Γ ॲཧΛߴԽͨ͠Γ͠·͢ (༰ઃఆʹΑͬͯมΘΓ·͢)
ͪΌΜͱ Release ϏϧυͰ ςετ͠Ζͬͯݴ͑ ͦ͏ͳΜͰ͚͢ͲͶɻɻɻɻ
Ͳ͏ͯ͠࠷దԽͰ Crash ͢ΔΑ͏ʹ ͳͬͯ͠·ͬͨͷ͔
࠷దԽͰԿ͕ߦΘΕ͍ͯΔͷ͔
ࠓճͦΕΛௐͯΈ·ͨ͠
ҙࣄ߲ ༻ޠ / ༻๏ڞʹؒҧ͍͕͋ΔՄೳੑ͕ ͋Γ·͢ͷͰ͔͋͠Βͣ
ͦͦͲ͜Ͱઃఆ͢Δͷʁ
Build Settings
࠷దԽͷछྨ • O0 : ࠷͘ίϯύΠϧग़དྷɺ࠷σόοΨϒϧͳίʔυΛ ੜ͢Δɻ࠷దԽͳ͠ • O1 : جຊతͳ࠷దԽΛ࣮ߦ͢Δ
• O2 : ΄ͱΜͲͯ͢ͷ࠷దԽΛ࣮ߦ͢Δ • O3 : O2 ͱࣅ͍ͯΔ͕ίϯύΠϧʹΑΓ͕͔͔࣌ؒΓ αΠζ͕େ͖͘ͳΔɻ͔͠͠ੑೳͷྑ͍ίʔυΛੜ͢Δ • Os : O2ͷ࠷దԽʹՃ͑ͯίʔυαΠζΛ͑Δ • Ofast : نΛҰ෦ແࢹͨ͠࠷దԽΛߦ͏Α͏ͳͷͰΘͳ͍΄͏ ͕͍͍Ͱ͢ɻ by Compiler-Level Optimizations
͍·͍ͪϐϯͱ͖·ͤΜͶ
Ξότ͗͢Δ…
͜ΕΛΔͨΊʹ LLVM ͷਂΛ ͔ͳ͍ͱ͍͚·ͤΜͰͨ͠
ͱ͍ͬͯ LLVM ͷ֓೦ࣗମ͕ γϯϓϧͰͱ͔ͯΓ͍͢ʂ
ͦͦ LLVM ͬͯԿʁ
LLVM
LLVM LLVM ͱɺίϯύΠϧ࣌ɺϦϯΫ࣌ɺ࣮ߦ࣌ͳͲ ͋ΒΏΔ࣌ͰϓϩάϥϜΛ࠷దԽ͢ΔΑ͏ઃܭ ͞ΕͨɺҙͷϓϩάϥϛϯάݴޠʹରԠՄೳͳ ίϯύΠϥج൫Ͱ͋ΔɻॳɺLLVM ͷ໊শͷ༝ དྷɺLow Level Virtual
Machine (ਫ४Ծػց) ͷུͰ͋Δͱ͍͕ͯͨ͠ɺݱࡏɺԿͷ಄จࣈͰ ͳ͍ͱ͍ͯ͠Δɻ by Wikipekia
LLVM - Phase- by LLVM and NVVM
LLVM - Phase- • Front-end • Middle-end • Back-end
LLVM - Phase Front-end - • ࣈ۟ղੳ • ߏจղੳ •
தؒίʔυ(LLVM IR)࡞
LLVM - Phase Middle-end - தؒίʔυͷ࠷దԽΛ͠ɺ ࠷దԽ͞ΕͨதؒίʔυΛग़ྗ͢Δ
LLVM - Phase Back-end - ࠷దԽ͞Εͨதؒίʔυ͔Βλʔήοτʹ ߹ΘͤͨίʔυΛग़ྗ͢Δ ಛఆͷ CPU ͷωΠςΟϒίʔυͱ͔
Javascript ͱ͔
;Ή;Ή
ࠓճ࠷దԽͷ͜ͱΛΓ͍ͨͷͰ Middle-end ΛௐΕΑͦ͞͏Ͱ͢Ͷ
Middle-end(LLVM optimiser) Λ ௐ͍ͯ͘ͱ Pass ͱ͍͏Έʹ ͍͖͖ͭ·͢
Pass Middle-end Ͱ࠷దԽ͢ΔॲཧΛ͍ͯ͠Δ LLVM IR ͷίʔυΛରʹɺͦͷ༰Λղ ੳ͠ɺ࠷దԽɺ໋ྩͷஔͳͲΛߦ͏ͨ ΊͷϑϨʔϜϫʔΫ
ͭ·ΓͲΜͳ Pass ͕࣮ߦ͞Ε͍ͯΔ͔Λ ௐΕͲΜͳ࠷దԽ͕ߦΘΕ͍ͯΔ͔͕ ͔Δͱ͍͏Θ͚Ͱ͢Ͷ
ڥߏங $ brew install llvm ! `/usr/local/Cellar/llvm/3.5.0/bin/opt` ͱ࣮ߦ͢ Δͷ͕ΊΜͲ͍͘͞߹ `brew
link llvm` Λ࣮ߦ͢Δ
ௐࠪϑϩʔ 1. ࠷దԽͳ͠ͷ .o ϑΝΠϧΛ࡞͢Δઃ ఆΛௐΔ 2. ͦͷઃఆΛ༻͍ͯதؒίʔυ(LLVM IR)Λ ࡞
3. ֤࠷దԽΛ࣮ߦͯ͠ϑΝΠϧʹग़ྗ 4. diff ΛͱΓ Pass ͷࠩΛௐΔ
࠷దԽͳ͠ͷ .o ϑΝΠϧΛ ࡞͢ΔઃఆΛௐΔ xcodebuild build -configuration Debug
தؒίʔυ(LLVM IR)Λ࡞ • ઌ΄ͲௐͨઃఆΛར༻ • `-S -emit-llvm` ΦϓγϣϯΛՃͯ͠த ؒίʔυΛग़ྗ •
`-o` ͷΛมߋͯ͠தؒίʔυͷग़ྗઌ Λมߋ(.o -> .ll)
֤࠷దԽΛ࣮ߦͯ͠ϑΝΠϧʹग़ྗ $ /usr/local/Cellar/llvm/3.5.0/bin/opt \ -debug-pass=Structure \ -O1 [தؒίʔυ].ll > /dev/null
! ඞཁͳใඪ४Τϥʔग़ྗʹදࣔ͞ΕΔ
֤࠷దԽΛ࣮ߦͯ͠ϑΝΠϧʹग़ྗ
ݟʹ͍͘ͷͰ gist ʹ·ͱΊ·ͨ͠ https://gist.github.com/dealforest/ 718df40a09d8e27758c7
ͦͦ Debug ࣌ Os Ε͍͍Μ͡Ό...
! ͱࢥ͚ͬͨͲɺίϯύΠϧ͕͔͔࣌ؒΔͷͱɺC, C++ ͷίʔυͰ BreakPoint Λֻ͚ͨΓ͢Δͱશ͘ ݟҧ͍ͳߦͰఀࢭͨ͠Γ͠·͢ ͳͷͰ։ൃαΠΫϧʹӨڹ͕Ͱͯ͠·͏ͷͰ O0 ͕
࠾༻͞Ε͍ͯΔͱΘ͚Ͱ͢Ͷɻೲಘ @niwatako ͞Μᐌ͘ɺObjective-C ͰͣΕΔΒ͍͠ Ͱ͢
·ͱΊ ࠷దԽࢥͬͯΔҎ্ʹ৭ʑ͍ͬͯ͡ΔͷͰͪΌ Μͱ֬ೝ͠·͠ΐ͏ Ή͠Ζ֬ೝ͔ͯ͠Β͡Όͳ͍ͱɺ৹ࠪʹͩͤͳ͍ εΩʔϜΛͭ͘Δ͜ͱ͕େࣄ
http://www.amazon.co.jp/dp/4883379310/
͓·͚ Xcode6 ͔ΒՃ͞Εͨ Profile Guided Optimization(PGO) ͱ͍͏࠷దԽ͕͋Δ ؆୯ʹ͍͏ͱɺ༻සͷߴ͍ॱʹίʔυϨΠΞ τΛ࠷దԽ͢ΔΒ͍͠ ͘ͳΔΑʂ
͓·͚ Xcode6 ͔ΒՃ͞Εͨ࠷దԽ Profile Guided Optimization(PGO) ͕͋Δ ؆୯ʹ͍͏ͱΑ͘͏ॱ൪ʹίʔυϨΠΞτΛ ࠷దԽ͢ΔΒ͍͠ ͘ͳΔΑʂ
͓·͚ ৄ͘͠ʮ What's New in LLVMʯΛΈ͍ͯͩ͘͞
͝ਗ਼ௌ͋Γ͕ͱ͏͍͟͝·ͨ͠