2016-08-29 7 views
3

Halide言語で書かれたコードにはパフォーマンスカウンタがありますか?私は、自分のコードでいくつのロード、ストア、およびALU操作が実行されているか知りたいと思います。Halideのパフォーマンスカウンタ?

マルチステージパイプラインのスケジューリングのためのHalideチュートリアルでは、割り当てられたメモリ、ロード、ストア、コールの量をハライドFuncと比較して異なるスケジュールを比較していますが、この情報の収集方法はわかりません。これらの操作のいずれかが発生するたびに、trace_stores、trace_loads、およびtrace_realizationsを使用してコンソールに印刷することが可能な場合があります。しかし、これは大きな選択肢ではありません。なぜなら、プログラムの実行が大幅に遅くなり、コンソール出力の長いリストをロード、ストア、およびALU操作の目的のカウントにコンパイルするための何らかのカウントスクリプトが必要になるからです。

答えて

2

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

X86プラットフォームで実際のパフォーマンスの数値をお探しの場合は、Intel VTune Amplifierとします。かなり高価ですが、学者(学生、教師、研究者)またはオープンソースプロジェクトの場合は無料です。

これ以外の環境では、文のコードを低くしてHL_DEBUG_CODEGEN=1に設定すると、ループ構造とデータの使用方法がわかります。この出力はstdoutではなくstderrに出力されることに注意してください。

編集:Linuxの場合は、perfです。

2

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

ファイルにトレースを実行する場合(HL_TRACE_FILEを使用するなど)、バイナリ形式が使用されます。これはもう少し効率的です。バイナリ形式で作業するツールについては、utils/HalideTraceVizを参照してください。これは、一般的に分析がチーム内でどのように行われるかです。

有望なOProfileの調査は少々ありましたが、コードが正常に機能しているとは思いません。

関連する問題