[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[dennou-ruby:000716] Re: NumArray
堀之内です。
> 以前, FIP の谷口さんから紹介のあった神代さんですが, ruby に慣れてもら
> うことも含めて, まずは以下のような内容の作業を依頼しました.
>
> 1. 川那辺君が作った NumArray を使ってみる.
>
> 2. NumArray と同様なパッケージで, ruby コミュニティでは古株の NArray
> も平行して使ってみる.
>
> 3. パフォーマンスにも気を配りながらそれぞれの使い勝手を報告してもらう.
>
> 質問等が上がってくることもあるかと思いますが, みなさんよろしくお願いし
> ます.
ベンチマークには、ruby のホームページの「アーカイブ」にある
benchmark というパッケージが便利です。インストールは
/usr/local/lib/ruby/site_ruby/1.6/
等の、パスの通ったディレクトリーにコピーするだけです。
簡単なベンチマーク結果をお送りします。NArray vs NumArray vs
Fortran90 (compiler: Fujitsu) vs C (compiler: gcc) です。
ソース一式は添付。結果は以下です。"shisoku" の部分は Fortran90,
C とも比較できます。
% cd benchmark/
% ./Bench
#### NArray vs NumArray ####
shisoku
0.390000 0.130000 0.520000 ( 0.522238) <-- 1行目はNArray
0.540000 0.070000 0.610000 ( 0.608763) <-- 2行目はNumArray(以下同様)
shisoku (with scalar)
0.400000 0.000000 0.400000 ( 0.396140)
0.530000 0.000000 0.530000 ( 0.523714)
shisoku (with scalar, coerced)
0.400000 0.000000 0.400000 ( 0.410367)
0.530000 0.000000 0.530000 ( 0.536637)
math
2.690000 0.000000 2.690000 ( 2.743106)
2.700000 0.000000 2.700000 ( 2.840096)
sum, av, var, rms
0.120000 0.000000 0.120000 ( 0.119765)
0.130000 0.000000 0.130000 ( 0.124949)
max, min, median
0.000000 0.000000 0.000000 ( 0.000047)
0.000000 0.000000 0.000000 ( 0.000047)
transpose
0.370000 0.000000 0.370000 ( 0.367455)
1.860000 0.000000 1.860000 ( 1.858422)
#### shisoku in Fortran90 (10 iterations of +-*/) ####
real 1.2 <-- 10回繰り返してるので、上と比較する
user 1.0 <-- ためには10分の1にする
sys 0.0
#### shisoku in C (10 iterations of +-*/) ####
real 1.8 <-- 10回繰り返してるので、上と比較する
user 1.7 <-- ためには10分の1にする
sys 0.1
比較には 100*100*100 の3次元配列を使いました。(Cだけ面倒だった
ので 1000,000 の1次元配列。)
四則演算では NumArray は NArray より数割遅いです。
新しい NArray/NumArray オブジェクトを作る必要がない "sum, av,
var, rms" の 部分ではほとんど差がつかないので、この差は新オブジェ
クトを allocate する時間の違いではないかと予想できます。
ruby のためのオーバヘッドを省くよう C で計算すると、四則演算に関
し、NArray でもも C の倍くらい時間がかかっていることがわかります。
以上、配列の大きさがかわると結果が違うでしょうし、それはシステマ
ティックに調べるべきですが、やってません。また、部分配列の切り出
しや代入等、いろいろなメソッドについても調べてみたいところです。
また、他のプラットフォームでのテストも欲しいです。神代さんに、期
待します。
堀之内 武 horinout@xxxxxx
京都大学宙空電波科学研究センター phone:0774-38-3812
611-0011 宇治市五ヶ庄 fax:0774-31-8463