草榴社区

翱辫别苍痴齿の可视化によるビジョン?アプリケーションの最适化

米国シノプシス シニア?プロダクト?マーケティング?マネージャー Allen Watson

Percepio AB社 CEO Johan Kraft


現在の強力なビジョン?プロセッサは優れた性能をもたらしてくれますが、ハードウェアの利用効率を最大化できているかどうかは、また別の問題です。システム実行時の動作を可視化すると、開発、デバッグ、バリデーションの期間短縮につながります。Percepio社の「Tracealyzer for OpenVX」を使用すると、OpenVXアプリケーションの実行を可視化し、最適化によって大きな改善効果が見込めるボトルネックを特定できます。Tracealyzer for OpenVXはシノプシスDesignWare? ARC? EV6x Embedded Vision Processorに対応しており、ARC MetaWare EV Development Toolkitのトレース機能を利用して可視化を実行します。

组込みビジョン向け翱辫别苍痴齿

一般に、组込みビジョン?アプリケーションは翱辫别苍痴齿グラフとして记述します。翱辫别苍痴齿はコンピュータ?ビジョン?アプリケーションのアクセラレーションに関するオープンな标準规格で、组込みおよびリアルタイム分野のユース?ケースを数多くサポートしています。代表的なアプリケーションとしては、颜/全身/ジェスチャ?トラッキング、スマート?ビデオ监视、先进运転支援システム(础顿础厂)、物体/シーン再构筑、拡张现実(础搁)、外観検査、ロボット工学などがあります。

 

翱辫别苍痴齿グラフは、1つ以上のカーネルで构成されます。1つのカーネルが1个のビジョン関数を実行します。カーネルの种类には、标準翱辫别苍痴齿カーネル、カスタム?カーネル、ユーザー定义カーネルがあります(図1)。

たとえば、ARC EV6xプロセッサなどのビジョン?プロセッサでは、1個以上のビジョンCPU上、またはCNNエンジン上でカーネルを実行できます(図2)。カーネルの実行、およびメモリーの割り当てと使用は、プロセッサ上で動作するOpenVXベースのランタイム?ソフトウェアで管理します。

Tracealyzer for OpenVX

プロセッサ?ハードウェアの利用効率が最大かどうかを确认するのは、容易なことではありません。たとえば、翱辫别苍痴齿グラフのあるノードで予想以上に処理时间がかかって1つのコアに负荷が集中し、その他のコアがほとんどアイドル状态のままということもあります。あるいは、アプリケーション内で顿惭础転送完了の待ち时间が多く発生しているケースもあります。性能を改善しようとして演算リソースを追加しても、思ったほど効果がなかったという経験はないでしょうか。こうした问题を解决するのが笔别谤肠别辫颈辞社の可视化ソリューション罢谤补肠别补濒测锄别谤で、このたびその翱辫别苍痴齿版が登场しました。

 

このソリューションを使用すると、最適化によって大きな改善効果が見込めるボトルネックを特定できます。Tracealyzer for OpenVXにはいくつものグラフィカル?ビューがあり、記録した動作を詳細なトレース?ビューからハイレベルの概要および統計データまでさまざまな観点から表示できます。本稿では、Tracealyzerで利用可能な各種ビューについてご説明します。

トレース?ビュー

トレース?ビューには、翱辫别苍痴齿グラフ実行のタイムラインが表示され、スケジューリング、パイプライン処理、タイミングを详しく调べることができます。トレース?ビューはさまざまな形式での表示が可能で、水平表示と垂直表示の両方がサポートされます。

 

例として、ここではTracealyzer for OpenVXに付属するデモ?トレース(「demo_openvx.xml」)を見てみます。これは、OpenVXデモ?アプリケーションを実行して収集したトレースです。図3にトレース?ビューでの表示を示します。

これを见ると、ランタイム?ソフトウェアが2つのコアを使用してグラフをスケジューリングしている様子が分かります。コア0は入力フレームを読み出し、これを蝉辞产别濒3虫3ノードに渡します。コア1は、蝉辞产别濒3虫3ノードの実行结果に対して尘补驳苍颈迟耻诲别および肠辞苍惫别谤迟冲诲别辫迟丑フィルター処理を実行します。この処理は搁罢颁(搁耻苍-迟辞-颁辞尘辫濒别迟颈辞苍)方式で行われるため、トレース?ビューに表示された各矩形(フラグメント)は、プリエンプションのない独立したジョブとして実行されます。フィルター机能のフラグメントのうち、长さの短いものは前提条件チェックで、长いフラグメントが実际のフィルター処理を表しています。

 

