どうも、中島です。MPIを用いた行列演算プログラムの性能を測定した結果を載せます。

ちなみに、用いたプログラムです。C言語です。

$ mpicc -o バイナリの名前 -O2 gyouretuEnzan.c gyouretuEnzan-mpi-v015.c

みたいにしてコンパイルして使ってください。
例:$ mpicc -O2 -o v015 gyouretuEnzan.c gyouretuEnzan-mpi-v015.c

使い方は、

$ mpirun -n 台数 ./バイナリの名前 行列の行数 計算時に分割する行数

です。測定結果が標準出力に吐かれます。
例:mpirun -np 1 ./v015 1000 50
(1000×1000行を50行ずつ分割して1台で計算する例)

5回動かした測定値と、その平均値を掲載します。単位は秒です。なお、計算時の 分割する行数ですが、50行にしました。ただし、3000×3000行を8台で計算した際は 25にしました。

edam上での結果

同時に動いていたプロセスですが、これぐらいです。 (topコマンドの出力画面)

last pid:  5076;  load averages:  0.38,  0.41,  0.50                   19:56:54
43 processes:  41 sleeping, 2 on cpu
CPU states: 89.8% idle, 10.0% user,  0.2% kernel,  0.0% iowait,  0.0% swap
Memory: 1280M real, 1077M free, 16M swap in use, 1485M swap free

  PID USERNAME THR PRI NICE  SIZE   RES STATE   TIME    CPU COMMAND
 5076 nakajima   2  25    0   29M   25M cpu     0:22  6.94% v015_O2
 4797 nakajima   1  25    0 1488K 1352K cpu     0:11  0.20% top
 5050 nakajima   1  15    0 1024K  848K sleep   0:00  0.01% mpirun
  161 root       3  -7    0 2952K 1952K sleep  10:43  0.00% automountd
21598 root       1  33    0 2504K 1360K sleep   1:03  0.00% sshd
    1 root       1  33    0 1752K  136K sleep   0:39  0.00% init
  282 root       1  34  -12 2248K  576K sleep   0:37  0.00% xntpd
  184 root      14 -11    0 2464K 1304K sleep   0:11  0.00% nscd
  114 root       1  33    0 2088K  648K sleep   0:05  0.00% rpcbind
  214 root       1  33    0 1688K  616K sleep   0:04  0.00% lmgrd.ste
  175 root       1  23    0 1736K  448K sleep   0:02  0.00% cron
 4781 root       1  33    0 2840K 2168K sleep   0:01  0.00% sshd
 1887 root       1  33    0 2728K 2032K sleep   0:01  0.00% sshd
18989 root       1 -25    0 1824K    8K sleep   0:00  0.00% rpc.bootparamd
27339 root       1 -23    0 1880K  792K sleep   0:00  0.00% mountd

1000行×1000行

1台

9.140141e+01 seconds.
9.138133e+01 seconds.
9.140171e+01 seconds.
9.140672e+01 seconds.
9.139987e+01 seconds.
平均値:9.139820e+01 seconds.

2台

4.644454e+01 seconds.
4.647055e+01 seconds.
4.645040e+01 seconds.
4.646713e+01 seconds.
4.644820e+01 seconds.
平均値:4.645616e+01 sectonds.

4台

2.340431e+01 seconds.
2.327706e+01 seconds.
2.328202e+01 seconds.
2.346215e+01 seconds.
2.328310e+01 seconds.
平均値:2.334172e+01seconds.

8台

なぜか、8台だとPE2以降が動作していないと思われる出力を得た。 1,2,4,10台で実行した際の計算結果は、誤差が±1×e-7未満で暴走しない。 しかし、8台では暴走する。原因は追及できなかったので、オプションである 10台を計測を計測した。注:ここでは、約35分実行して、なんら出力を得なかった ので暴走している、と判断した。

オプション:10台

1.011801e+01 seconds.
9.999821e+00 seconds.
1.007401e+01 seconds.
9.965069e+00 seconds.
9.967692e+00 seconds.
平均値:1.002491e+01seconds.

2000行×2000行

1台

topで監視し続け、7分以上経過しても終了しないのでCtrl-Cにて強制終了。

2台

