3

Halide 言語で記述されたコードに使用できるパフォーマンス カウンターはありますか? コードで実行されるロード、ストア、および ALU 操作の数を知りたいです。

マルチステージ パイプラインのスケジューリングに関する Halide チュートリアルでは、割り当てられたメモリ、ロード、ストア、および Halide Funcs への呼び出しの量を比較することで、さまざまなスケジュールを比較していますが、この情報がどのように収集されたかはわかりません。これらの操作のいずれかが発生するたびに、trace_stores、trace_loads、および trace_realizations を使用してコンソールに出力できる可能性があると思います。ただし、これは優れたオプションではありません。プログラムの実行が大幅に遅くなり、コンソール出力の長いリストをロード、ストア、および ALU 操作の目的のカウントにコンパイルするために、ある種のカウント スクリプトが必要になるためです。

4

2 に答える 2

2

trace_xxx彼らは出力を使用して、その上でいくつかのスクリプト/プログラムを実行したと確信しています。

X86 プラットフォームでの実際のパフォーマンスの数値を探しているなら、Intel VTune Amplifierを使用します。かなり高価ですが、学界 (学生、教師、研究者) やオープン ソース プロジェクトの場合は無料かもしれません。

それ以外はHL_DEBUG_CODEGEN=1、環境設定で下げたステートメントコードを見ると、ループ構造やデータの使い方がよくわかります。この出力は stdout ではなく、stderr に出力されることに注意してください。

編集: Linux の場合、perfがあります。

于 2016-08-30T00:08:59.130 に答える
2

現在、パフォーマンス カウンター ベースのサポートはありません。携帯できるようにするのはかなり難しいです。(そして、モバイル デバイスでは、多くの場合、OS は単にハードウェアへのアクセスを許可しません。) Profiling.cpp と src/profiling.cpp でのサポートは、パフォーマンス カウンター操作を駆動するために使用される可能性があります。プロファイリングの低下パスは、Func と Pipeline の実行に関する情報を更新するランタイムのルーチンを呼び出すコードを追加します。この情報は、別のスレッドによって収集および集約されます。

トレースがファイルに対して実行される場合 (たとえば、HL_TRACE_FILE を使用)、バイナリ形式が使用され、少し効率的です。バイナリ形式で動作するツールについては、utils/HalideTraceViz を参照してください。これは通常、チーム内で分析が行われる方法です。

OProfile の少量の調査があり、有望に見えましたが、コードが機能したとは思いません。

于 2016-08-30T00:39:07.293 に答える