[CHP] 実験1:閉ループ v.s. 外周 v.s. RETURNチップ2006-08-07

Carnage Hart Portableでようやくシナリオにたどり着きました.

今作からなにもないところに矢印を向けると,そこが自動的にRETURNチップになり,処理がスタート位置に戻ります.で,このRETURNチップは1チップとして処理されるのか,それともペナルティなしで最初に戻れるのかが気になったので調べてみました.

使用機体

第2章から使えるマリアエレナ

計測プログラム

  1. 100秒以上なら外周へ
  2. カウンタAに+1
  3. カウンタAに+1※

※の矢印を1.,外周,空き領域に変えてカウンタAの最終値を計測する

結果

  • 閉ループ:9998
  • 外周:9998
  • RETURNチップ:7498

結論

RETURNチップは1チップとして処理される.外周と閉ループは等価である.

考察

このCPUの処理速度は150[チップ/sec]のようです.サブ領域もありますので最高級のLP-323Hのようです.

カウンタの値がキリの良い値になっていないのは,CPUクロックが150Hzではなく実は50Hzで,3パイプラインを持ったスーパースカラプロセッサなのではないでしょうか?

初代のCPU速度は,クロックが一定で1クロック中に処理するチップ数で区別されていたので可能性はあると思います(間違ってたらつっこんでください).

[CHP] 実験2:サブルーチン呼び出しのペナルティ2006-08-07

サブルーチン呼び出しが性能に与える影響を調べてみました.

使用機体

第2章から使えるマリアエレナ

計測プログラム

メイン

  1. 100秒以上なら外周へ
  2. SUB1
  3. SUB1※

※の矢印は1.を指す.

SUB1

  1. カウンタAに+1※

※の矢印は外周を指す

100秒経過後のカウンタAの値を計測する

結果

  • サブルーチン呼び出し:1500

結論

サブルーチン呼び出しは性能に与える影響が大きい.

考察

当初はサブルーチン呼び出しチップも1チップとしてカウントされ,

150[チップ/sec] x 100[sec] x 2 / 5 = 6000

となることを予想しましたが,それを大きく下回る結果となりました.結果から計算すると,1ループあたりのチップ数は実に20にもなります.条件判断とカウンタ加算x2をのぞくと17となり,1つのサブルーチン呼び出しチップは8.5チップ相当となります.

この大きなペナルティが処理がサブルーチンに移る際に起るのか,サブルーチンからメインに戻る際に起るのか,あるいはその両方に分配されているのか気になるところです.しかし,調べ方がちょっと思いつきません.

もし,サブルーチンに処理が移る際にペナルティが起るのならば,反応速度が特に重要になる回避処理や格闘処理をサブルーチンに書くと不利になる恐れがあります.