MA-E3xxには、スクリプト言語として
を導入してあります。
せっかくなので、satosystemsの日記 - フィボナッチで各種言語をベンチマーク で行っている
ベンチマークテストを、MA-E3xx上で各種言語でテストしてみました。
コードは下記になります。
def fib(n): if n < 2: return n return fib(n - 2) + fib(n - 1) print(fib(38))
実行結果はこのようになりました。
user1@plum:~$ time python3 fib.py 39088169 real 2m35.226s user 2m33.116s sys 0m0.072s
sub fib($) { return $_[0] if ($_[0] < 2); return fib($_[0] - 2) + fib($_[0] - 1); } print fib(38), "\n";
実行結果はこのようになりました。
user1@plum:~$ time perl fib.pl 39088169 real 4m5.286s user 4m1.284s sys 0m0.572s
function fib(n) if n < 2 then return n end return fib(n - 2) + fib(n - 1) end print(fib(38))
実行結果はこのようになりました。
user1@plum:~$ time luajit fib.lua 39088169 real 0m9.108s user 0m8.592s sys 0m0.396s
JITコンパイラによりネイティブコードに変換されるだけあって、桁違いに速いです。
function fib(n) { if (n < 2) return n; return fib(n - 2) + fib(n - 1); } console.log(fib(38));
実行結果はこのようになりました。
user1@plum:~$ time nodejs fib.js 39088169 real 0m7.108s user 0m6.884s sys 0m0.084s
さすがは V8 、LuaJITよりも高速でした。
Ruby2.0 を追加で導入し、テストしてみました。
def fib(n) return n if (n < 2) return fib(n - 2) + fib(n - 1) end puts fib(38)
実行結果はこのようになりました。
user1@plum:~$ time ruby2.0 fib.rb 39088169 real 0m58.870s user 0m56.992s sys 0m0.952s
Ruby2.0 と同じコードを、Ruby1.9 で実行してみます。
user1@plum:~$ time ruby1.9.1 fib.rb 39088169 real 1m20.224s user 1m18.072s sys 0m0.944s
<?php function fib($n) { if ($n < 2) return $n; return fib($n - 2) + fib($n - 1); } print fib(38); print "\n"; ?>
user1@plum:~$ time php5-cgi fib.php X-Powered-By: PHP/5.5.9-1ubuntu4.3 Content-type: text/html 39088169 real 2m39.913s user 2m38.097s sys 0m0.067s
Python3 と同程度、こんなところでしょうか。
コンパイルする言語なので、速いと思いますが一応。
public class fib { static int fib(int n) { if (n < 2) return n; return fib(n - 2) + fib(n - 1); } public static void main(String[] args) { System.out.println(fib(38)); } }
実行結果は下記のようになりました。
user1@plum:/tmp$ time java fib 39088169 real 0m5.021s user 0m2.024s sys 0m2.796s
さすがは HotSpot によるJITコンパイルが効くだけあって、スクリプト言語よりも高速です。
VM の起動に時間がかかるせいか、“user” は短いですが “sys” で時間がかかっています。
OpenJDK 11 でも試してみます。
user1@plum:~$ time java fib 39088169 real 0m7.083s user 0m2.139s sys 0m4.703s user1@plum:~$ time java fib 39088169 real 0m2.284s user 0m2.157s sys 0m0.114s
user1@plum:~$ java -version openjdk version "11.0.3" 2019-04-16 OpenJDK Runtime Environment (build 11.0.3+7-Ubuntu-1ubuntu218.04.1) OpenJDK Server VM (build 11.0.3+7-Ubuntu-1ubuntu218.04.1, mixed mode)
初回はキャッシュされてないので遅いですが、“user” の時間は Java SE embedded 8 とあまり遜色なさそうな感じです。
ネイティブコードにコンパイルする、C言語でも試してみます。
#include <stdio.h> int fib(int n) { if (n < 2) return n; return fib(n - 2) + fib(n - 1); } int main(int argc, char *argv[]) { printf("%d\n", fib(38)); return 0; }
実行結果は下記のようになりました。
user1@plum:/tmp$ time ./fib 39088169 real 0m1.376s user 0m1.332s sys 0m0.012s
スクリプト言語やVM系とは比較にならないほど高速でした。