SlideShare a Scribd company logo
1 of 33
Download to read offline
Altera SDK for OpenCL勉強会
プロファイラGUIを用いたコード分析
@h_suzuki
• 「プロファイラGUIを用いたコード分析」というタ
イトルを最初に決めたものの、Altera SDK for
OpenCL の開発フロー全体像がないとイメー
ジできないのでは…
• という事で全体にも簡単に触れます。
目次
• OpenCL 実装モデルと BSP
• Guaranteed タイミングフロー
• カーネル・プログラム開発フロー
• エミュレータ
• オプティマイゼーション・レポート
• エリア・レポート
• プロファイラ
• 処理データサイズの違いによるパイプライン稼働率の確認
• まとめ
• 参照資料
• Tips
Altera SDK for OpenCL
OpenCL モデル < StratixV の PCIeカード・モデル >
4
Host Code
main() {
read_data( … );
manipulate( … );
clEnqueueWriteBuffer( … );
clEnqueueNDRange(…,sum,…);
clEnqueueReadBuffer( … );
display_result( … );
} Standard
gcc
Compiler
EXE
Altera
Offline
Compiler
AOCX
__kernel void sum
(__global float *a,
__global float *b,
__global float *y)
{
int gid = get_global_id(0);
y[gid] = a[gid] + b[gid];
}
Verilog
Quartus II
OpenCL Accelerator Code
PCIe カードタイプでは、 clEnqueueWriteBuffer I の実行によりホスト( PC ) のメインメモリ
から、PCIe 経由でターゲット (FPGA )のメインメモリへデータを転送
OpenCL 開発の仕組み : BSP
5
PCIe gen2x8
Host Interface
インターコネクト
DDR3 メモリ
インターフェース
10Gb MAC/UOE
Data Interface
10Gb MAC/UOE
Data Interface
DDR3 メモリ
インターフェース
QDRII メモリ
インターフェース
QDRII メモリ
インターフェース
OpenCL
Kernels
OpenCL
Kernels
DDR
DDR
QDR
QDR
10G
ネット
ワーク
ホスト
OpenCL開発するには BSP が必要。
全ての評価ボードで OpenCL 開発できるわけではないので注意
標準のFPGA 開発ツールで
BSP を設計
OpenCL コンパイラで
ビルドしたモジュールが
BSP
OpenCLコンパイル手法
Guaranteed タイミングフロー
6
kernel.cl
AOC
Synthesis / P&R / STA on the
OpencL Kernels ONLY
Reconfig kernel PLL
DONE!
Post-fit QXP partition (PCIe,
UniPHY, DMA, …)Boardspec.xml
Re-run STA with the new
PLL value
Meet
Timin
g
No
Yes
タイミングがメットしたら
PLL の値を ROM に保持
Altera SDK for OpenCL
OpenCL カーネル・プログラム開発フロー
7
OpenCL カーネル・プログラムの作成
○ PC 上での検証
・x86 エミュレータ
・オプティマイゼーションレポート
・Visualizer
( コンパイル時間 : sec ~ min )
○ 実機検証
・プロファイラ GUI
( コンパイル時間 : hours )
要求性能を
満たせていない場合
DONE!
・基本デバッグ(文法/機能)
・パイプラインのストール多
・消費リソース多
エミュレータ
• カーネル・プログラムを x86 用にコンパイル するオプション
• 生成される aocx は x86 の実行体
• カーネルプログラム内で printf を使用したデバッグ
• 適用方法
• コンパイル時に -march=emulator を追加
• $ aoc -v --report -march=emulator vector_add.cl -o vector_add.aocx --board s5phq
オプティマイゼーション・レポート
• ループ文におけるキャリーの依存やループ展開など性能に影響を与える
要因となる項目の解析を行う
• -g はコンパイル時間やメモリにあまり影響しないため常にONを推奨
• レポートは下記のコマンド例では、tdfir/tdfir.log として生成される
• 適用方法
• コンパイル時に -g を追加
• $ aoc -v -g --report -c device/tdfir.cl -o tdfir.aocx --board s5phq
エリア・レポート
• 消費リソースのマッピングを解析、表示するツール
• どの行でどの程度のリソース消費するかを確認
• 適用方法
• コンパイル時に -g を追加し、生成される aoco/aocx に対して以下を実行
• HTML ファイルが生成される
• $ aocl analyze-area <kernel_name>.aoco
• $ aocl analyze-area <kernel_name>.aocx
プロファイラ
ボトルネックが
• 外部メモリ転送にあるのか
• ホスト・デバイス間の通信にあるのか
• カーネル・プログラムにあるのか
• チャネル転送にあるのか
を実機を使って確認するツール
※アルテラのベンダ拡張機能。
OpenCL コードと Qsys IP を Avalone-ST で
通信する I/O チャネル 、カーネル・プログラム間を
通信するデータチャネルの2種類のチャネル転送がある
カーネルA
BittWare社の Arria 10 GX 搭載ボード、A10PL4
プロファイラの仕組み
• Altera SDK for OpenCL では、 カーネル・プログラムのコード が ハード
ウェア化されてパイプラインが構築される
• 生成した パイプラインに パフォーマンス・カウンタ と プロファイリングロ
ジック を実装し、実機実行時に統計情報を取得
プロファイラの仕組み
• 物理的にカウンタを実装するため
• リソースへの影響:有り
• 性能への影響:有り
Profiler ALUTs Registers Logic utilization DSP Memory bits RAM blocks fmax
vector_add No 41795 59902 40628 0 1686880 351 288
vector_add Yes 43718 61915 41690 0 1686880 351 279
channelizer No 138616 221048 113430 196 8477664 729 276
channelizer Yes 144324 226809 116827 196 8477664 729 271
tdfir No 228931 353738 176046 512 2213954 352 263
tdfir Yes 229290 356544 275054 512 2213954 352 261
jpeg_decoder No 101077 176700 94906 160 5334304 751 182
jpeg_decoder Yes 138790 214375 115218 160 5334304 751 180
プロファイラを適用時の消費リソース差分及び fmax 差分
( ツール : Quartus Prime Standard v16.0.0 b211、ターゲットボード : BittWare S5PHQ D8 )
プロファイラの利用方法
• 適用方法
• コンパイル時に --profile を追加
• $ aoc -v --report --profile vector_add.cl -o vector_add.aocx --board s5phq
• 使用方法
• 実機実行完了後、統計情報がファイル( profile.mon )に書き出されるのでユー
ティリティ・ツール、aocl を使用してプロファイラ起動する
• $ aocl report vector_add.aocx profile.mon
プロファイラ GUI の見方
Source Code タブ
• Altera SDK for OpenCL で構築したパイプラインにおいて、ストールが
発生している箇所、メモリ転送の効率を確認できる
タブ名 説明
Attributes メモリ転送やチャネル転送の属性を表す
メモリタイプ: ローカル、グローバル
対象のメモリ: DDR、QDR
転送の種類 : リードやライトなど
Stall% メモリ及びチャネルアクセスによりパイプラインがストールしている割合
Occupancy% カーネルプログラムがメモリ転送及びチャネル転送を実行している割合
Bandwidth 平均のメモリ・アクセス速度及び効率
転送サイズとロード、ストアユニットの数によって効率が変わる
プロファイラ GUI の見方
Source Code タブ
• Occupancy% が低い
• パイプラインの稼働率が低い
• カーネル実行していない期間が長いこととなり性能低下の要因となる
• Stall% が高い
• メモリアクセス、チャネル通信が競合
• アクセス・パターンがよくない
• チャネル通信においてリードとライトが大きく不均衡になっている
• Bandwidth の Efficiency が低い
• 有効なデータを得るのに帯域が多く必要
• アクセス・パターンがよくない
• 扱うデータ量が少なくオーバーヘッドが大きい
プロファイラ GUI の見方
Kernel Execution タブ
• カーネル・プログラム全体の実行プロセスをグラフィカルに表示
• 各カーネル・プログラムの実行時間及び相互関係を表示
• ホスト・プロセッサ上のデータを PCIe 経由で デバイスのグローバル・メモ
リに転送
• デフォルトでは表示されないため、ホスト・プログラム実行前に環境変数、
ACL_PROFILE_TIMER を 1 に設定すること
• $ export ACL_PROFILE_TIMER=1
プロファイラ GUI の見方
<Kernel 名> タブ
• カーネル・プログラムの動作周波数 ( fmax )
• パイプラインが使用しているメモリの帯域
処理データサイズの違いによる
パイプライン稼働率の確認
使用するプログラム: vector_add
• 浮動小数点の足し算のサンプル・プログラム
• 問題数を増減させてパイプラインの稼働率とプロファイラの表示を確認
// ホストアプリケーション main.cpp
// Problem data.
unsigned N = 1000000; // problem size
scoped_array<scoped_aligned_ptr<float> > input_a, input_b; // num_devices elements
scoped_array<scoped_aligned_ptr<float> > output; // num_devices elements
// OpenCL カーネル・プログラム
__kernel void vector_add(__global const float *x,
__global const float *y,
__global float *restrict z)
{
// get index of the work item
int index = get_global_id(0);
// add the vector elements
z[index] = x[index] + y[index];
}
N=1
• Bandwidth / Efficiency が低く、濃い赤で表示される
• Occupancy% は 1.1% …
N Stall% Occupancy% Bandwidth[MB/s] Efficiency[%] Turnaround Time[ms] Kernel Time[ms] Thoughput[MB/s]
1 0 1.1 196.4 6.3 0.532 0.029 32.9
N=10
• Bandwidth / Efficiency が依然として低く、赤で表示される
• Occupancy% は 9.9%
N Stall% Occupancy% Bandwidth[MB/s] Efficiency[%] Turnaround Time[ms] Kernel Time[ms] Thoughput[MB/s]
10 0 9.9 180.8 62.5 0.351 0.014 681.2
N=100
• Bandwidth / Efficiency があがったが薄い赤で表示される
• Occupancy% は 50.6%
N Stall% Occupancy% Bandwidth[MB/s] Efficiency[%] Turnaround Time[ms] Kernel Time[ms] Thoughput[MB/s]
100 0 50.6 651.2 89.3 0.553 0.024 3973.6
N=1000
• Bandwidth / Efficiency が通常の色になった
• Occupancy% は 88.5%
N Stall% Occupancy% Bandwidth[MB/s] Efficiency[%] Turnaround Time[ms] Kernel Time[ms] Thoughput[MB/s]
1000 0 88.5 1026.0 99.2 0.903 0.042 22706.5
N=10000
• Efficiency は 100%。
N Stall% Occupancy% Bandwidth[MB/s] Efficiency[%] Turnaround Time[ms] Kernel Time[ms] Thoughput[MB/s]
10000 0 98.9 1136.6 100.0 0.876 0.066 144496.1
N=100000
N Stall% Occupancy% Bandwidth[MB/s] Efficiency[%] Turnaround Time[ms] Kernel Time[ms] Thoughput[MB/s]
100000 0 99.9 1148.0 100.0 2.036 0.415 229801.0
N=1000000
• vector_add のサンプルにおけるデフォルト値
N Stall% Occupancy% Bandwidth[MB/s] Efficiency[%] Turnaround Time[ms] Kernel Time[ms] Thoughput[MB/s]
1000000 0 100.0 1150.0 100.0 9.368 3.531 270086.2
N=10000000
• N=1000000 の時とスループットは同等
N Stall% Occupancy% Bandwidth[MB/s] Efficiency[%] Turnaround Time[ms] Kernel Time[ms] Thoughput[MB/s]
10000000 0 100.0 1150.0 100.0 81.121 34.806 273997.1
データサイズの違いによる効率の差
N Stall% Occupancy% Bandwidth[MB/s] Efficiency[%] Turnaround Time[ms] Kernel Time[ms] Thoughput[MB/s]
1 0 1.1 196.4 6.3 0.532 0.029 32.9
10 0 9.9 180.8 62.5 0.351 0.014 681.2
100 0 50.6 651.2 89.3 0.553 0.024 3973.6
1000 0 88.5 1026.0 99.2 0.903 0.042 22706.5
10000 0 98.9 1136.6 100.0 0.876 0.066 144496.1
100000 0 99.9 1148.0 100.0 2.036 0.415 229801.0
1000000 0 100.0 1150.0 100.0 9.368 3.531 270086.2
10000000 0 100.0 1150.0 100.0 81.121 34.806 273997.1
N=10000
N=1000000
おまけ
• Multithread Vector Operation Design Example ( NEW !! )
• コマンド・キューを 2個用意して マルチスレッドで複数カーネルを動作
• C=A x B と C=A + B
↑ デフォルトのコードを実行した際のプロファイラ表示
↑ ベリファイのコード削除
まとめ
• カーネルの実行時間、パイプラインの稼働率、メモリ
アクセスの効率をグラフィカルに表示できるプロファイ
ラはボトルネック解析に便利
• エミュレータ、オプティマイゼーション・レポートによる
PC上での検証とあわせてそれぞれのツールをうまく
使う事で開発効率向上が期待できる
参照資料
• Altera SDK for OpenCL Programming Guide (2016.05.02)
• https://www.altera.com/en_US/pdfs/literature/hb/opencl-
sdk/aocl_programming_guide.pdf
• Altera SDK for OpenCL Best Practices Guide (2016.05.02)
• https://www.altera.com/en_US/pdfs/literature/hb/opencl-sdk/aocl-best-practices-
guide.pdf
• OpenCL Vector Addition Design Example ( v16.0 )
• https://www.altera.com/support/support-resources/design-
examples/design-software/opencl/vector-addition.html
• Multithread Vector Operation Design Example( v16.0 )
• https://www.altera.com/support/support-resources/design-
examples/design-software/opencl/multithreaded-vector-operation.html
ご清聴ありがとうございました

