インテルのみ表示可能 — GUID: iga1401400279959
Ixiasoft
インテルのみ表示可能 — GUID: iga1401400279959
Ixiasoft
36.5.2. パフォーマンス・カウンターの使用
ハードウェア定数
APIの概要
パフォーマンス・カウンター・コア向けの Nios® II API (アプリケーション・プログラム・インターフェイス) は、関数、マクロ、および定数で構成されています。
名称 | 概要 |
---|---|
PERF_RESET() | すべてのカウンターを停止および無効にし、0にリセットします。 |
PERF_START_MEASURING() | グローバルカウンターを開始し、セクションカウンターを有効にします。 |
PERF_STOP_MEASURING() | グローバルカウンターを停止し、セクションカウンターを無効にします。 |
PERF_BEGIN() | コードセクションの計測を開始します。 |
PERF_END() | コードセクションの計測を停止します。 |
perf_print_formatted_report() | プロファイリング結果のフォーマット化された要約をstdoutに送信します。 |
perf_get_total_time() | グローバル・プロファイリング時間の合計をクロックサイクル数で返します。 |
perf_get_section_time() | 1つのセクションの合計時間をクロックサイクル数で返します。 |
perf_get_num_starts() | カウンターのイベント数を返します。 |
alt_get_cpu_freq() | CPU周波数をHzで返します。 |
各マクロと関数についての完全な説明は、パフォーマンス・カウンターのAPIのセクションを参照してください。
パフォーマンス・カウンターのハードウェア・パラメーターは、system.hで定義されている定数から取得することができます。定数名は、プラットフォーム・デザイナーのSystem Contentsタブで指定されるパフォーマンス・カウンターのインスタンス名に基づいています。
名称 (1) | 意味 |
---|---|
PERFORMANCE_COUNTER_BASE | コアのベースアドレス |
PERFORMANCE_COUNTER_SPAN | ハードウェア・レジスター数 |
PERFORMANCE_COUNTER_HOW_MANY_SECTIONS | セクションカウンター数 |
注意
|
起動
パフォーマンス・カウンター・コアを使用する前に、PERF_RESETを呼び出し、すべてのカウンターを停止して無効にし、0にします。
グローバルカウンターの使用法
グローバルカウンターを使用して、パフォーマンス・カウンター・コア全体を有効または無効にします。例えば、ソフトウェアが初期化を完了するまでプロファイリングを無効にしておくことを選択することができます。
セクションカウンターの使用法
コード内のセクションを測定するには、そのセクションをマクロのPERF_BEGIN() およびPERF_END() で囲みます。これらのマクロは、パフォーマンス・カウンター・コアへの単一の書き込みで構成されます。
コードのセクションの測定は、プラットフォーム・デザイナーで指定されている数まで必要に応じて同時に行うことができます。詳細は、カウンターの定義のセクションを参照してください。カウンターは、個別に、またはグループとして開始および停止できます。
通常、プロファイリングするコードの各セクションに1つのカウンターを割り当てます。ただし、状況によっては、コードの複数のセクションを1つのセクションカウンターにグループ化することが必要になる場合があります。例えば、全体的な割り込みオーバーヘッドを測定する際に、すべての割り込みサービスルーチン (ISR) を1つのカウンターで測定することができます。
混乱を避けるため、各セクション番号にニーモニック記号を割り当てます。
カウンター値の表示
ライブラリー・ルーチンを使用すると、結果を取得し解析することができます。perf_print_formatted_report() を使用し、stdoutに結果を一覧表示します。次に例を示します。
perf_print_formatted_report( (void *)PERFORMANCE_COUNTER_BASE, // Peripheral's HW base address alt_get_cpu_freq(), // defined in "system.h" 3, // How many sections to print "1st checksum_test", // Display-names of sections "pc_overhead", "ts_overhead"); |
次の例では、このような表が作成されます。
--Performance Counter Report-- Total Time: 2.07711 seconds (103855534 clock-cycles) +-----------------+--------+-----------+---------------+-----------+ | Section | % | Time (sec)| Time (clocks) |Occurrences| +-----------------+--------+-----------+---------------+-----------+ |1st checksum_test| 50 | 1.03800 | 51899750 | 1 | +-----------------+--------+-----------+---------------+-----------+ | pc_overhead |1.73e-05| 0.00000 | 18 | 1 | +-----------------+--------+-----------+---------------+-----------+ | ts_overhead |4.24e-05| 0.00000 | 44 | 1 | +-----------------+--------+-----------+---------------+-----------+ perf_print_formatted_report() の完全な説明については、パフォーマンスとカウンターのAPIを参照してください。 |