画像処理での高速化のポイント
(有)シンビー
2016/7/13
高速化のポイント
• ボトルネックを探す
– プロファイリング
• データの依存関係
• メモリの配置
– キャッシュとバースト転送
• パイプライン
– レイテンシー
• 並列に処理
• パイプライン(もう一度)
– 最低限必要なデータがそろっていれば先に始められる
ボトルネックを探す
ボトル
ネック
処理時間の多いところ
関数名 処理時間
func0 7516
func1 1
func2 504
func3 341458
func4 121
0 100000 200000 300000 400000
func4
func3
func2
func1
func0
処理時間
処理時間
ボトルネック
プロファイリング(gcc)
• 関数呼び出しのたびに回数を記録
– 呼び出し回数の多い関数はインライン化すること
で処理スピードの向上が期待できる
• 定期的に実行アドレスを記録
– 処理しているアドレスから関数を特定し時間のか
かっている処理(ボトルネック)を割り出す。
– ボトルネックの処理が改善対象になる
プロファイリング(RTOS)
• 定期的に実行アドレスを記録
– 処理しているアドレスから関数を特定し時間のか
かっている処理(ボトルネック)を割り出す。
– 実行アドレスのすべてを記録できないのである程
度の幅ができる。
– ボトルネックの処理を推察し、それが改善対象に
なる
*1
*1 すべての RTOS がこの方法をとっているというわけではありません。
典型例ということで。
プロファイリング(RTOS)
アドレス 関数名 処理時間
0x0000 func0 7517
func1
0x4000 func2 342083
func3
func4
0x8000 func5 3668
func6
func7
func8
ボトルネック
プロファイリングの解像度が低いとボトルネックを正確に出せないことも。
=> さらに絞って解像度をあげる
func2 あるいは
func3 あるいは
func4
プロファイリング(RTOS)
解像度をあげて特定
アドレス 関数名 処理時間
0x0000 func0
func1
0x4000 func2 504
func3 341458
func4 121
0x8000 func5
func6
func7
func8
ボトルネック
プロファイリング(回数)
ボトルネック?
RTOS では関数の呼び出し回数を計測することが困難なこともある
アドレス 関数名 処理時間 処理回数
0x0000 func0 7517 17583
func1 3048
0x4000 func2 342083 55
func3 2346
func4 4140
0x8000 func5 3668 31
func6 3478
func7 223
func8 3654
データの依存関係
P(0, 0)
P(0, 1)
この中間の色をバイリニア
でもとめる場合、、、
P(1, 0)
P(1, 1)
データの依存関係
• ターゲットの色は次の色に依存する
– P(0, 0)
– P(1, 0)
– P(0, 1)
– P(1, 1)
• 依存しているデータは、すべてのデータがそ
ろわないと計算できない
データの依存関係
処理方式によっては依存するデータが広範囲に及ぶこともある
データの依存関係と高速化
• すべてのデータはそろっているか?
– データを早くそろえることで高速化
• データは一括でとれるか?
– データをすばやく連続的にとることで高速化
メモリの配置
• メモリを連続にしておくことで高速化が期待で
きる。
– CPU のキャッシュが効く
• ペリフェラルによっては L2 キャッシュを共有可能
– バス的にはバースト転送が可能
パイプライン
• 処理を細かくして並列化する技術
– 粒度の設定が重要
– ストールしないようにする
• パイプライン化で長い処理時間での処理数を
期待できる
– 処理時間を短縮するわけではない
パイプラインと高速化
• パイプライン化である種の高速化が期待でき
る
• レイテンシはあがることもある
並列に処理
• データの依存度がないところは並列に処理可
能
並列に処理
依存関係がなければ
並列に処理可能
並列処理
A = X + Y;
B = Z + X;
依存関係がないので
並列に処理可能
並列に処理して高速化
• 並列に処理することで高速化が期待できる
パイプライン(もう一度)
画像的にすべてのデータがそろっ
てなくても処理を先にできる
データの到着順
まだ到着していないデータ
パイプラインと高速化
• 最低限必要なデータがそろっていれば先に始
められる
• 先に始めることで(最後のデータ到着後から
最初の計算結果出力までの)レイテンシの短
縮が見込める
力尽きたのでこの辺で

More Related Content

PPTX
OverlayFS を使って Raspberry Pi を Network Bootする
KEY
ソーシャルゲームログ解析基盤のMongoDB活用事例
PDF
CouchDB JP & BigCouch
PPT
RubyとPost Gis
PDF
Webサーバの性能測定
PDF
Bgworkerで簡易クラスタ管理
PDF
lilo.linux.or.jp の話 (2017年12月)
PDF
20120721_ishkawa
OverlayFS を使って Raspberry Pi を Network Bootする
ソーシャルゲームログ解析基盤のMongoDB活用事例
CouchDB JP & BigCouch
RubyとPost Gis
Webサーバの性能測定
Bgworkerで簡易クラスタ管理
lilo.linux.or.jp の話 (2017年12月)
20120721_ishkawa

What's hot (20)

