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でよりSwiftyに
Search
野瀬田 裕樹
May 12, 2025
Programming
0
9
SwiftでよりSwiftyに
Kanagawa.swiftで登壇した時の資料です
野瀬田 裕樹
May 12, 2025
Tweet
Share
More Decks by 野瀬田 裕樹
See All by 野瀬田 裕樹
Flutterで備える!Accessibility Nutrition Labels完全ガイド
yuukiw00w
0
130
WWDC25要約:Evaluate your app for Accessibility Nutrition Labels
yuukiw00w
0
39
モバイルアプリ設計入門
yuukiw00w
0
5
Swiftは最高だよの話
yuukiw00w
2
320
iOSDC2024ポスター:Swift 6に備えよう!Upcoming Feature Flagsを全て解説します!
yuukiw00w
0
12
より良いLint設定を追い求めて
yuukiw00w
0
90
FlutterにPull Requestを 投げてみよう!
yuukiw00w
0
34
半年で成果を出すチーム作り(Flutterチームの組成の話)
yuukiw00w
0
37
Other Decks in Programming
See All in Programming
エラーって何種類あるの?
kajitack
5
320
Rubyでやりたい駆動開発 / Ruby driven development
chobishiba
1
520
Cursor AI Agentと伴走する アプリケーションの高速リプレイス
daisuketakeda
1
130
20250628_非エンジニアがバイブコーディングしてみた
ponponmikankan
0
530
なぜ適用するか、移行して理解するClean Architecture 〜構造を超えて設計を継承する〜 / Why Apply, Migrate and Understand Clean Architecture - Inherit Design Beyond Structure
seike460
PRO
1
710
Systèmes distribués, pour le meilleur et pour le pire - BreizhCamp 2025 - Conférence
slecache
0
110
都市をデータで見るってこういうこと PLATEAU属性情報入門
nokonoko1203
1
580
すべてのコンテキストを、 ユーザー価値に変える
applism118
2
990
20250704_教育事業におけるアジャイルなデータ基盤構築
hanon52_
1
120
Goで作る、開発・CI環境
sin392
0
180
Hypervel - A Coroutine Framework for Laravel Artisans
albertcht
1
110
スタートアップの急成長を支えるプラットフォームエンジニアリングと組織戦略
sutochin26
0
120
Featured
See All Featured
CoffeeScript is Beautiful & I Never Want to Write Plain JavaScript Again
sstephenson
161
15k
Typedesign – Prime Four
hannesfritz
42
2.7k
[RailsConf 2023 Opening Keynote] The Magic of Rails
eileencodes
29
9.5k
Principles of Awesome APIs and How to Build Them.
keavy
126
17k
Building a Modern Day E-commerce SEO Strategy
aleyda
42
7.4k
The World Runs on Bad Software
bkeepers
PRO
69
11k
Build your cross-platform service in a week with App Engine
jlugia
231
18k
Performance Is Good for Brains [We Love Speed 2024]
tammyeverts
10
940
Fashionably flexible responsive web design (full day workshop)
malarkey
407
66k
Java REST API Framework Comparison - PWX 2021
mraible
31
8.7k
Practical Orchestrator
shlominoach
188
11k
"I'm Feeling Lucky" - Building Great Search Experiences for Today's Users (#IAC19)
danielanewman
229
22k
Transcript
© DMM © DMM Swiftでよりswiftyに swifty codeを書こう 野瀬田 裕樹(@ynoseda) 2024/11/3
© DMM 2 注:この資料は今年の3月頃に作成しました (風邪ひいて登壇キャンセルした時のやつ)
© DMM 3 一応さっきXcode16でも警告なく動くことは確認しました
© DMM 野瀬田 裕樹(@ynoseda) 2023年9月 合同会社DMM.com 中途入社 開発統括本部 アプリ開発室 自己紹介 4
© DMM 5 Swiftで書くならswiftyなコードを書きたいですよね?
© DMM 6 今回の発表を機にswiftyなコードを書きましょう!
© DMM 7 と言いつつも
© DMM 8 swiftyなコードって何
© DMM swiftyという単語の意味 9
© DMM 10 swiftyなコード = Swiftらしいコード
© DMM 11 swiftyなコード ≠ Swiftらしいコード
© DMM 12 swiftyなコード = 素早いコード
© DMM swiftyなコードを書こう 素早いと言っても色んな種類がある • 実行時間が短い • ビルド時間が短い • 理解に要する時間が短い(Swiftらしいコードはここに入る)
13
© DMM swiftyなコードを書こう 素早いと言っても色んな種類がある • 実行時間が短い • ビルド時間が短い • 理解に要する時間が短い(Swiftらしいコードはここに入る)
14
© DMM 適当な大きいサイズの連立一次方程式を解く 実行時間が長い処理のお題 15
© DMM 16 どうやって連立一次方程式を解くか?
© DMM ガウスの消去法 17 ピボット選択は省略
© DMM ガウスの消去法 18
© DMM ガウスの消去法 19
© DMM ガウスの消去法のパフォーマンス 20 前提条件 • 先ほどのコードに部分ピボット選択を追加 • 解がわかりやすいよう係数行列は →
を使用 ◦ 例えば定数ベクトルを全て12にすると、 奇数次元のとき解が6, 0, 6, …, 0, 6のように 6と0の繰り返しになる • 501次元でパフォーマンスを計測
© DMM ガウスの消去法のパフォーマンス 21 結果 • 平均12.139秒(501次元) • これをSwiftyにしよう!!
© DMM Accelerateフレームワークで解いてみよう 22
© DMM • 自前実装しなくても、Swiftには専用の数値計算ライブラリがある • Accelerateフレームワークでは、dgesv_という関数で連立一次方程式 が解ける! Accelerateフレームワークで解いてみよう 23
© DMM Accelerateフレームワークで解いてみよう 24
© DMM Accelerateフレームワークで解いてみよう 25
© DMM Accelerateフレームワークで解いてみよう 26
© DMM dgesv_のパフォーマンス 27 結果 • 平均0.003秒(501次元) • 圧倒的スピード
© DMM dgesv_のパフォーマンス 28 結果 • 平均14.353秒(10,001次元) • 約20倍の次元にも関わらず圧倒的スピード
© DMM 係数行列が特定の形なら、アルゴリズムを改善できる • 三重対角行列ならThomas法が使える • 下三角行列と上三角行列の積に変換し、後退代入してみよう! Thomas法で解いてみよう 29
© DMM Thomas法のコード 30
© DMM 結果 • 平均0.012秒!!(10,001次元) • 脅威のスピードでAccelerateフレームワークのdgesvに勝利 • 10倍にして100,001次元にしても平均0.261秒!! Thomas法のパフォーマンス
31
© DMM 32 やはりアルゴリズムを改善するのが最強か…
© DMM 33 と思うのはまだ早い
© DMM Accelerateフレームワークは強い 34
© DMM • 対称かつ正定値の三重対角行列専用関数もある • dptsv_関数が今回の場合使える dptsvで解いてみよう 35
© DMM 結果 • 平均0.172秒!!(100,001次元) • これがswiftyというやつか… dptsvのパフォーマンス 36
© DMM • 連立一次方程式を解くときはAccelerateフレームワークを使おう • ちなみにドキュメントはありません ◦ 使い方が知りたい人は懇親会で聞いてね まとめ 37
© DMM ご静聴ありがとうございました