LoginSignup
2
2

More than 5 years have passed since last update.

TopazとRubyとPythonでHashの速度を比較してみた

Last updated at Posted at 2013-02-10

RPythonを使って速くなるという噂のRubyの実装、Topazを使ってHashの速度を比較してみました。

RubyのHashって他の言語に比べて遅いという指摘があるんですよね。サイズが大きくなるとPerlやPythonよりも遅いという話です。(Perlとの比較がどこにあったか忘れた)

で、Topaz使えば速くなるかなーと淡い期待をして比較してみました。

Topazの導入はRPythonで書かれたRuby処理系Topazで遊ぶ - グニャラくんのwktk運営日記を参考にしました。

比較用に使ったコードはGithubにあります。
今回は手抜きをして、平均とったりしてません。参考値ということで。

環境は
MacOS X 10.8.2
Intel Core i5 2.5GHz
8GB RAM

$ ruby -v
ruby 1.9.3p362 (2012-12-25 revision 38607) [x86_64-darwin12.2.1]
$ python --version
Python 2.7.3
$ bin/topaz -v
topaz (ruby-1.9.3p125) [x86_64-darwin]

SequentialなHashの作成速度

単位は秒

size Ruby1.9.3(int) Ruby1.9.3(string) topaz(int) topaz(string) Python2.7.3(int) Python2.7.3(string)
5000000 4.617856 8.087801 2.649405 11.485846 0.702034 2.473861
10000000 10.74621 19.092902 8.377534 36.823358 1.361577 5.112283
15000000 17.081968 29.101156 18.608418 80.467088 2.262289 8.392108
20000000 24.308324 39.974923 29.239815 129.432628 2.712998 10.639115
25000000 31.778632 51.38185 49.467747 303.785251 4.048304 15.097062
30000000 39.180657 60.673959 67.91127 342.049215 4.510771 17.036763

グラフにすると、こんな感じ。
Creating Hash(int)

Creating Hash(string)

うーん、Topazが思ったより速くない。。。

Lookupの速度

単位は秒

size Ruby1.9.3(int) Ruby1.9.3(string) topaz(int) topaz(string) Python2.7.3(int) Python2.7.3(string)
5000000 0.600543 0.908508 0.442561 0.678826 0.164233 0.456206
10000000 0.631404 1.027941 0.49407 0.738537 0.165629 0.457019
15000000 0.665743 0.913473 0.585652 0.883217 0.157661 0.462758
20000000 0.72521 1.288778 0.599958 0.93315 0.19554 0.452863
25000000 0.561795 0.877556 0.780173 1.232231 0.163047 0.478319
30000000 0.657025 1.296413 0.783736 1.353858 0.160251 0.456952

グラフはこちら
Lookup Hash(int)

Lookup Hash(string)

やってみて思ったこと

Topazは今後速くなる可能性があって楽しみではありますが、現状では

  • Kernel#randに引数渡せない
  • Benchmarkが使えない
  • 正規表現が使えない
  • 'p'もできない

などなど色々と厳しいところもあります。
今後の発展に期待です。

2
2
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
2
2