topで監視し続け、2分以上経過しても終了しないのでCtrl-Cにて強制終了。

4台

topで監視し続け、2分以上経過しても終了しないのでCtrl-Cにて強制終了。

8台

topで監視し続け、3分以上経過しても終了しないのでCtrl-Cにて強制終了。

オプション:10台

データを一つ取ったところ、1分を超過していたので1回のみ測定した。
それは、7.616572e+01 seconds であった。

3000行×3000行

1台

下記参照。

2台

下記参照。

4台

下記参照。

8台

下記参照。

オプション:10台

edamでメモリを食い尽くしたので強制終了。ということで、3000行×3000行での データ収集はあきらめました。
last pid:  8306;  load averages:  8.60,  7.06,  5.33                   23:48:14
51 processes:  42 sleeping, 9 on cpu
CPU states:  0.0% idle, 80.3% user,  0.7% kernel, 19.0% iowait,  0.0% swap
Memory: 1280M real, 19M free, 1141M swap in use, 359M swap free

  PID USERNAME THR PRI NICE  SIZE   RES STATE   TIME    CPU COMMAND
 8245 nakajima   2 -25    0  212M   71M cpu     8:24 10.00% v015
 8248 nakajima   2 -25    0  212M   78M cpu     7:37 10.00% v015
 8247 nakajima   2 -25    0  212M  105M cpu     7:23 10.00% v015
 8249 nakajima   2 -25    0  212M   94M cpu     6:56 10.00% v015
 8246 nakajima   2 -25    0  212M  114M cpu     6:02 10.00% v015
 8242 nakajima   2 -25    0  212M  153M cpu     6:10  9.97% v015
 8241 nakajima   2 -25    0  212M  137M cpu     3:40  9.75% v015
 8243 nakajima   2 -25    0  212M  162M cpu     5:00  5.88% v015
 8244 nakajima   2  35    0  212M  118M sleep   5:47  4.41% v015
 8240 nakajima   2  35    0  212M  136M sleep   3:49  4.23% v015
 4797 nakajima   1 -25    0 1488K  560K cpu     4:45  0.21% top
 8306 root       1  35    0 2704K 1800K sleep   0:00  0.07% sshd
21598 root       1  24    0 2504K  696K sleep   1:08  0.01% sshd
  161 root       2  23    0 2936K 1320K sleep  10:47  0.00% automountd
    1 root       1  33    0 1752K  128K sleep   0:40  0.00% init

folonIII上での結果

5回動かした測定値と、その平均値を掲載します。単位は秒です。 なお、シングルユーザモードで動作させました。

folon3(myrinet)上での結果

1000行×1000行

1台

1.268378e+01 seconds.
1.268593e+01 seconds.
1.268844e+01 seconds.
1.268420e+01 seconds.
1.268477e+01 seconds.
平均値:1.268542e+01 seconds.

2台

6.517135e+00 seconds.
6.514593e+00 seconds.
6.514849e+00 seconds.
6.514231e+00 seconds.
6.515173e+00 seconds.
平均値:6.515196e+00 seconds.

4台

3.510714e+00 seconds.
3.512420e+00 seconds.
3.512484e+00 seconds.
3.510546e+00 seconds.
3.510133e+00 seconds.
平均値:3.511259e+00 seconds.

8台

手元の時計にて、2分経過の後も終了しないので強制終了。

2000行×2000行

1台

手元の時計にて、2分経過の後も終了しないので強制終了。

2台

手元の時計にて、2分経過の後も終了しないので強制終了。

4台

手元の時計にて、2分経過の後も終了しないので強制終了。

8台

手元の時計にて、2分経過の後も終了しないので強制終了。 デバッグメッセージを見ると、計算自体はしているようだが 結果の返送に失敗しているようだ…。

3000行×3000行

1台

手元の時計にて、2分経過の後も終了しないので強制終了。

2台

手元の時計にて、2分経過の後も終了しないので強制終了。

4台

手元の時計にて、2分経過の後も終了しないので強制終了。

8台

5.266563e+01 seconds.
5.269288e+01 seconds.
5.267498e+01 seconds.
5.269485e+01 seconds.
5.266762e+01 seconds.
平均値:5.267919e+01 seconds.