SlideShare ist ein Scribd-Unternehmen logo
1 von 23
画像処理での高速化のポイント
(有)シンビー
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;
依存関係がないので
並列に処理可能
並列に処理して高速化
• 並列に処理することで高速化が期待できる
パイプライン(もう一度)
画像的にすべてのデータがそろっ
てなくても処理を先にできる
データの到着順
まだ到着していないデータ
パイプラインと高速化
• 最低限必要なデータがそろっていれば先に始
められる
• 先に始めることで(最後のデータ到着後から
最初の計算結果出力までの)レイテンシの短
縮が見込める
力尽きたのでこの辺で

Weitere ähnliche Inhalte

Was ist angesagt?

Rubyによるお手軽分散処理
Rubyによるお手軽分散処理Rubyによるお手軽分散処理
Rubyによるお手軽分散処理
maebashi
 
2日間Fabricを触った俺が
 色々解説してみる
2日間Fabricを触った俺が
 色々解説してみる2日間Fabricを触った俺が
 色々解説してみる
2日間Fabricを触った俺が
 色々解説してみる
airtoxin Ishii
 
処理概要図&構築手順書1124
処理概要図&構築手順書1124処理概要図&構築手順書1124
処理概要図&構築手順書1124
Kazuki Miura
 
Gunosy.go#2 package/compress
Gunosy.go#2 package/compressGunosy.go#2 package/compress
Gunosy.go#2 package/compress
Shunsuke Aihara
 

Was ist angesagt? (20)

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

Andere mochten auch

Andere mochten auch (9)

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

Ähnlich wie 高速化のポイント

Bossan dentoo
Bossan dentooBossan dentoo
Bossan dentoo
kubo39
 

Ähnlich wie 高速化のポイント (14)

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

Mehr von ryos36

Mehr von ryos36 (14)

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

高速化のポイント