PPTX
ぼくの考えた最強のpipeline構成
PDF
alieaters_tokyo_20200325_yoshimura
PPTX
ギブミーパフォーマンス!〜DBスキーマを変更して高速化した話〜
PDF
コンピューターネットワーク入門
PPTX
HUで6000万pvのトラフィックを捌くまでに起ったことをありのままに話すぜ
PDF
思い通りにいかないのがWebなんて 割り切りたくないから (Gunma.web #4 2011/02/12)
PPTX
Ctb57 with god7
PDF
Rubyによるお手軽分散処理
PDF
Rubyで実はwritev(2) が使われているはなし
PPTX
これだけMakefile (Basics of makefile)
PPTX
Mmo game networking_1
PDF
Cocoa勉強会#33-意外に楽に使えるlibcurl
PPTX
Stream2の基本
PDF
2日間Fabricを触った俺が
 色々解説してみる
PPT
処理概要図&構築手順書1124
PDF
Road to ggplot2再入門
PDF
データベース実践入門読書会スペシャル #nseg
PDF
PIC RoR Heroku
PPTX
Gunosy.go#2 package/compress
PDF
机上の Kubernetes - 形式手法で見るコンテナオーケストレーション #NGK2016B
ぼくの考えた最強のpipeline構成
alieaters_tokyo_20200325_yoshimura
ギブミーパフォーマンス!〜DBスキーマを変更して高速化した話〜
コンピューターネットワーク入門
HUで6000万pvのトラフィックを捌くまでに起ったことをありのままに話すぜ
思い通りにいかないのがWebなんて 割り切りたくないから (Gunma.web #4 2011/02/12)
Ctb57 with god7
Rubyによるお手軽分散処理
Rubyで実はwritev(2) が使われているはなし
これだけMakefile (Basics of makefile)
Mmo game networking_1
Cocoa勉強会#33-意外に楽に使えるlibcurl
Stream2の基本
2日間Fabricを触った俺が
 色々解説してみる
処理概要図&構築手順書1124
Road to ggplot2再入門
データベース実践入門読書会スペシャル #nseg
PIC RoR Heroku
Gunosy.go#2 package/compress
机上の Kubernetes - 形式手法で見るコンテナオーケストレーション #NGK2016B
Ad

Viewers also liked (9)

PPTX
数値計算のための Python + FPGA
PPTX
Analog Devices の IP コアを使う
PPTX
20周遅れ
PPTX
SDSoC でストリーム
PPTX
SDSoC と Vivado
PPTX
Zynq + Vivado HLS入門
PPTX
Polyphony IO まとめ
PDF
How to Make Awesome SlideShares: Tips & Tricks
PDF
Getting Started With SlideShare
数値計算のための Python + FPGA
Analog Devices の IP コアを使う
20周遅れ
SDSoC でストリーム
SDSoC と Vivado
Zynq + Vivado HLS入門
Polyphony IO まとめ
How to Make Awesome SlideShares: Tips & Tricks
Getting Started With SlideShare
Ad

Similar to 高速化のポイント (14)

PPTX
nftables: the Next Generation Firewall in Linux
PDF
Scalable Cooperative File Caching with RDMA-Based Directory Management
PDF
[db analytics showcase Sapporo 2017] A15: Pythonでの分散処理再入門 by 株式会社HPCソリューションズ ...
PPTX
ビッグデータとioDriveの夕べ:ドリコムのデータ分析環境のお話
PDF
Bossan dentoo
PDF
NSG フローログを支える技術 - NVF Advanced Flow Logging
PDF
Richard high performance fuzzing ja
PPTX
Checkpointing Algorithms on In-memory DBMS
PDF
Osc2011 Do
PDF
Wacode 忙しいバイオインフォマティシャンのための時短ワンライナー
PPTX
OLD_Lt traffic analyse_OLD
PDF
Firefox 3.1 In Depth (?)
PDF
lua_nginx_module JSON-RPC 2.0 Batch Request
PDF
PHPデプロイツールの世界
nftables: the Next Generation Firewall in Linux
Scalable Cooperative File Caching with RDMA-Based Directory Management
[db analytics showcase Sapporo 2017] A15: Pythonでの分散処理再入門 by 株式会社HPCソリューションズ ...
ビッグデータとioDriveの夕べ:ドリコムのデータ分析環境のお話
Bossan dentoo
NSG フローログを支える技術 - NVF Advanced Flow Logging
Richard high performance fuzzing ja
Checkpointing Algorithms on In-memory DBMS
Osc2011 Do
Wacode 忙しいバイオインフォマティシャンのための時短ワンライナー
OLD_Lt traffic analyse_OLD
Firefox 3.1 In Depth (?)
lua_nginx_module JSON-RPC 2.0 Batch Request
PHPデプロイツールの世界

More from ryos36 (14)

PPTX
Pycairo を使ってみる その1
PPTX
ストーリーとは
PPTX
CNN でテニス選手の動きを解析する
PPTX
Polyphony の行く末(2018/3/3)
PPTX
Polyphony の並列化
PPTX
Polyphony 新機能ツアー
PPTX
Polyphony: Python ではじめる FPGA
PPTX
Stellaris を使った組み込みアプリ開発ガイド
PPTX
研究者のための Python による FPGA 入門
PPTX
PYNQ 祭り: Pmod のプログラミング
PPTX
90分 Scheme to C(勝手に抄訳版)
PPTX
並列計算への道 2015年版
PDF
NiosII と RTOS について
PPTX
Synthesijer で作るFORTH仮想マシン
Pycairo を使ってみる その1
ストーリーとは
CNN でテニス選手の動きを解析する
Polyphony の行く末(2018/3/3)
Polyphony の並列化
Polyphony 新機能ツアー
Polyphony: Python ではじめる FPGA
Stellaris を使った組み込みアプリ開発ガイド
研究者のための Python による FPGA 入門
PYNQ 祭り: Pmod のプログラミング
90分 Scheme to C(勝手に抄訳版)
並列計算への道 2015年版
NiosII と RTOS について
Synthesijer で作るFORTH仮想マシン

高速化のポイント