[Q2HB] Performance Counter Core

[Altera][Q2HB][IP] Performance Counter Core

refer to:"Volume 5: Embedded Peripherals","Section V. Test and Debug Peripherals", "29. Performance Counter Core"

注意
performance counterは,複数clockを使用するシステム上では,CPU clockと同じdomainに配置すること.異なる場合はサイクル数から実時間へ正しく変換できない.(p.2453 "Multiple Clock Domain Considerations")

Core Overview

高精度パフォーマンスカウンタを提供するらしい.GNU profiler, gprofでも使得る模様.通常のInterval timerを利用することも可能.
3種類の測定方法については,"AN 391: Profiling Nios II Systems."にて述べる.

機能としては,クロックサイクルの計数と,イベント回数の記録である.それぞれ64bit/32bit精度を有す.


Software Programming Model

便利なマクロや関数が用意されている.カウンタの初期化,開始,停止,測定対象セクションの開始・終了を行う.測定結果についても,テキストベースで表を出力する関数を用意してある.

パフォーマンスカウンタの名称を"performance counter"とした場合で,section counterは1番目を用いる例である.

    PERF_RESET( PERFORMANCE_COUNTER_BASE );
    PERF_START_MEASURING( PERFORMANCE_COUNTER_BASE );
    PERF_BEGIN( PERFORMANCE_COUNTER_BASE, 1);
	// 測定対象となる処理 //
    PERF_END(PERFORMANCE_COUNTER_BASE, 1);
    PERF_STOP_MEASURING(PERFORMANCE_COUNTER_BASE) ;
    printf("%qu cycle \n", perf_get_section_time(PERFORMANCE_COUNTER_BASE, 1));

注意点としては,section timeのみを図りたい場合でも,total counterも起動する必要があること.また,printfでalt_u64の表示を行う場合には,書式装飾子"q"*1を付与する必要がある.


*1 : gcc方言:long long 型の書式."qu"で"unsigned long long"型である.

注意事項

英語力の弱い人が適当に訳して抜粋,補強しています.
あやしいな,と思ったらご指摘いただけますと幸いです.
なお,オリジナルの英文を参照されることを強く推奨いたします.