せっかくNimを始めたので知っている言語でベンチマーク試してみました。

タイトルの通りです。
初めてのベンチマークを体験してみました。

今回の出場者

「触ったことろのある言語」というのは以下の通りです。

C

「難しそうだから」という理由で人生初めてのプログラミング言語として最初に触った言語。後に大学の授業でもちょっとやった。

JavaScript

普段のアプリ開発やweb制作に使っている。最近一番触っている。

Python

ディープラーニングの勉強やデータ分析やスクレイピングの時に使っている。2番目に使っている。

PHP

このブログのwordpressやバイト先で使っている。あまり知らない。

Nim

最近始めた。サーバーサイド言語。

実際にやってみた

ルールはこんな感じです。
・フィボナッチ関数を作って再帰的に計算させる。
・フィボナッチ数列の40番目を出力する(なんで40番目なんだろう)
・timeコマンドで5回計測して平均を取る

「フィボナッチ関数を作って40番目の値を出力させる」ってベンチマーク界隈では割と一般的っぽいけどなんで40番目なんだろう。
長すぎず、短すぎずって感じなのかな。

ちなみに40番目は102334155です。

C

普通にコンパイルしてみます。
$ gcc fib.c

実行
$ time ./a.out

結果
0.816s

次に、最適化オプションを付けてコンパイルしてみます。
$ gcc -O3 fib.c

実行
$ time ./a.out

結果
0.674s

JavaScript

$ time osascript -l JavaScript fib.js

結果
1.108s

Python

実行
$ time python fib.py

結果
52.668s

PHP

実行
$ time php fib.php

結果
16.151s

Nim

コンパイル
$ nim c -d:release fib

実行
$ time fib

結果
0.689s

結果

結果です。

C 0.674s
JavaScript 1.108s
Python 52.668s
PHP 16.151s
Nim 0.689s

まずPythonの遅さにびっくりしました。
こんなに違うのですね。
CやNimに比べると100倍くらい違いますね。

そして意外とjsが速いことにも驚きました。

Cの最適化コンパイルとNimはどっこいどっこいという感じでした。勝ったり負けたりしています。
ただ、Nimに関しては最適化コンパイルの方法を知らないので、これが最速かどうかわかりません。

所感など

簡単ではありますが、こんな感じで初めてベンチマークをしてみました。
初めて言語の処理速度に関して少し関心が湧いてきて良かったです。

最近興味あるシェルスクリプトやGo言語でもフィボナッチ書いてみようかなと思ったんですけど、
あまりにも基本文法が抜けててわからなかったので、今回はパスしました。

DeepLearningのライブラリなどが豊富でよく使われるPythonですが、この遅さは計算時間が割と肝であるDeepLearningを実装する上でネックになり得るのではないかと感じました。

Pytonの遅さ問題について少し調べてみると、その遅さをカバーするためにPyPyやCythonなど、Pythonで書き直したPythonや、Pythonの一部をCの力を借りて速くするものもあるんですね。

DeepLearningに関して言えば、動的型付けなのにも関わらず計算も速く、科学技術計算向きであり、かつDeepLearning用のライブラリなどもある、すごく良さげなプログラミング言語もあるのですね。
やってみようかな。

50秒って体感結構長いですね。数字として見るより。

コメントを残す