More Related Content

What's hot

増え続ける情報に対応するためのFPGA基礎知識
増え続ける情報に対応するためのFPGA基礎知識増え続ける情報に対応するためのFPGA基礎知識
増え続ける情報に対応するためのFPGA基礎知識なおき きしだ
 
FPGAで作るOpenFlow Switch (FPGAエクストリーム・コンピューティング 第6回) FPGAX#6
FPGAで作るOpenFlow Switch (FPGAエクストリーム・コンピューティング 第6回) FPGAX#6FPGAで作るOpenFlow Switch (FPGAエクストリーム・コンピューティング 第6回) FPGAX#6
FPGAで作るOpenFlow Switch (FPGAエクストリーム・コンピューティング 第6回) FPGAX#6Kentaro Ebisawa
 
PyCoRAMを用いたグラフ処理FPGAアクセラレータ
PyCoRAMを用いたグラフ処理FPGAアクセラレータPyCoRAMを用いたグラフ処理FPGAアクセラレータ
PyCoRAMを用いたグラフ処理FPGAアクセラレータShinya Takamaeda-Y
 
Pythonによる高位設計フレームワークPyCoRAMでFPGAシステムを開発してみよう
Pythonによる高位設計フレームワークPyCoRAMでFPGAシステムを開発してみようPythonによる高位設計フレームワークPyCoRAMでFPGAシステムを開発してみよう
Pythonによる高位設計フレームワークPyCoRAMでFPGAシステムを開発してみようShinya Takamaeda-Y
 
