Go ahead!

Memoization for Everything

TinySegmenterのベンチマーク + D言語版

| Comments

TinySegmenterをJulia移植したらMITの先生に指導してもらえた話

上の記事がTLで結構話題になっていて,そういえば昔TinySegmenterをD言語で実装したなぁと掘り起こした(TinySegmenter written in D).5年前のコードだったけど最新版でもさっくりと動いたので,どれくらいか比較のためにベンチマークを取ってみた.

結果としては,Juliaには勝てなかった.コードを読んだ限り,Julia実装は他のとは違って中間のsegmentsリストを作らなかったりとか最適化がちょくちょく入っているので,この辺D言語でも頑張れば近いパフォーマンスは出せそう.

ベンチマークしたのは手元のMBP.それぞれの処理系は*envで入れたりhomebrewを使って入れたりした.

  • Processor: 2.6 GHz Intel Core i7
  • Memory: 16 GB 1600 MHz DDR3

上の記事のベンチマーク結果は,Pythonのベンチマークだけループ回数が100じゃなくて10だったり,Juliaの実装にTC1などのスコアリングがなかったりといくつか完璧ではないので,修正した後にchezouさんが再度計測しなおすと思われます(すでに本人には報告済み).

以下手元でのベンチマーク結果.速かった順.


  • julia 0.4.0

masterだとTC1とかの修正が入ってます.

1
2
3
% julia -L ../src/TinySegmenter.jl benchmark.jl

  8.887454 seconds (5.04 M allocations: 253.778 MB, 0.53% gc time)
  • ldc2-0.16.0-beta2
1
2
3
% ~/ldc2-0.16.0-beta2-osx-x86_64/bin/ldc2 tinysegmenter.d -O3 -boundscheck=off -inline -release -run benchmark.d

segment: 14 secs, 923 ms, and 352 μs
  • nodejs v4.2.1
1
2
3
% node benchmark.js

82.42sec
  • Ruby 2.2.3

高速化したバージョン.パッチはすでに本家に投げました(Improve performance by repeatedly · Pull Request #1 · 6/tiny_segmenter)

1
2
3
% RUBYLIB=./lib ruby benchmark.rb
                 user     system      total        real
segment    110.560000   0.800000 111.360000 (111.823173)
  • Python 3.5.0

Python 2の方は3.5に比べて遅いらしいのでやってない.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
% python tinysegmenter3.py
## benchmarker:         release 4.0.1 (for python)
## python version:      3.5.0
## python compiler:     GCC 4.2.1 Compatible Apple LLVM 7.0.0 (clang-700.0.72)
## python platform:     Darwin-15.0.0-x86_64-i386-64bit
## python executable:   /Users/repeatedly/.pyenv/versions/3.5.0/bin/python
## cpu model:           Intel(R) Core(TM) i7-4960HQ CPU @ 2.60GHz 
## parameters:          loop=1, cycle=1, extra=0

##                        real    (total    = user    + sys)
tokenize              181.4310  181.0800  180.2500    0.8300

## Ranking                real
tokenize              181.4310  (100.0) ********************

## Matrix                 real    [01]
[01] tokenize         181.4310   100.0

Comments