スタッフのブログです。個以上あるコメントは受け付けない設定になってます。)2009年08月19日PowerPCのタイムベースレジスタを利用した簡単な実行時間の計測方法PowerPCにはCPUのクロックサイクルでカウントアップされるタイムベースレジスタというカウンタがあります。これを利用して簡単にプログラムの2点間の時間を計測することができます。ある関数を複数の方法で実装して、どちらが速いかを比較する場合に便利です。手軽に使えるようにソースコードを一つのヘッダファイルにまとめてみました。タイムベースレジスタについてタイプベースレジスタはCPUのクロックサイクルでカウントアップされます。TBLという32bitのレジスタに分かれていて、全体で64bitのカウンタになっています。TBLへの書き込みは特権モードでしかできませんが、読み込みはユーザーモードでもできます。使用前にゼロにリセットする必要もありません。ソースコードカウンタの読み出しの時のオーバーヘッドを少なくするためインライン関数にしています。gccの拡張記法を使用しています。"pmon_ppc.h")任意のところでpmon_read_tb()でサイクルカウンタを読み出し、その差分で時間を計ります。(符号なし64bit)です。ライブラリなどを追加する必要がないので、Makefile等の変更が不要です。計測したい部分のソースファイルだけの変更で使えます。追記)コメントで誤りを指摘していだだきした。コードを以下のように修正しました。y);これは64bitのカウンタの上位32bitと下位32bitをアトミックに読み出すことができないため、ちょうど下位から上位に桁上がりがあった場合にはもう一度読み直すということをしています。00:02手元にppc32環境がないので確認はしていないのですが、最初のmftbuはdo...whileループの中にないといけないのではないでしようか。09:48ありがとうございます。