ユーザ用ツール

サイト用ツール


mae3xx_tips:test_fib_benchmark:start

差分

この文書の現在のバージョンと選択したバージョンの差分を表示します。

この比較画面にリンクする

両方とも前のリビジョン 前のリビジョン
次のリビジョン
前のリビジョン
mae3xx_tips:test_fib_benchmark:start [2014/07/17 15:32]
admin
mae3xx_tips:test_fib_benchmark:start [2023/06/23 07:46] (現在)
admin [Nim]
ライン 1: ライン 1:
 +====== フィボナッチ数列でベンチマーク ======
  
 +MA-E3xxには、スクリプト言語として
 +  * Python3.4
 +  * Python2.7 (v2.2.0 以降追加)
 +  * Perl5.8
 +  * LuaJIT-2.0.2
 +  * nodejs-0.10 (v2.2.0 以降削除予定)
 +を導入してあります。
 +
 +せっかくなので、[[http://​d.hatena.ne.jp/​satosystems/​20121228/​1356655565|satosystemsの日記 - フィボナッチで各種言語をベンチマーク]] で行っている\\
 +ベンチマークテストを、MA-E3xx上で各種言語でテストしてみました。
 +
 +\\
 +
 +
 +===== テスト =====
 +
 +==== Python ====
 +
 +コードは下記になります。
 +
 +<sxh python toolbar:​false;​ title:​fib.py>​
 +def fib(n):
 +    if n < 2: return n
 +    return fib(n - 2) + fib(n - 1)
 +
 +print(fib(38))
 +</​sxh>​
 +
 +実行結果はこのようになりました。
 +
 +<​code>​
 +user1@plum:​~$ time python3 fib.py ​
 +39088169
 +
 +real 2m35.226s
 +user 2m33.116s
 +sys 0m0.072s
 +</​code>​
 +
 +\\
 +
 +==== Perl ====
 +
 +<sxh perl toolbar:​false;​ title:​fib.pl>​
 +sub fib($) {
 +    return $_[0] if ($_[0] < 2);
 +    return fib($_[0] - 2) + fib($_[0] - 1);
 +}
 +
 +print fib(38), "​\n";​
 +</​sxh>​
 +
 +実行結果はこのようになりました。
 +
 +<​code>​
 +user1@plum:​~$ time perl fib.pl ​
 +39088169
 +
 +real 4m5.286s
 +user 4m1.284s
 +sys 0m0.572s
 +</​code>​
 +
 +\\
 +
 +==== LuaJIT ====
 +
 +<file lua fib.lua>
 +function fib(n)
 +    if n < 2 then return n end
 +    return fib(n - 2) + fib(n - 1)
 +end
 +
 +print(fib(38))
 +</​file>​
 +
 +実行結果はこのようになりました。
 +
 +<​code>​
 +user1@plum:​~$ time luajit fib.lua ​
 +39088169
 +
 +real 0m9.108s
 +user 0m8.592s
 +sys 0m0.396s
 +</​code>​
 +
 +JITコンパイラによりネイティブコードに変換されるだけあって、桁違いに速いです。
 +
 +\\
 +
 +==== node.js ====
 +
 +<sxh javascript toolbar:​false;​ title:​fib.js>​
 +function fib(n) {
 +    if (n < 2) return n;
 +    return fib(n - 2) + fib(n - 1);
 +}
 +
 +console.log(fib(38));​
 +</​sxh>​
 +
 +実行結果はこのようになりました。
 +
 +<​code>​
 +user1@plum:​~$ time nodejs fib.js ​
 +39088169
 +
 +real 0m7.108s
 +user 0m6.884s
 +sys 0m0.084s
 +</​code>​
 +
 +さすがは V8 、LuaJITよりも高速でした。
 +
 +\\
 +
 +==== Ruby2.0 ====
 +
 +Ruby2.0 を追加で導入し、テストしてみました。
 +
 +<sxh ruby toolbar:​false;​ title:​fib.rb>​
 +def fib(n)
 +    return n if (n < 2)
 +    return fib(n - 2) + fib(n - 1)
 +end
 +
 +puts fib(38)
 +</​sxh>​
 +
 +実行結果はこのようになりました。
 +
 +<​code>​
 +user1@plum:​~$ time ruby2.0 fib.rb ​
 +39088169
 +
 +real 0m58.870s
 +user 0m56.992s
 +sys 0m0.952s
 +</​code>​
 +
 +\\
 +
 +==== Ruby1.9 ====
 +
 +Ruby2.0 と同じコードを、Ruby1.9 で実行してみます。
 +
 +<​code>​
 +user1@plum:​~$ time ruby1.9.1 fib.rb ​
 +39088169
 +
 +real 1m20.224s
 +user 1m18.072s
 +sys 0m0.944s
 +</​code>​
 +
 +\\
 +
 +==== PHP5 ====
 +
 +<sxh php toolbar:​false;​ title:​fib.php>​
 +<?php
 +function fib($n) {
 +    if ($n < 2) return $n;
 +    return fib($n - 2) + fib($n - 1);
 +}
 +
 +print fib(38);
 +print "​\n";​
 +?>
 +</​sxh>​
 +
 +<​code>​
 +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
 +</​code>​
 +
 +Python3 と同程度、こんなところでしょうか。
 +
 +\\
 +
 +==== Java SE Embedded 8 ====
 +
 +コンパイルする言語なので、速いと思いますが一応。
 +
 +<sxh java toolbar:​false;​ title:​fib.java>​
 +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));​
 +    }
 +}
 +</​sxh>​
 +
 +実行結果は下記のようになりました。
 +
 +<​code>​
 +user1@plum:/​tmp$ time java fib  ​
 +39088169
 +
 +real 0m5.021s
 +user 0m2.024s
 +sys 0m2.796s
 +</​code>​
 +
 +さすがは HotSpot によるJITコンパイルが効くだけあって、スクリプト言語よりも高速です。\\
 +VM の起動に時間がかかるせいか、"​user"​ は短いですが "​sys"​ で時間がかかっています。
 +
 +\\
 +
 +==== Java (OpenJDK 11) ====
 +
 +OpenJDK 11 でも試してみます。
 +
 +<​code>​
 +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
 +</​code>​
 +
 +<​code>​
 +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)
 +</​code>​
 +
 +初回はキャッシュされてないので遅いですが、"​user"​ の時間は Java SE embedded 8 とあまり遜色なさそうな感じです。
 +
 +\\
 +
 +==== GCC ====
 +
 +ネイティブコードにコンパイルする、C言語でも試してみます。
 +
 +<sxh c toolbar:​false;​ title:​fib.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;
 +}
 +</​sxh>​
 +
 +実行結果は下記のようになりました。
 +
 +<​code>​
 +user1@plum:/​tmp$ time ./fib 
 +39088169
 +
 +real 0m1.376s
 +user 0m1.332s
 +sys 0m0.012s
 +</​code>​
 +
 +スクリプト言語やVM系とは比較にならないほど高速でした。
 +
 +\\
 +
 +==== Nim ====
 +
 +いま注目の Nim では?
 +
 +<codify nim>
 +proc fib(n: int): int =
 +  if n < 2:
 +    return n
 +  else:
 +    return fib(n - 1) + fib(n - 2)
 +
 +echo(fib(38))
 +</​codify>​
 +
 +<​code>​
 +user1@plum:​~$ time ./fib
 +39088169
 +
 +real 0m1.324s
 +user 0m1.313s
 +sys 0m0.004s
 +</​code>​
 +
 +C よりも速いとは。
 +
 +{{:​mae3xx_tips:​test_fib_benchmark:​a614d39a.gif|Java or Mocha?}}
mae3xx_tips/test_fib_benchmark/start.1405578756.txt.bz2 · 最終更新: 2014/07/17 15:32 by admin