プチコンの各命令の実行速度比較
プチコンの各命令の実行速度を比較してみた。
なお、プチコンの実行速度は、同じ条件を揃えたつもりでも、実行の度にかなりバラつきがある。
なので、ここに記載した数値はあくまで参考です。
10万回の単純ループを作成し、その実行にかかったフレーム数をシステム変数MAINCNTLから取り出して比較します。
'FORループ BGN=MAINCNTL FOR I=0 TO 100000 NEXT ? MAINCNTL-BGN 'IFループ BGN=MAINCNTL I=0 @IFLOOP0 I=I+1:IF I<100000 GOTO @IFLOOP0 ? MAINCNTL-BGN
上記のプログラムを数回実行し、その平均をとると、
FORループ | IFループ | ||
---|---|---|---|
実行フレーム数 | 120 | 300 |
という結果だった。
上記は100000回のループの場合なので、1回の場合にはこのおよそ100000分の1の時間と考えられる。
そこで、単位を「1命令の実行にかかるフレーム数」とする。
省略する場合は「fpi」(frame per instrunction)と書く。
単位:1命令の実行にかかるフレーム数
(1)FORループ | (2)IFループ |
---|---|
0.00120 | 0.00300 |
'変数書き込みループ BGN=MAINCNTL FOR I=0 TO 100000 T=1 NEXT ? MAINCNTL-BGN >|| '変数読み出しループ BGN=MAINCNTL FOR I=0 TO 100000 T=I NEXT ? MAINCNTL-BGN
上記実行結果は、変数書き込みループが200フレーム、変数読み出しループが220フレームだった。
すると、変数書き込みに必要な純粋な実行時間は、
(変数書き込みループの実行時間 − FORループの実行時間)
と考えられるので、変数書き込み10万回の実行時間は80フレームと考えられる。
また、変数読み出しに必要な純粋な実行時間は、
(変数読み出しループの実行時間 − FORループの実行時間 − 変数書き込みの実行時間)
と考えられるので、変数読み出し10万回の実行時間は20フレームと考えられる。
1命令の実行にかかるフレーム数に直し、配列の読み出し、書き込みも加えたのが以下の表。
単位:1命令の実行にかかるフレーム数
(3)変数読み出し | (4)変数書き込み | (5)配列読み出し | (6)配列書き込み |
---|---|---|---|
0.00020 | 0.00080 | 0.00060 | 0.00130 |
例えば、I=J のようなコードは、変数Jについて(3)変数読み出しを、変数Iについて(4)変数書き込みをしていると考えられるから、
およそ0.001フレームの実行時間と推定できる。
つまり1フレーム内に1000回実行できる。
考え方におかしい点等ありましたらご指摘ください。