1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

IchigoJamAdvent Calendar 2021

Day 21

IchigoJam(Rではない)の除算は遅いか?

Posted at

検証内容

IchigoJam R で使われているGD32VF103CBT6には除算命令があるが、
IchigoJam で使われているLPC1114FN28/102やLPC1114FDH28には除算命令が無い。
ということは、RではないIchigoJamでの除算はソフトウェアで計算しなければならず、遅いか?

※「RではないIchigoJam」にはIchigoJam PC、IchigoJam ap、IchigoJam RPi、IchigoJam webもあるが、ここでは扱わない

検証方法

IchigoKamuy (1.4.1、VER()=14114) および IchigoJam R (1.5b、VER()=15001) において、
ビデオ出力をオフ(VIDEO0)にし、以下のプログラムで各演算子の計算にかかる時間を調べた。

10 ' エンザンシ ソクド テスト
20 INPUT"B=",B
30 INPUT"C=",C
40 CLT:FORI=1TO30000:A=B*C:NEXT:T=TICK():?"*",T
50 CLT:FORI=1TO30000:A=B/C:NEXT:T=TICK():?"/",T
60 CLT:FORI=1TO30000:A=B%C:NEXT:T=TICK():?"%",T
70 CLT:FORI=1TO30000:A=BMODC:NEXT:T=TICK():?"MOD",T
80 CLT:FORI=1TO30000:A=B<<C:NEXT:T=TICK():?"<<",T
90 CLT:FORI=1TO30000:A=B>>C:NEXT:T=TICK():?">>",T
100 CLT:FORI=1TO30000:A=B&C:NEXT:T=TICK():?"&",T
110 CLT:FORI=1TO30000:A=B^C:NEXT:T=TICK():?"^",T
120 CLT:FORI=1TO30000:A=B+C:NEXT:T=TICK():?"+",T
130 CLT:FORI=1TO30000:A=B-C:NEXT:T=TICK():?"-",T
140 CLT:FORI=1TO30000:A=B|C:NEXT:T=TICK():?"|",T
150 CLT:FORI=1TO30000:A=B=C:NEXT:T=TICK():?"=",T
160 CLT:FORI=1TO30000:A=B!=C:NEXT:T=TICK():?"!=",T
160 CLT:FORI=1TO30000:A=B<>C:NEXT:T=TICK():?"<>",T
170 CLT:FORI=1TO30000:A=B<C:NEXT:T=TICK():?"<",T
180 CLT:FORI=1TO30000:A=B>C:NEXT:T=TICK():?">",T
190 CLT:FORI=1TO30000:A=B<=C:NEXT:T=TICK():?"<=",T
200 CLT:FORI=1TO30000:A=B>=C:NEXT:T=TICK():?">=",T
210 CLT:FORI=1TO30000:A=BANDC:NEXT:T=TICK():?"AND",T
220 CLT:FORI=1TO30000:A=BORC:NEXT:T=TICK():?"OR",T

実験結果

それぞれの環境において1回測定した結果、実行時間(TICK()の値)は以下のようになった。

演算子 IchigoKamuy
B=8765:C=4321
IchigoKamuy
B=30000:C=2
IchigoJam R
B=8765:C=4321
IchigoJam R
B=30000:C=2
* 2556 2557 414 414
/ 2565 2577 416 416
% 2569 2582 416 416
MOD 2576 2588 417 417
<< 2555 2556 414 414
>> 2552 2552 414 414
& 2545 2544 412 412
^ 2547 2547 413 413
+ 2578 2579 418 417
- 2582 2582 418 419
| 2588 2587 419 419
= 2605 2605 421 421
<> 2614 2615 423 423
< 2627 2626 424 424
> 2632 2632 426 426
<= 2623 2623 424 424
>= 2629 2629 425 425
AND 2643 2643 427 427
OR 2655 2656 428 428

また、以下のプログラムを用いて演算子の計算以外の部分にかかる時間を1回測定した。

CLT:FORI=1TO30000:A=B:NEXT:T=TICK():?T

その結果、TICK()の値はIchigoKamuyでは2297、IchigoJam R では370となった。
この値を引き、演算子の計算のみの時間に近づけた実行時間は、以下のようになった。

演算子 IchigoKamuy
B=8765:C=4321
IchigoKamuy
B=30000:C=2
IchigoJam R
B=8765:C=4321
IchigoJam R
B=30000:C=2
* 259 260 44 44
/ 268 280 46 46
% 272 285 46 46
MOD 279 291 47 47
<< 258 259 44 44
>> 255 255 44 44
& 248 247 42 42
^ 250 250 43 43
+ 281 282 48 47
- 285 285 48 49
| 291 290 49 49
= 308 308 51 51
<> 317 318 53 53
< 330 329 54 54
> 335 335 56 56
<= 326 326 54 54
>= 332 332 55 55
AND 346 346 57 57
OR 358 359 58 58

今回実験を行った2種類の入力値について、ほとんどの演算子で実行時間の差は1以下であるが、
IchigoKamuyにおける/%MOD演算子では実行時間の差が12~13と大きくなっている。
これは、IchigoKamuyにおいては除算をソフトウェアで実行しており、
そのアルゴリズムの完了までの時間が入力値によって変わるためであると考えられる。

一方、IchigoJam Rでは、除算の演算子でも今回の2種類の入力値においては実行時間の差が出ていない。
これは、実行時間が入力値の影響を受けないハードウェアで除算が実行されているためであると予想できる。

なお、実行時間が入力値によって変わるものの、
予想に反し、RではないIchigoJamにおいても除算は遅くないことがわかった。
除算にかかった時間は加算や減算と同程度であり、比較の方がかかる時間が長いという結果になった。

結論

RではないIchigoJamにおいては除算にかかる時間は入力値によって変わることがあるが、
IchigoJam R においては除算にかかる時間が入力値によって変わらないと予想できる。

除算命令が無いCPUを用いているRではないIchigoJamにおいても、
除算演算子の処理は他の演算子と比べて特別遅いわけではなく、除算より処理時間が長い演算子も多い。

おわりに

  • IchigoJamはjig.jpの登録商標です。
  • IchigoKamuyは株式会社syushuの登録商標です。
1
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?