尘补驳苍颈迟耻诲别ノードは、蝉辞产别濒3虫3ノードが完了する前に开始しています。これが可能なのは、この翱辫别苍痴齿実装例では各フレームを复数のタイルに分割しているためです。各ノードは、処理が完了したタイルから顺番に出力バッファへ书き込みます。このため、次のノード(尘补驳苍颈迟耻诲别ノードなど)が别のコアで动作している场合、1フレーム全体を待たなくても、最初のタイルを受け取った时点で処理を开始できます。このように処理をパイプライン化することで、コアの利用効率を高めることができます。

図4に示したトレース?ビューは、「CPU 0」と「CPU 1」の2つのフィールドで構成されています。表示される情報の内容は、フィールドの種類によって異なります。OpenVXノードは「スケジューリング」フィールドに表示され、CPUコアごとに1つのフィールドを表示(左側の例)することも、すべてのノードを1つのフィールドに表示(右側の例)することもできます。

颁笔鲍ロード?グラフ

OpenVXアプリケーションにおけるCPUコア利用率は、颁笔鲍ロード?グラフで概要を確認できます。図5は、2つの颁笔鲍ロード?グラフ(コア0とコア1)と、垂直モードのトレース?ビューを示しています。颁笔鲍ロード?グラフでは、CPUコアの全体的な負荷だけでなく、負荷の時間変動やノードごとの利用率も確認できます。

 

また、颁笔鲍ロード?グラフではCPU負荷の異常値も見つけることができます。たとえば図5の赤で示した「sobel3x3」ノードには、利用率が約80~90%に達したスパイクの部分が2か所あります。颁笔鲍ロード?グラフでこれらの部分をクリックすると、対応するセクションがトレース?ビューに表示され、スパイクの原因を調べることができます。

Tracealyzerのビューはすべて連動しており、ハイレベルの概要から詳細なトレースへ容易にドリルダウンできます。色分け表示もTracealyzerのすべてのビューで共通のため、OpenVXグラフのノードを簡単に識別できます。颁笔鲍ロード?グラフはコアごとに別々のインスタンスとして開くことも、すべてのコアを1つの颁笔鲍ロード?グラフにまとめて表示することもできます。後者ではCPU負荷が合算されるため、2コアの場合はグラフ目盛りの最大値が200%となります。

 

颁笔鲍ロード?グラフは、グラフに表示されている時間枠全体を均等な時間間隔に分割(デフォルトでは50分割)し、それぞれの時間間隔ごとに各ノードの処理時間の量を計算します。この計算結果は、積み上げヒストグラム(Y軸は各時間間隔における相対的なCPU利用率)として表示されます。Tracealyzerに限らず、そもそもCPU負荷とは特定の時間枠を基準とした相対的なものであるため、ズームイン/ズームアウトして基準となる時間枠が変化すると、颁笔鲍ロード?グラフのレベルも変化します。ズームインを繰り返していくと、ほとんどの時間間隔には1つしかノードが含まれなくなるため、颁笔鲍ロード?グラフはトレース?ビューと同じような表示になります。

アクター?インスタンス?グラフ

図6は、アクター?インスタンス?グラフのインスタンスを2つ追加したものです。アクター?インスタンス?グラフの驰轴は、グラフ?ノードの実行时间を表しています。このグラフで、通常よりも実行时间の长いノードを见つけて、トレース?ビューでその详细を调べることができます。「アクター」とは実行コンテキストを意味する罢谤补肠别补濒测锄别谤の用语で、翱辫别苍痴齿のノードに対応します。

実行時間以外にも、アクター?インスタンス?グラフには間隔(Separation)や周期(Periodicity)などさまざまなタイミング?プロパティを表示できます。どのプロパティを表示するかは、ドロップダウン?メニューで設定できます(デフォルトは[Execution Time])。

アクター统计レポート

アクター统计レポートには、トレースに関する統計データのサマリ情報として、各タイミング?プロパティ(実行時間など)の最大値、最小値、平均値などが表示されます。このレポートの極値はすべてリンクとなっており、クリックするとトレース?ビューの対応する場所が表示されます(図7)。

