2018年06月30日

動作速度算出(3)

  P6月間特別企画(その30)

  処理時間を求める、の続きです。


 4.実際に処理時間を求めてみる

  まず各命令のサイクル数を横に書いてみます。

180630_01_TESTasm1.png


  ループ/分岐/サブルーチンコールがあるので、それを考慮してサイクル数を算出します。


 ・10〜24行目まで、DJNZでループするので、96回繰り返しになる。
  CALL先以外の合計サイクル数 = 132
  → 132x96 = 12672

 ・25行目のDJNZは、95回ジャンプ、1回スルー
  → 14x95+9 = 1339

 ・34行目のLDIRは、31回ジャンプ、1回スルー
  → 23x31+18 = 731

 ・37行目のLDIRは、6111回ジャンプ、1回スルー
  → 23x6111+18 = 140571

 ・42行目のLDIRは、31回ジャンプ、1回スルー
  → 23x31+18 = 731

 ・31行から44行までのサイクル数の合計
  → 142122

 ・1行目〜27行目までのサイクル数の合計
  → 13+12672+1339+16+142122*96*2 = 27301464


  MODE2なので、平均クロックは 1.96MHz

  処理時間は、27301464 * 1 / 1.96MHz = 13.929s


  128x192のSCREEN3の画面を1ドットずつスクロールさせるだけなんですが、1画面分スクロールするのに大体14秒かかります。

  サイクル数の計算は結構面倒なのですが、大抵は繰り返し数が多い所だけの概算で事足ります。



  ちょっと遅いので、速くなる工夫をしてみます。

  38行の LDIR の部分が少ないサイクル数で動かすと速くなるので、こんな感じ↓に変更してみます。
 (CPY_LDIRの中身のみを変更)

180630_01_TESTasm2.png


  LDIR → LDI×32 に展開しています。
  この変更で、通常は1バイト当たり、23クロック掛かっていたのが、18 + 0.34 クロックで済みます。
  LDIの個数を多くすると、+0.34クロックの部分を減らす事が出来ます。


  二つのプログラムを連続するものを作りました↓
  目に見えて速度が違うと思います。

test2p6.zip


  mk2以降で test2_p6.d88 をセットして起動させて下さい。
  画像データは、前回と同じ、Hashiさんの所のデータを使用させて頂きました。感謝です>Hashiさん


  さらに速度を上げるには...いろいろ考えましたが、まだ出来そうですが........

  続きます(^^;)


posted by えすび at 21:00| Comment(0) | カテゴリ無し | このブログの読者になる | 更新情報をチェックする
この記事へのコメント
コメントを書く
お名前: [必須入力]

メールアドレス:

ホームページアドレス:

コメント: [必須入力]

認証コード: [必須入力]


※画像の中の文字を半角で入力してください。