マルチパラダイム型高水準ハードウェア設計環境の検討
マルチパラダイム型高水準ハードウェア設計環境の検討マルチパラダイム型高水準ハードウェア設計環境の検討
マルチパラダイム型高水準ハードウェア設計環境の検討Shinya Takamaeda-Y
 
メモリ抽象化フレームワークPyCoRAMを用いたソフトプロセッサ混載FPGAアクセラレータの開発
メモリ抽象化フレームワークPyCoRAMを用いたソフトプロセッサ混載FPGAアクセラレータの開発メモリ抽象化フレームワークPyCoRAMを用いたソフトプロセッサ混載FPGAアクセラレータの開発
メモリ抽象化フレームワークPyCoRAMを用いたソフトプロセッサ混載FPGAアクセラレータの開発Shinya Takamaeda-Y
 
FPGAのトレンドをまとめてみた
FPGAのトレンドをまとめてみたFPGAのトレンドをまとめてみた
FPGAのトレンドをまとめてみたTakefumi MIYOSHI
 
PyCoRAM: Python-Verilog高位合成とメモリ抽象化によるFPGAアクセラレータ向けIPコア開発フレームワーク (FPGAX #05)
PyCoRAM: Python-Verilog高位合成とメモリ抽象化によるFPGAアクセラレータ向けIPコア開発フレームワーク (FPGAX #05)PyCoRAM: Python-Verilog高位合成とメモリ抽象化によるFPGAアクセラレータ向けIPコア開発フレームワーク (FPGAX #05)
PyCoRAM: Python-Verilog高位合成とメモリ抽象化によるFPGAアクセラレータ向けIPコア開発フレームワーク (FPGAX #05)Shinya Takamaeda-Y
 
PyCoRAM (高位合成友の会@ドワンゴ, 2015年1月16日)
PyCoRAM (高位合成友の会@ドワンゴ, 2015年1月16日)PyCoRAM (高位合成友の会@ドワンゴ, 2015年1月16日)
PyCoRAM (高位合成友の会@ドワンゴ, 2015年1月16日)Shinya Takamaeda-Y
 
FPGA・リコンフィギャラブルシステム研究の最新動向
FPGA・リコンフィギャラブルシステム研究の最新動向FPGA・リコンフィギャラブルシステム研究の最新動向
FPGA・リコンフィギャラブルシステム研究の最新動向Shinya Takamaeda-Y
 
FPGA+SoC+Linux実践勉強会資料
FPGA+SoC+Linux実践勉強会資料FPGA+SoC+Linux実践勉強会資料
FPGA+SoC+Linux実践勉強会資料一路 川染
 
コンピュータアーキテクチャ研究の最新動向〜ISCA2015参加報告〜 @FPGAエクストリーム・コンピューティング 第7回 (#fpgax #7)
コンピュータアーキテクチャ研究の最新動向〜ISCA2015参加報告〜 @FPGAエクストリーム・コンピューティング 第7回 (#fpgax #7)コンピュータアーキテクチャ研究の最新動向〜ISCA2015参加報告〜 @FPGAエクストリーム・コンピューティング 第7回 (#fpgax #7)
コンピュータアーキテクチャ研究の最新動向〜ISCA2015参加報告〜 @FPGAエクストリーム・コンピューティング 第7回 (#fpgax #7)Shinya Takamaeda-Y
 
PyCoRAMによるPythonを用いたポータブルなFPGAアクセラレータ開発 (チュートリアル@ESS2014)
PyCoRAMによるPythonを用いたポータブルなFPGAアクセラレータ開発 (チュートリアル@ESS2014)PyCoRAMによるPythonを用いたポータブルなFPGAアクセラレータ開発 (チュートリアル@ESS2014)
PyCoRAMによるPythonを用いたポータブルなFPGAアクセラレータ開発 (チュートリアル@ESS2014)Shinya Takamaeda-Y
 

What's hot (20)

増え続ける情報に対応するためのFPGA基礎知識
増え続ける情報に対応するためのFPGA基礎知識増え続ける情報に対応するためのFPGA基礎知識
増え続ける情報に対応するためのFPGA基礎知識
 
FPGAで作るOpenFlow Switch (FPGAエクストリーム・コンピューティング 第6回) FPGAX#6
FPGAで作るOpenFlow Switch (FPGAエクストリーム・コンピューティング 第6回) FPGAX#6FPGAで作るOpenFlow Switch (FPGAエクストリーム・コンピューティング 第6回) FPGAX#6
FPGAで作るOpenFlow Switch (FPGAエクストリーム・コンピューティング 第6回) FPGAX#6
 
PyCoRAMを用いたグラフ処理FPGAアクセラレータ
PyCoRAMを用いたグラフ処理FPGAアクセラレータPyCoRAMを用いたグラフ処理FPGAアクセラレータ
PyCoRAMを用いたグラフ処理FPGAアクセラレータ
 
Pythonによる高位設計フレームワークPyCoRAMでFPGAシステムを開発してみよう
Pythonによる高位設計フレームワークPyCoRAMでFPGAシステムを開発してみようPythonによる高位設計フレームワークPyCoRAMでFPGAシステムを開発してみよう
Pythonによる高位設計フレームワークPyCoRAMでFPGAシステムを開発してみよう
 
20140310 fpgax
20140310 fpgax20140310 fpgax
20140310 fpgax
 
Gpu vs fpga
Gpu vs fpgaGpu vs fpga
Gpu vs fpga
 
なにわTech20160827
なにわTech20160827なにわTech20160827
なにわTech20160827
 
マルチパラダイム型高水準ハードウェア設計環境の検討
マルチパラダイム型高水準ハードウェア設計環境の検討マルチパラダイム型高水準ハードウェア設計環境の検討
マルチパラダイム型高水準ハードウェア設計環境の検討
 
メモリ抽象化フレームワークPyCoRAMを用いたソフトプロセッサ混載FPGAアクセラレータの開発
メモリ抽象化フレームワークPyCoRAMを用いたソフトプロセッサ混載FPGAアクセラレータの開発メモリ抽象化フレームワークPyCoRAMを用いたソフトプロセッサ混載FPGAアクセラレータの開発
メモリ抽象化フレームワークPyCoRAMを用いたソフトプロセッサ混載FPGAアクセラレータの開発
 
FPGAのトレンドをまとめてみた
FPGAのトレンドをまとめてみたFPGAのトレンドをまとめてみた
FPGAのトレンドをまとめてみた
 
FPGA
FPGAFPGA
FPGA
 
PyCoRAM: Python-Verilog高位合成とメモリ抽象化によるFPGAアクセラレータ向けIPコア開発フレームワーク (FPGAX #05)
PyCoRAM: Python-Verilog高位合成とメモリ抽象化によるFPGAアクセラレータ向けIPコア開発フレームワーク (FPGAX #05)PyCoRAM: Python-Verilog高位合成とメモリ抽象化によるFPGAアクセラレータ向けIPコア開発フレームワーク (FPGAX #05)
PyCoRAM: Python-Verilog高位合成とメモリ抽象化によるFPGAアクセラレータ向けIPコア開発フレームワーク (FPGAX #05)
 
PyCoRAM (高位合成友の会@ドワンゴ, 2015年1月16日)
PyCoRAM (高位合成友の会@ドワンゴ, 2015年1月16日)PyCoRAM (高位合成友の会@ドワンゴ, 2015年1月16日)
PyCoRAM (高位合成友の会@ドワンゴ, 2015年1月16日)
 
FPGA・リコンフィギャラブルシステム研究の最新動向
FPGA・リコンフィギャラブルシステム研究の最新動向FPGA・リコンフィギャラブルシステム研究の最新動向
FPGA・リコンフィギャラブルシステム研究の最新動向
 
FPGA+SoC+Linux実践勉強会資料
FPGA+SoC+Linux実践勉強会資料FPGA+SoC+Linux実践勉強会資料
FPGA+SoC+Linux実践勉強会資料
 
コンピュータアーキテクチャ研究の最新動向〜ISCA2015参加報告〜 @FPGAエクストリーム・コンピューティング 第7回 (#fpgax #7)
コンピュータアーキテクチャ研究の最新動向〜ISCA2015参加報告〜 @FPGAエクストリーム・コンピューティング 第7回 (#fpgax #7)コンピュータアーキテクチャ研究の最新動向〜ISCA2015参加報告〜 @FPGAエクストリーム・コンピューティング 第7回 (#fpgax #7)
コンピュータアーキテクチャ研究の最新動向〜ISCA2015参加報告〜 @FPGAエクストリーム・コンピューティング 第7回 (#fpgax #7)
 
20161120_HPCでFPGAを使ってみたい_fpgastartup
20161120_HPCでFPGAを使ってみたい_fpgastartup20161120_HPCでFPGAを使ってみたい_fpgastartup
20161120_HPCでFPGAを使ってみたい_fpgastartup
 
Myoshimi extreme
Myoshimi extremeMyoshimi extreme
Myoshimi extreme
 
PyCoRAMによるPythonを用いたポータブルなFPGAアクセラレータ開発 (チュートリアル@ESS2014)
PyCoRAMによるPythonを用いたポータブルなFPGAアクセラレータ開発 (チュートリアル@ESS2014)PyCoRAMによるPythonを用いたポータブルなFPGAアクセラレータ開発 (チュートリアル@ESS2014)
PyCoRAMによるPythonを用いたポータブルなFPGAアクセラレータ開発 (チュートリアル@ESS2014)
 
FPGAことはじめ
FPGAことはじめFPGAことはじめ
FPGAことはじめ
 

Viewers also liked

Altera SDK for OpenCL解体新書 : ホストとデバイスの関係
Altera SDK for OpenCL解体新書 : ホストとデバイスの関係Altera SDK for OpenCL解体新書 : ホストとデバイスの関係
Altera SDK for OpenCL解体新書 : ホストとデバイスの関係Mr. Vengineer
 
Altera SDK for OpenCL解体新書 perlスクリプト編
Altera SDK for OpenCL解体新書 perlスクリプト編Altera SDK for OpenCL解体新書 perlスクリプト編
Altera SDK for OpenCL解体新書 perlスクリプト編Mr. Vengineer
 
SDSoC解体新書2016.2版ソフトウェア編 (チラ見) : Inside SDSoC v2016.2 (Software short edtion)
SDSoC解体新書2016.2版ソフトウェア編 (チラ見) : Inside SDSoC v2016.2 (Software short edtion)SDSoC解体新書2016.2版ソフトウェア編 (チラ見) : Inside SDSoC v2016.2 (Software short edtion)
SDSoC解体新書2016.2版ソフトウェア編 (チラ見) : Inside SDSoC v2016.2 (Software short edtion)Mr. Vengineer
 
FPGAアクセラレータの作り方
FPGAアクセラレータの作り方FPGAアクセラレータの作り方
FPGAアクセラレータの作り方Mr. Vengineer
 
Intel Nervana Graph とは?
Intel Nervana Graph とは?Intel Nervana Graph とは?
Intel Nervana Graph とは?Mr. Vengineer
 
TensorFlow XLA とハードウェア
TensorFlow XLA とハードウェアTensorFlow XLA とハードウェア
TensorFlow XLA とハードウェアMr. Vengineer
 

Viewers also liked (6)

Altera SDK for OpenCL解体新書 : ホストとデバイスの関係
Altera SDK for OpenCL解体新書 : ホストとデバイスの関係Altera SDK for OpenCL解体新書 : ホストとデバイスの関係
Altera SDK for OpenCL解体新書 : ホストとデバイスの関係
 
Altera SDK for OpenCL解体新書 perlスクリプト編
Altera SDK for OpenCL解体新書 perlスクリプト編Altera SDK for OpenCL解体新書 perlスクリプト編
Altera SDK for OpenCL解体新書 perlスクリプト編
 
SDSoC解体新書2016.2版ソフトウェア編 (チラ見) : Inside SDSoC v2016.2 (Software short edtion)
SDSoC解体新書2016.2版ソフトウェア編 (チラ見) : Inside SDSoC v2016.2 (Software short edtion)SDSoC解体新書2016.2版ソフトウェア編 (チラ見) : Inside SDSoC v2016.2 (Software short edtion)
SDSoC解体新書2016.2版ソフトウェア編 (チラ見) : Inside SDSoC v2016.2 (Software short edtion)
 
FPGAアクセラレータの作り方
FPGAアクセラレータの作り方FPGAアクセラレータの作り方
FPGAアクセラレータの作り方
 
Intel Nervana Graph とは?
Intel Nervana Graph とは?Intel Nervana Graph とは?
Intel Nervana Graph とは?
 
TensorFlow XLA とハードウェア
TensorFlow XLA とハードウェアTensorFlow XLA とハードウェア
TensorFlow XLA とハードウェア
 

Similar to プロファイラGuiを用いたコード分析 20160610

アドテク×Scala×パフォーマンスチューニング
アドテク×Scala×パフォーマンスチューニングアドテク×Scala×パフォーマンスチューニング
アドテク×Scala×パフォーマンスチューニングYosuke Mizutani
 
実践!DBベンチマークツールの使い方
実践!DBベンチマークツールの使い方実践!DBベンチマークツールの使い方
実践!DBベンチマークツールの使い方Fujishiro Takuya
 
Java でつくる 低レイテンシ実装の技巧
Java でつくる低レイテンシ実装の技巧Java でつくる低レイテンシ実装の技巧
Java でつくる 低レイテンシ実装の技巧 Ryosuke Yamazaki
 
20130714 July Tech Festa 日本CloudStackユーザー会
20130714 July Tech Festa 日本CloudStackユーザー会20130714 July Tech Festa 日本CloudStackユーザー会
20130714 July Tech Festa 日本CloudStackユーザー会samemoon
 
文献紹介:SegFormer: Simple and Efficient Design for Semantic Segmentation with Tr...
文献紹介:SegFormer: Simple and Efficient Design for Semantic Segmentation with Tr...文献紹介:SegFormer: Simple and Efficient Design for Semantic Segmentation with Tr...
文献紹介:SegFormer: Simple and Efficient Design for Semantic Segmentation with Tr...Toru Tamaki
 
Zabbixでvmc statsの情報など監視
Zabbixでvmc statsの情報など監視Zabbixでvmc statsの情報など監視
Zabbixでvmc statsの情報など監視Shota Onishi
 
企業におけるSpring@日本springユーザー会20090624
企業におけるSpring@日本springユーザー会20090624企業におけるSpring@日本springユーザー会20090624
企業におけるSpring@日本springユーザー会20090624Yusuke Suzuki
 
OpenStack Kilo with 6Wind VA High-Performance Networking Using DPDK - OpenSta...
OpenStack Kilo with 6Wind VA High-Performance Networking Using DPDK - OpenSta...OpenStack Kilo with 6Wind VA High-Performance Networking Using DPDK - OpenSta...
OpenStack Kilo with 6Wind VA High-Performance Networking Using DPDK - OpenSta...VirtualTech Japan Inc.
 
サイボウズ・ラボユース成果発表会資料
サイボウズ・ラボユース成果発表会資料サイボウズ・ラボユース成果発表会資料
サイボウズ・ラボユース成果発表会資料masahiro13
 
Qlik TECH TALK 20210706 SAPデータ分析を加速するQlikのアクセレレーターパッケージご紹介
Qlik TECH TALK 20210706 SAPデータ分析を加速するQlikのアクセレレーターパッケージご紹介Qlik TECH TALK 20210706 SAPデータ分析を加速するQlikのアクセレレーターパッケージご紹介
Qlik TECH TALK 20210706 SAPデータ分析を加速するQlikのアクセレレーターパッケージご紹介QlikPresalesJapan
 
Maatkit で MySQL チューニング
Maatkit で MySQL チューニングMaatkit で MySQL チューニング
Maatkit で MySQL チューニングKensuke Nagae
 
PL/CUDA - Fusion of HPC Grade Power with In-Database Analytics
PL/CUDA - Fusion of HPC Grade Power with In-Database AnalyticsPL/CUDA - Fusion of HPC Grade Power with In-Database Analytics
PL/CUDA - Fusion of HPC Grade Power with In-Database AnalyticsKohei KaiGai
 
Share pointを支えるsql server2014最新情報 tokyo_公開用
Share pointを支えるsql server2014最新情報 tokyo_公開用Share pointを支えるsql server2014最新情報 tokyo_公開用
Share pointを支えるsql server2014最新情報 tokyo_公開用Yukio Kumazawa
 
2015-07-27 Docker Introduction 〜Dockerの基礎とユースケースに関する考察〜
2015-07-27 Docker Introduction 〜Dockerの基礎とユースケースに関する考察〜2015-07-27 Docker Introduction 〜Dockerの基礎とユースケースに関する考察〜
2015-07-27 Docker Introduction 〜Dockerの基礎とユースケースに関する考察〜Shuji Yamada
 
HandlerSocket plugin for MySQL
HandlerSocket plugin for MySQLHandlerSocket plugin for MySQL
HandlerSocket plugin for MySQLakirahiguchi
 
20160728 hyperscale #03
20160728 hyperscale #0320160728 hyperscale #03
20160728 hyperscale #03ManaMurakami1
 
GKEで半年運用してみた
GKEで半年運用してみたGKEで半年運用してみた
GKEで半年運用してみたKatsutoshi Nagaoka
 
Windows Server 2016 で作るシンプルなハイパーコンバージドインフラ (Microsoft TechSummit 2016)
Windows Server 2016 で作るシンプルなハイパーコンバージドインフラ (Microsoft TechSummit 2016)Windows Server 2016 で作るシンプルなハイパーコンバージドインフラ (Microsoft TechSummit 2016)
Windows Server 2016 で作るシンプルなハイパーコンバージドインフラ (Microsoft TechSummit 2016)Takamasa Maejima
 
KubeFlow MeetUp #1 Katibよもやま話
KubeFlow MeetUp #1 Katibよもやま話KubeFlow MeetUp #1 Katibよもやま話
KubeFlow MeetUp #1 Katibよもやま話Yuji Oshima
 
Sparkパフォーマンス検証
Sparkパフォーマンス検証Sparkパフォーマンス検証
Sparkパフォーマンス検証BrainPad Inc.
 

Similar to プロファイラGuiを用いたコード分析 20160610 (20)

アドテク×Scala×パフォーマンスチューニング
アドテク×Scala×パフォーマンスチューニングアドテク×Scala×パフォーマンスチューニング
アドテク×Scala×パフォーマンスチューニング
 
実践!DBベンチマークツールの使い方
実践!DBベンチマークツールの使い方実践!DBベンチマークツールの使い方
実践!DBベンチマークツールの使い方
 
Java でつくる 低レイテンシ実装の技巧
Java でつくる低レイテンシ実装の技巧Java でつくる低レイテンシ実装の技巧
Java でつくる 低レイテンシ実装の技巧
 
20130714 July Tech Festa 日本CloudStackユーザー会
20130714 July Tech Festa 日本CloudStackユーザー会20130714 July Tech Festa 日本CloudStackユーザー会
20130714 July Tech Festa 日本CloudStackユーザー会
 
文献紹介:SegFormer: Simple and Efficient Design for Semantic Segmentation with Tr...
文献紹介:SegFormer: Simple and Efficient Design for Semantic Segmentation with Tr...文献紹介:SegFormer: Simple and Efficient Design for Semantic Segmentation with Tr...
文献紹介:SegFormer: Simple and Efficient Design for Semantic Segmentation with Tr...
 
Zabbixでvmc statsの情報など監視
Zabbixでvmc statsの情報など監視Zabbixでvmc statsの情報など監視
Zabbixでvmc statsの情報など監視
 
企業におけるSpring@日本springユーザー会20090624
企業におけるSpring@日本springユーザー会20090624企業におけるSpring@日本springユーザー会20090624
企業におけるSpring@日本springユーザー会20090624
 
OpenStack Kilo with 6Wind VA High-Performance Networking Using DPDK - OpenSta...
OpenStack Kilo with 6Wind VA High-Performance Networking Using DPDK - OpenSta...OpenStack Kilo with 6Wind VA High-Performance Networking Using DPDK - OpenSta...
OpenStack Kilo with 6Wind VA High-Performance Networking Using DPDK - OpenSta...
 
サイボウズ・ラボユース成果発表会資料
サイボウズ・ラボユース成果発表会資料サイボウズ・ラボユース成果発表会資料
サイボウズ・ラボユース成果発表会資料
 
Qlik TECH TALK 20210706 SAPデータ分析を加速するQlikのアクセレレーターパッケージご紹介
Qlik TECH TALK 20210706 SAPデータ分析を加速するQlikのアクセレレーターパッケージご紹介Qlik TECH TALK 20210706 SAPデータ分析を加速するQlikのアクセレレーターパッケージご紹介
Qlik TECH TALK 20210706 SAPデータ分析を加速するQlikのアクセレレーターパッケージご紹介
 
Maatkit で MySQL チューニング
Maatkit で MySQL チューニングMaatkit で MySQL チューニング
Maatkit で MySQL チューニング
 
PL/CUDA - Fusion of HPC Grade Power with In-Database Analytics
PL/CUDA - Fusion of HPC Grade Power with In-Database AnalyticsPL/CUDA - Fusion of HPC Grade Power with In-Database Analytics
PL/CUDA - Fusion of HPC Grade Power with In-Database Analytics
 
Share pointを支えるsql server2014最新情報 tokyo_公開用
Share pointを支えるsql server2014最新情報 tokyo_公開用Share pointを支えるsql server2014最新情報 tokyo_公開用
Share pointを支えるsql server2014最新情報 tokyo_公開用
 
2015-07-27 Docker Introduction 〜Dockerの基礎とユースケースに関する考察〜
2015-07-27 Docker Introduction 〜Dockerの基礎とユースケースに関する考察〜2015-07-27 Docker Introduction 〜Dockerの基礎とユースケースに関する考察〜
2015-07-27 Docker Introduction 〜Dockerの基礎とユースケースに関する考察〜
 
HandlerSocket plugin for MySQL
HandlerSocket plugin for MySQLHandlerSocket plugin for MySQL
HandlerSocket plugin for MySQL
 
20160728 hyperscale #03
20160728 hyperscale #0320160728 hyperscale #03
20160728 hyperscale #03
 
GKEで半年運用してみた
GKEで半年運用してみたGKEで半年運用してみた
GKEで半年運用してみた
 
Windows Server 2016 で作るシンプルなハイパーコンバージドインフラ (Microsoft TechSummit 2016)
Windows Server 2016 で作るシンプルなハイパーコンバージドインフラ (Microsoft TechSummit 2016)Windows Server 2016 で作るシンプルなハイパーコンバージドインフラ (Microsoft TechSummit 2016)
Windows Server 2016 で作るシンプルなハイパーコンバージドインフラ (Microsoft TechSummit 2016)
 
KubeFlow MeetUp #1 Katibよもやま話
KubeFlow MeetUp #1 Katibよもやま話KubeFlow MeetUp #1 Katibよもやま話
KubeFlow MeetUp #1 Katibよもやま話
 
Sparkパフォーマンス検証
Sparkパフォーマンス検証Sparkパフォーマンス検証
Sparkパフォーマンス検証
 

Recently uploaded

Postman LT Fukuoka_Quick Prototype_By Daniel
Postman LT Fukuoka_Quick Prototype_By DanielPostman LT Fukuoka_Quick Prototype_By Daniel
Postman LT Fukuoka_Quick Prototype_By Danieldanielhu54
 
[DevOpsDays Tokyo 2024] 〜デジタルとアナログのはざまに〜 スマートビルディング爆速開発を支える 自動化テスト戦略
[DevOpsDays Tokyo 2024] 〜デジタルとアナログのはざまに〜 スマートビルディング爆速開発を支える 自動化テスト戦略[DevOpsDays Tokyo 2024] 〜デジタルとアナログのはざまに〜 スマートビルディング爆速開発を支える 自動化テスト戦略
[DevOpsDays Tokyo 2024] 〜デジタルとアナログのはざまに〜 スマートビルディング爆速開発を支える 自動化テスト戦略Ryo Sasaki
 
スマートフォンを用いた新生児あやし動作の教示システム
スマートフォンを用いた新生児あやし動作の教示システムスマートフォンを用いた新生児あやし動作の教示システム
スマートフォンを用いた新生児あやし動作の教示システムsugiuralab
 
Open Source UN-Conference 2024 Kawagoe - 独自OS「DaisyOS GB」の紹介
Open Source UN-Conference 2024 Kawagoe - 独自OS「DaisyOS GB」の紹介Open Source UN-Conference 2024 Kawagoe - 独自OS「DaisyOS GB」の紹介
Open Source UN-Conference 2024 Kawagoe - 独自OS「DaisyOS GB」の紹介Yuma Ohgami
 
論文紹介:Semantic segmentation using Vision Transformers: A survey
論文紹介:Semantic segmentation using Vision Transformers: A survey論文紹介:Semantic segmentation using Vision Transformers: A survey
論文紹介:Semantic segmentation using Vision Transformers: A surveyToru Tamaki
 
TSAL operation mechanism and circuit diagram.pdf
TSAL operation mechanism and circuit diagram.pdfTSAL operation mechanism and circuit diagram.pdf
TSAL operation mechanism and circuit diagram.pdftaisei2219
 
SOPを理解する 2024/04/19 の勉強会で発表されたものです
SOPを理解する       2024/04/19 の勉強会で発表されたものですSOPを理解する       2024/04/19 の勉強会で発表されたものです
SOPを理解する 2024/04/19 の勉強会で発表されたものですiPride Co., Ltd.
 
論文紹介:Content-Aware Token Sharing for Efficient Semantic Segmentation With Vis...
論文紹介:Content-Aware Token Sharing for Efficient Semantic Segmentation With Vis...論文紹介:Content-Aware Token Sharing for Efficient Semantic Segmentation With Vis...
論文紹介:Content-Aware Token Sharing for Efficient Semantic Segmentation With Vis...Toru Tamaki
 
論文紹介:Automated Classification of Model Errors on ImageNet
論文紹介:Automated Classification of Model Errors on ImageNet論文紹介:Automated Classification of Model Errors on ImageNet
論文紹介:Automated Classification of Model Errors on ImageNetToru Tamaki
 

Recently uploaded (9)

Postman LT Fukuoka_Quick Prototype_By Daniel
Postman LT Fukuoka_Quick Prototype_By DanielPostman LT Fukuoka_Quick Prototype_By Daniel
Postman LT Fukuoka_Quick Prototype_By Daniel
 
[DevOpsDays Tokyo 2024] 〜デジタルとアナログのはざまに〜 スマートビルディング爆速開発を支える 自動化テスト戦略
[DevOpsDays Tokyo 2024] 〜デジタルとアナログのはざまに〜 スマートビルディング爆速開発を支える 自動化テスト戦略[DevOpsDays Tokyo 2024] 〜デジタルとアナログのはざまに〜 スマートビルディング爆速開発を支える 自動化テスト戦略
[DevOpsDays Tokyo 2024] 〜デジタルとアナログのはざまに〜 スマートビルディング爆速開発を支える 自動化テスト戦略
 
スマートフォンを用いた新生児あやし動作の教示システム
スマートフォンを用いた新生児あやし動作の教示システムスマートフォンを用いた新生児あやし動作の教示システム
スマートフォンを用いた新生児あやし動作の教示システム
 
Open Source UN-Conference 2024 Kawagoe - 独自OS「DaisyOS GB」の紹介
Open Source UN-Conference 2024 Kawagoe - 独自OS「DaisyOS GB」の紹介Open Source UN-Conference 2024 Kawagoe - 独自OS「DaisyOS GB」の紹介
Open Source UN-Conference 2024 Kawagoe - 独自OS「DaisyOS GB」の紹介
 
論文紹介:Semantic segmentation using Vision Transformers: A survey
論文紹介:Semantic segmentation using Vision Transformers: A survey論文紹介:Semantic segmentation using Vision Transformers: A survey
論文紹介:Semantic segmentation using Vision Transformers: A survey
 
TSAL operation mechanism and circuit diagram.pdf
TSAL operation mechanism and circuit diagram.pdfTSAL operation mechanism and circuit diagram.pdf
TSAL operation mechanism and circuit diagram.pdf
 
SOPを理解する 2024/04/19 の勉強会で発表されたものです
SOPを理解する       2024/04/19 の勉強会で発表されたものですSOPを理解する       2024/04/19 の勉強会で発表されたものです
SOPを理解する 2024/04/19 の勉強会で発表されたものです
 
論文紹介:Content-Aware Token Sharing for Efficient Semantic Segmentation With Vis...
論文紹介:Content-Aware Token Sharing for Efficient Semantic Segmentation With Vis...論文紹介:Content-Aware Token Sharing for Efficient Semantic Segmentation With Vis...
論文紹介:Content-Aware Token Sharing for Efficient Semantic Segmentation With Vis...
 
論文紹介:Automated Classification of Model Errors on ImageNet
論文紹介:Automated Classification of Model Errors on ImageNet論文紹介:Automated Classification of Model Errors on ImageNet
論文紹介:Automated Classification of Model Errors on ImageNet
 

プロファイラGuiを用いたコード分析 20160610

  • 1. Altera SDK for OpenCL勉強会 プロファイラGUIを用いたコード分析 @h_suzuki
  • 2. • 「プロファイラGUIを用いたコード分析」というタ イトルを最初に決めたものの、Altera SDK for OpenCL の開発フロー全体像がないとイメー ジできないのでは… • という事で全体にも簡単に触れます。
  • 3. 目次 • OpenCL 実装モデルと BSP • Guaranteed タイミングフロー • カーネル・プログラム開発フロー • エミュレータ • オプティマイゼーション・レポート • エリア・レポート • プロファイラ • 処理データサイズの違いによるパイプライン稼働率の確認 • まとめ • 参照資料 • Tips
  • 4. Altera SDK for OpenCL OpenCL モデル < StratixV の PCIeカード・モデル > 4 Host Code main() { read_data( … ); manipulate( … ); clEnqueueWriteBuffer( … ); clEnqueueNDRange(…,sum,…); clEnqueueReadBuffer( … ); display_result( … ); } Standard gcc Compiler EXE Altera Offline Compiler AOCX __kernel void sum (__global float *a, __global float *b, __global float *y) { int gid = get_global_id(0); y[gid] = a[gid] + b[gid]; } Verilog Quartus II OpenCL Accelerator Code PCIe カードタイプでは、 clEnqueueWriteBuffer I の実行によりホスト( PC ) のメインメモリ から、PCIe 経由でターゲット (FPGA )のメインメモリへデータを転送
  • 5. OpenCL 開発の仕組み : BSP 5 PCIe gen2x8 Host Interface インターコネクト DDR3 メモリ インターフェース 10Gb MAC/UOE Data Interface 10Gb MAC/UOE Data Interface DDR3 メモリ インターフェース QDRII メモリ インターフェース QDRII メモリ インターフェース OpenCL Kernels OpenCL Kernels DDR DDR QDR QDR 10G ネット ワーク ホスト OpenCL開発するには BSP が必要。 全ての評価ボードで OpenCL 開発できるわけではないので注意 標準のFPGA 開発ツールで BSP を設計 OpenCL コンパイラで ビルドしたモジュールが BSP
  • 6. OpenCLコンパイル手法 Guaranteed タイミングフロー 6 kernel.cl AOC Synthesis / P&R / STA on the OpencL Kernels ONLY Reconfig kernel PLL DONE! Post-fit QXP partition (PCIe, UniPHY, DMA, …)Boardspec.xml Re-run STA with the new PLL value Meet Timin g No Yes タイミングがメットしたら PLL の値を ROM に保持
  • 7. Altera SDK for OpenCL OpenCL カーネル・プログラム開発フロー 7 OpenCL カーネル・プログラムの作成 ○ PC 上での検証 ・x86 エミュレータ ・オプティマイゼーションレポート ・Visualizer ( コンパイル時間 : sec ~ min ) ○ 実機検証 ・プロファイラ GUI ( コンパイル時間 : hours ) 要求性能を 満たせていない場合 DONE! ・基本デバッグ(文法/機能) ・パイプラインのストール多 ・消費リソース多
  • 8. エミュレータ • カーネル・プログラムを x86 用にコンパイル するオプション • 生成される aocx は x86 の実行体 • カーネルプログラム内で printf を使用したデバッグ • 適用方法 • コンパイル時に -march=emulator を追加 • $ aoc -v --report -march=emulator vector_add.cl -o vector_add.aocx --board s5phq
  • 9. オプティマイゼーション・レポート • ループ文におけるキャリーの依存やループ展開など性能に影響を与える 要因となる項目の解析を行う • -g はコンパイル時間やメモリにあまり影響しないため常にONを推奨 • レポートは下記のコマンド例では、tdfir/tdfir.log として生成される • 適用方法 • コンパイル時に -g を追加 • $ aoc -v -g --report -c device/tdfir.cl -o tdfir.aocx --board s5phq
  • 10. エリア・レポート • 消費リソースのマッピングを解析、表示するツール • どの行でどの程度のリソース消費するかを確認 • 適用方法 • コンパイル時に -g を追加し、生成される aoco/aocx に対して以下を実行 • HTML ファイルが生成される • $ aocl analyze-area <kernel_name>.aoco • $ aocl analyze-area <kernel_name>.aocx
  • 11. プロファイラ ボトルネックが • 外部メモリ転送にあるのか • ホスト・デバイス間の通信にあるのか • カーネル・プログラムにあるのか • チャネル転送にあるのか を実機を使って確認するツール ※アルテラのベンダ拡張機能。 OpenCL コードと Qsys IP を Avalone-ST で 通信する I/O チャネル 、カーネル・プログラム間を 通信するデータチャネルの2種類のチャネル転送がある カーネルA BittWare社の Arria 10 GX 搭載ボード、A10PL4
  • 12. プロファイラの仕組み • Altera SDK for OpenCL では、 カーネル・プログラムのコード が ハード ウェア化されてパイプラインが構築される • 生成した パイプラインに パフォーマンス・カウンタ と プロファイリングロ ジック を実装し、実機実行時に統計情報を取得
  • 13. プロファイラの仕組み • 物理的にカウンタを実装するため • リソースへの影響:有り • 性能への影響:有り Profiler ALUTs Registers Logic utilization DSP Memory bits RAM blocks fmax vector_add No 41795 59902 40628 0 1686880 351 288 vector_add Yes 43718 61915 41690 0 1686880 351 279 channelizer No 138616 221048 113430 196 8477664 729 276 channelizer Yes 144324 226809 116827 196 8477664 729 271 tdfir No 228931 353738 176046 512 2213954 352 263 tdfir Yes 229290 356544 275054 512 2213954 352 261 jpeg_decoder No 101077 176700 94906 160 5334304 751 182 jpeg_decoder Yes 138790 214375 115218 160 5334304 751 180 プロファイラを適用時の消費リソース差分及び fmax 差分 ( ツール : Quartus Prime Standard v16.0.0 b211、ターゲットボード : BittWare S5PHQ D8 )
  • 14. プロファイラの利用方法 • 適用方法 • コンパイル時に --profile を追加 • $ aoc -v --report --profile vector_add.cl -o vector_add.aocx --board s5phq • 使用方法 • 実機実行完了後、統計情報がファイル( profile.mon )に書き出されるのでユー ティリティ・ツール、aocl を使用してプロファイラ起動する • $ aocl report vector_add.aocx profile.mon
  • 15. プロファイラ GUI の見方 Source Code タブ • Altera SDK for OpenCL で構築したパイプラインにおいて、ストールが 発生している箇所、メモリ転送の効率を確認できる タブ名 説明 Attributes メモリ転送やチャネル転送の属性を表す メモリタイプ: ローカル、グローバル 対象のメモリ: DDR、QDR 転送の種類 : リードやライトなど Stall% メモリ及びチャネルアクセスによりパイプラインがストールしている割合 Occupancy% カーネルプログラムがメモリ転送及びチャネル転送を実行している割合 Bandwidth 平均のメモリ・アクセス速度及び効率 転送サイズとロード、ストアユニットの数によって効率が変わる
  • 16. プロファイラ GUI の見方 Source Code タブ • Occupancy% が低い • パイプラインの稼働率が低い • カーネル実行していない期間が長いこととなり性能低下の要因となる • Stall% が高い • メモリアクセス、チャネル通信が競合 • アクセス・パターンがよくない • チャネル通信においてリードとライトが大きく不均衡になっている • Bandwidth の Efficiency が低い • 有効なデータを得るのに帯域が多く必要 • アクセス・パターンがよくない • 扱うデータ量が少なくオーバーヘッドが大きい
  • 17. プロファイラ GUI の見方 Kernel Execution タブ • カーネル・プログラム全体の実行プロセスをグラフィカルに表示 • 各カーネル・プログラムの実行時間及び相互関係を表示 • ホスト・プロセッサ上のデータを PCIe 経由で デバイスのグローバル・メモ リに転送 • デフォルトでは表示されないため、ホスト・プログラム実行前に環境変数、 ACL_PROFILE_TIMER を 1 に設定すること • $ export ACL_PROFILE_TIMER=1
  • 18. プロファイラ GUI の見方 <Kernel 名> タブ • カーネル・プログラムの動作周波数 ( fmax ) • パイプラインが使用しているメモリの帯域
  • 20. 使用するプログラム: vector_add • 浮動小数点の足し算のサンプル・プログラム • 問題数を増減させてパイプラインの稼働率とプロファイラの表示を確認 // ホストアプリケーション main.cpp // Problem data. unsigned N = 1000000; // problem size scoped_array<scoped_aligned_ptr<float> > input_a, input_b; // num_devices elements scoped_array<scoped_aligned_ptr<float> > output; // num_devices elements // OpenCL カーネル・プログラム __kernel void vector_add(__global const float *x, __global const float *y, __global float *restrict z) { // get index of the work item int index = get_global_id(0); // add the vector elements z[index] = x[index] + y[index]; }
  • 21. N=1 • Bandwidth / Efficiency が低く、濃い赤で表示される • Occupancy% は 1.1% … N Stall% Occupancy% Bandwidth[MB/s] Efficiency[%] Turnaround Time[ms] Kernel Time[ms] Thoughput[MB/s] 1 0 1.1 196.4 6.3 0.532 0.029 32.9
  • 22. N=10 • Bandwidth / Efficiency が依然として低く、赤で表示される • Occupancy% は 9.9% N Stall% Occupancy% Bandwidth[MB/s] Efficiency[%] Turnaround Time[ms] Kernel Time[ms] Thoughput[MB/s] 10 0 9.9 180.8 62.5 0.351 0.014 681.2
  • 23. N=100 • Bandwidth / Efficiency があがったが薄い赤で表示される • Occupancy% は 50.6% N Stall% Occupancy% Bandwidth[MB/s] Efficiency[%] Turnaround Time[ms] Kernel Time[ms] Thoughput[MB/s] 100 0 50.6 651.2 89.3 0.553 0.024 3973.6
  • 24. N=1000 • Bandwidth / Efficiency が通常の色になった • Occupancy% は 88.5% N Stall% Occupancy% Bandwidth[MB/s] Efficiency[%] Turnaround Time[ms] Kernel Time[ms] Thoughput[MB/s] 1000 0 88.5 1026.0 99.2 0.903 0.042 22706.5
  • 25. N=10000 • Efficiency は 100%。 N Stall% Occupancy% Bandwidth[MB/s] Efficiency[%] Turnaround Time[ms] Kernel Time[ms] Thoughput[MB/s] 10000 0 98.9 1136.6 100.0 0.876 0.066 144496.1
  • 26. N=100000 N Stall% Occupancy% Bandwidth[MB/s] Efficiency[%] Turnaround Time[ms] Kernel Time[ms] Thoughput[MB/s] 100000 0 99.9 1148.0 100.0 2.036 0.415 229801.0
  • 27. N=1000000 • vector_add のサンプルにおけるデフォルト値 N Stall% Occupancy% Bandwidth[MB/s] Efficiency[%] Turnaround Time[ms] Kernel Time[ms] Thoughput[MB/s] 1000000 0 100.0 1150.0 100.0 9.368 3.531 270086.2
  • 28. N=10000000 • N=1000000 の時とスループットは同等 N Stall% Occupancy% Bandwidth[MB/s] Efficiency[%] Turnaround Time[ms] Kernel Time[ms] Thoughput[MB/s] 10000000 0 100.0 1150.0 100.0 81.121 34.806 273997.1
  • 29. データサイズの違いによる効率の差 N Stall% Occupancy% Bandwidth[MB/s] Efficiency[%] Turnaround Time[ms] Kernel Time[ms] Thoughput[MB/s] 1 0 1.1 196.4 6.3 0.532 0.029 32.9 10 0 9.9 180.8 62.5 0.351 0.014 681.2 100 0 50.6 651.2 89.3 0.553 0.024 3973.6 1000 0 88.5 1026.0 99.2 0.903 0.042 22706.5 10000 0 98.9 1136.6 100.0 0.876 0.066 144496.1 100000 0 99.9 1148.0 100.0 2.036 0.415 229801.0 1000000 0 100.0 1150.0 100.0 9.368 3.531 270086.2 10000000 0 100.0 1150.0 100.0 81.121 34.806 273997.1 N=10000 N=1000000
  • 30. おまけ • Multithread Vector Operation Design Example ( NEW !! ) • コマンド・キューを 2個用意して マルチスレッドで複数カーネルを動作 • C=A x B と C=A + B ↑ デフォルトのコードを実行した際のプロファイラ表示 ↑ ベリファイのコード削除
  • 32. 参照資料 • Altera SDK for OpenCL Programming Guide (2016.05.02) • https://www.altera.com/en_US/pdfs/literature/hb/opencl- sdk/aocl_programming_guide.pdf • Altera SDK for OpenCL Best Practices Guide (2016.05.02) • https://www.altera.com/en_US/pdfs/literature/hb/opencl-sdk/aocl-best-practices- guide.pdf • OpenCL Vector Addition Design Example ( v16.0 ) • https://www.altera.com/support/support-resources/design- examples/design-software/opencl/vector-addition.html • Multithread Vector Operation Design Example( v16.0 ) • https://www.altera.com/support/support-resources/design- examples/design-software/opencl/multithreaded-vector-operation.html