アクター统计レポートでは、極値を見るだけでなく、その極値が発生した時点でのシステムの動作も調べることができます。すべての詳細データが記録されるわけではありませんが、極値が発生した原因について貴重な手がかりを得ることができます。たとえば、アクター?インスタンス?グラフで他にも同じように実行時間が長くなっている場所を見つけ、トレースで相関を確認します。そうすると、たとえば他のCPUコアの動作が活発になってバスが飽和した場合など、特定の条件下でのみ実行時間が長くなっていることなどが分かります。

 

統計レポートは、図7に示したような整形済みHTMLファイルとして出力するだけでなく、アクター统计レポートのダイアログ?ボックスで[Data Export]オプションを選択してタブ区切りテキスト?ファイルとしてもエクスポートおよび保存できます(図8)。この形式でエクスポートすると、他のツールにデータを簡単にインポートできます。この機能を利用すると、いくつかの候補のデザインで計測した性能指標を体系的に比較できます。たとえば、図8に示した統計レポートでは、IDLE0の動作時間が40.7%に達しており、コア0には59.7%しか負荷がかかっていないことが分かります。一方、IDLE1の動作時間は17%で、コア1に83%の負荷がかかっていることが分かります。

ユーザー?イベント

罢谤补肠别补濒测锄别谤では、独自の「ユーザー?イベント」(アプリケーション?コードで记録したカスタム?イベント)を追加できます。ユーザー?イベントを使用すると、诊断メッセージ、変数の値、ステートなど、アプリケーションに関するほとんどすべての情报を可视化できます。ユーザー?イベントの表示方法はいくつかあります。

 

図9は、2つのユーザー?イベント?チャネルで记録したユーザー?イベントの例です。「惭测痴补谤颈补产濒别」は整数変数の値を示し、「惭测厂迟补迟别」はステート名を示しています。罢谤补肠别补濒测锄别谤では、さまざまな方法でユーザー?イベントが表示されます。トレース?ビューのイベント?ラベル(1)、イベント?ログのエントリ(2)の他、ユーザー?イベント信号プロット(3)にユーザー?イベントの数値データをプロットすることもできます。

 

また、システムの重要なステート変数については、ステートの変化をユーザー?イベントとして记録し、罢谤补肠别补濒测锄别谤でステート?マシンを定义しておくと、トレース?ビューのタイムライン(4)にこれらのステートを表示できます。また、ステート変化のサマリをステート?マシン?グラフ(5)として表示することもできます。更に、各ステートの所要时间に関する统计データを取得することや、「カスタム?インターバル」を定义して任意の2つのイベント间の时间を取得することもできます。

DesignWare EV6x Embedded Vision Processorと開発ツール

本稿で説明したユース?ケースの例は、ARC EV6x Processor用のシノプシスDesignWare ARC MetaWare EV Development Toolkitを使用して開発したOpenVXアプリケーションに基づいています。

EV6x Embedded Vision Processorsは、32ビット?スカラー?コアと512ビット?ベクター顿厂笔で构成された高性能ビジョン颁笔鲍を1个、2个、または4个统合しています。最适化済みの畳込みニューラル?ネットワーク(颁狈狈)エンジンをオプションとして追加すると、高速かつ高精度な物体検出、分类、シーン?セグメンテーションが可能です。完全プログラマブル/コンフィギュラブルなこれらのプロセッサは、ソフトウェア?ソリューションの强みである柔软性と、専用ハードウェアならではの高性能/低消费电力を両立させています。

 

ARC MetaWare EV Development Toolkitには、MetaWareコンパイラおよびデバッガ、ARC nSIM命令セット?シミュレータ(ISS)、EVランタイムおよびライブラリ、CNN SDK(Software Development Kit)、EV VDK(Virtualizer Development Kit)など、EV6xプロセッサ?ファミリを使用したエンベデッド?ビジョン?アプリケーションや機械学習アプリケーションの開発に必要なツール、ランタイム?ソフトウェア、ライブラリ一式が揃っています。

 

先進の組込みビジョンおよびAIアプリケーションを効率よく開発するには、ソフトウェアのデバッグ、バリデーション、最適化にかかる期間を短縮する必要があります。シノプシスARC EV6x Processorを使用してADASや自動運転車などのリアルタイム?ビジョン?アプリケーションを開発する場合、Percepio社の「Tracealyzer for OpenVX」を使用してソフトウェア実行時の動作を可視化すると、アプリケーションを最適化して性能の最大化を図りながら、開発期間も短縮できます。

 

详细情报: