[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[dennou-ruby:000785] NumArray / NArray



神代です。

ベンチマークの結果報告の続きです。
今回は,ごとけんさんにコメントをいただいたので,benchmark.rb の bmbm と
いう関数を使ってやってみました。

ソース,結果一式を添付しましたので,見てみてください。

手元の2つの環境で実行した結果です。
比較には 50*50*50, 100*100*100 の3次元配列(Cだけ同要素数の1次元配列)を
用い,float と complex についてやってみました(ただし,メモリの制限が
あって全てのパターンを試せていません)。
前と同じで float の "shisoku" の部分は C, Fortran90 とも比較できます。

そのうちの一例:
Mobile Pentium III 600MHz における float の 100*100*100 配列の結果

-----------------------------------------------------------------------
float, (100, 100, 100)

### NArray vs. NumArray ###

+++ shisoku +++

Rehearsal --------------------------------------------
NArray     0.170000   0.160000   0.330000 (  0.323462)
NumArray   0.320000   0.150000   0.470000 (  0.472790)
----------------------------------- total: 0.800000sec

               user     system      total        real
NArray     0.270000   0.070000   0.340000 (  0.335321)
NumArray   0.380000   0.200000   0.580000 (  0.575265)


+++ shisoku (with scalar) +++

Rehearsal --------------------------------------------
NArray     0.210000   0.110000   0.320000 (  0.315216)
NumArray   0.410000   0.160000   0.570000 (  0.574298)
----------------------------------- total: 0.890000sec

               user     system      total        real
NArray     0.180000   0.120000   0.300000 (  0.295989)
NumArray   0.390000   0.180000   0.570000 (  0.569698)


+++ shisoku (with scalar, coerced) +++

Rehearsal --------------------------------------------
NArray     0.220000   0.100000   0.320000 (  0.321818)
NumArray   0.400000   0.180000   0.580000 (  0.578127)
----------------------------------- total: 0.900000sec

               user     system      total        real
NArray     0.200000   0.110000   0.310000 (  0.318140)
NumArray   0.410000   0.170000   0.580000 (  0.575682)


+++ math +++

Rehearsal --------------------------------------------
NArray     0.830000   0.080000   0.910000 (  0.906774)
NumArray   0.700000   0.140000   0.840000 (  0.843123)
----------------------------------- total: 1.750000sec

               user     system      total        real
NArray     0.820000   0.080000   0.900000 (  0.901240)
NumArray   0.690000   0.150000   0.840000 (  0.841207)


+++ sum, av, rms +++

Rehearsal --------------------------------------------
NArray     0.280000   0.070000   0.350000 (  0.349015)
NumArray   0.140000   0.000000   0.140000 (  0.135953)
----------------------------------- total: 0.490000sec

               user     system      total        real
NArray     0.300000   0.050000   0.350000 (  0.345805)
NumArray   0.140000   0.000000   0.140000 (  0.137402)


+++ max, min +++

Rehearsal --------------------------------------------
NArray     0.100000   0.000000   0.100000 (  0.095346)
NumArray   0.090000   0.000000   0.090000 (  0.095207)
----------------------------------- total: 0.190000sec

               user     system      total        real
NArray     0.100000   0.000000   0.100000 (  0.097235)
NumArray   0.090000   0.000000   0.090000 (  0.090692)


+++ transpose +++

Rehearsal --------------------------------------------
NArray     0.170000   0.030000   0.200000 (  0.199335)
NumArray   0.580000   0.040000   0.620000 (  0.645481)
----------------------------------- total: 0.820000sec

               user     system      total        real
NArray     0.190000   0.010000   0.200000 (  0.203835)
NumArray   0.550000   0.050000   0.600000 (  0.597789)

#### shisoku in gcc (10 iterations of +-*/) ####

real    0m1.103s        <--  10回繰り返してるので
user    0m1.000s        <--  上と比較するためには
sys     0m0.060s        <--  ためには10分の1にする

-----------------------------------------------------------------------

ごとけんさんからは

| GCや最初のmallocなどの影響も気にとめておいてください。RAAからリンク
| されてるホームページのほうにはその辺も踏まえてお手軽なbmbmという関数
| を用意した版を置いてあります。

というコメントをいただいてたんですが,結果の見方がイマイチよくわかりま
せん。勉強不足ですみません,お分かりになる方お教えください。

# "Rehearsal"の部分が「GCや最初のmallocなどの影響」のある部分だと思って,
# その下の結果を検討すればいいのかなと思ったんですが……


結果全体を眺めて気がついたことは;

・プラットフォームによらず,実数の四則演算に関して NumArray は NArray に
  比べて数割遅い。
・複素数の計算に関して NumArray は非常に遅い。四則計算でみると,実数のと
  きの数倍時間がかかる。
・"math" や "sum, av, rms" については NArray と NumArray であまり差がない。
  "max, min" については NumArray のほうが数倍速い。

といったところです。


それから,ソースコードのほうも見てみようとしているのですが,私は C の経験
がほとんど全くないので,まず何が書いてあるのかを理解するまでに時間がかか
りそうです。そこからプログラムのボトルネックを見つけるということになると,
とても短期間にはできません。
これについては今後の課題ということにさせていただいて,少しずつ C の勉強を
したいと思います。

今回のレポートとしてはこんなところです。


-- 
神代  剛 (KOSHIRO Tsuyoshi)  <t.koushiro@xxxxxx> 
富士通エフ・アイ・ピー(株) 環境システム事業推進部 システム部 
勤務先 >> 通信総合研究所 電磁波計測部門 降水レーダグループ 
mailto:koshiro@xxxxxx  TEL:042-327-6880  FAX:042-327-6666

benchtest.tar.gz

n