GMP wrapper を使って pidigits を書き直す

このあたり でベンチマークの結果が python に負けてるのもあってがっかり、みたいな話題に対して、id:tokuhirom さんが「チートぎみなのもあるからソースをよく読んで判断せよ」という話。http://d.hatena.ne.jp/tokuhirom/20091124/1259029688

探してみたら、misc/cgo/gmp/ 内に GMP の wrapper が入ってます。

An example of wrapping a C library in Go.

とは書いてあるけど、おあつらえ向きに pi.go という円周率を求めるサンプルコードも入っていたので、これを使って pidigits Go 6g 8g program を書き直してみた。

ソースコードはこちら。http://gist.github.com/241663

手元の環境 (Ubuntu-9.10 AMD64, AthlonX2 5400+) での実行結果。比較用に C の実行結果も。pidigits C GNU gcc #4 program

n=2000
Go(bignum)   2.141s
Go(gmp)      0.172s
C            0.110s

n=6000  
Go(bignum)  20.348s
Go(gmp)      0.839s
C            0.663s

n=10000
Go(bignum)  64.630s
Go(gmp)      2.472s
C            2.160s

こんな感じで GMP を使えば、C よりちょっと遅いぐらいの速度になりましたよ。