実行サイクルを計る

ADSP-2191で走るプログラムを作ったとします。その実行サイクルを計るにはどうすればよいでしょうか。信号処理では実行サイクル数は大事なので把握しておかなければなりません。

いちばん簡単な測定方法はEMU CYCLE COUNTERと呼ばれるカウンターを使うことです。このカウンターはADSP-2191に搭載されている64ビット長のカウンターです。EMU CYCLE COUNTERは実行中に内部クロックによってインクリメントしていき、命令がエミュレーションによって中断すると停止します。idle命令のような実行を自律的に停止するような命令を実行してもEMU CYCLE COUNTERは動きつづけますので実行時間を計るには最適です。

EMU CYCLE COUNTERを見るにはメニューバーRegisterPCを実行します(下図)。

計測は簡単です。計りたい部分の先頭の命令と、最後の命令の次の命令にブレークポイントをかけます。この位置にブレークをかけるのは、ブレークが命令の実行の前にかかるからです。最初の命令で停止したら、EMU CYCLE COUNTERを書き換えて0にします。次に実行して2番目のブレークがかかるのを待ちます。

2番目のブレークがかかったらEMU CYCLE COUNTERの値を読み、そこから14を引いてください。ADSP-2191はパイプラインを持っているため、実行開始やブレークにパイプライン・フィル、パイプライン・フラッシュのオーバーヘッドが生じます。そのため、14を引いて補正してやるのです。

14というのはVisualDSP++2.0 SP1での実測値です。実測方法は簡単で、20個のNOPの実行時間を計ります。このときの数値が34ですのでオーバーヘッドが14であることがわかります。ADSP-2191は6段パイプラインを持っていますのでICEでのオーバーヘッドを考えると、14という値にはなかなか説得力があります。

2191空挺団 | プログラム | EZ-KIT | こぼれ話 | アーキテクチャー | 命令 | レジスタ | DSP掲示板 | FAQ |