Message Passing Inte ..
[2ch|▼Menu]
224:デフォルトの名無しさん
07/12/12 06:13:16
MPIの並列計算で困っています。アドバイスお願いいたします。

・4CPU/共有メモリの計算機でMPIによる並列計算を行っています。
しかし
・この計算機の場合、計算実時間が1CPUで計算している場合よりも
大幅に増えてしまいます。
(大学の大型計算機等で計算した場合、計算実時間は4CPUの場合、
1CPUの1/3.4ぐらいに短縮されますのでプログラム的には問題ないと考えています。)
・top コマンドで計算状況を監視していると、使用CPUが変動し、しばしば
同じCPUを2つのスレッドで競合しているようです。
・使用CPUの数をいろいろと変えてみましたが必ず競合してしまうようです。
・従って時間計測コマンドでCPU時間を測定すると、
下記のようにCPU時間は短縮されているが、実時間は増えてしまうという結果になるようです。
real time 1000.0
user time 250.0
・計算機を納品した会社(H○C systems)に質問したところ、
設定は問題はない。プログラムの問題、あるいは通信時間がかかってしまうので
実時間が増える、といういい加減な返答しかきません。

似たような症状を経験したことのある方、対処法をご存知でしたら
教えてもらえないでしょうか。

225:デフォルトの名無しさん
07/12/13 07:08:53
sched_setaffinity(2) を使うと幸せになれるかも。

226:デフォルトの名無しさん
07/12/27 14:48:26
>>224
MPICHならconfigure時に --mem=shared を付けて構築すべし
通信が共有メモリを介したものになる(異ノード間は当然sshやrsh経由)。
実行時に ps -x してsshやrshでプロセスが起動してたら、わざわざ同一計算機内でTCP/IP通信しちゃってるので損。
OSやコンパイラに付属のMPICHはsharedで構築されていない例が多いので自分で構築してみよう。


227:デフォルトの名無しさん
07/12/27 14:59:25
4CPU/共有メモリって、いわゆる普通のマルチプロセッサのことだよね
今時シングルコアはないから、2コアの2CPUなんだろう

228:デフォルトの名無しさん
07/12/28 20:38:39
みなさまご助言ありがとうございます。
>>225
検索すると状況としてはこれが当てはまる感じなのですが、
私には使い方がよく分かりません。
詳しいサイト等ありましたら教えてもらえないでしょうか。

>>226
確かにps x コマンドで確認すると(ノード内の場合でも)
rsh が動いていました。
このコンピュータはMPIのインストール及び設定済みのものを
購入したのですが、業者がいいかげんということなのでしょうか?
複数ノード構成なのですが、この場合はどうなのでしょうか
業者の説明では例えば、machinefile に
node00:2 とすればSMPとなるとのことでした。
node00 node00 とすれば通信が発生するとのことでした。

>>227
シングルコアのItanium2:4CPUx4ノードの構成です。
(年度でわけて増設して購入したのでちょっと古いCPUになっています)
納品されたのは1年以上前なのですが、不具合ばかりです。

229:225
07/12/29 00:39:48
こんな感じ。

#include <mpi.h>
#include <sched.h>
#include <stdio.h>

int
main(int argc, char *argv[])
{
  int rank;
  cpu_set_t mask;
  double t;

  MPI_Init(&argc, &argv);
  MPI_Comm_rank(MPI_COMM_WORLD, &rank);
  __CPU_ZERO(&mask);
  __CPU_SET(rank, &mask);
  if (sched_setaffinity(0, sizeof(mask), &mask) == -1) {
    perror("Failed to set CPU affinity");
    goto error;
  }
  t = MPI_Wtime();
  while (MPI_Wtime() - t < 10 + rank * 5)
    ;
  MPI_Finalize();
  return 0;

 error:
  MPI_Finalize();
  return -1;
}

230:225
07/12/29 00:46:50
>>229のプログラムは各プロセスが (10 + rank * 5) 秒後に終了する。
sar コマンドを使って、例えば

> sar -P ALL 1 1000

とやると各プロセスがランクと同じ番号の CPU で走り続けてランク順に終了していく様子が観察できる。

参考にしたページ:URLリンク(d.hatena.ne.jp)

231:デフォルトの名無しさん
08/01/08 18:31:33
>>226
の書き込み見て、--with-comm=shared というオプションをつけてMPICHを
コンパイルしてみたんだけど、逆に遅くなりました。共有メモリのほうが早く
なると思うんですけど、どうしてだろう?
CPUは Core 2 Quad 2.4GHz を使っています。

232:デフォルトの名無しさん
08/01/09 01:43:00
GridMPIについて、質問です。

GridMPIのMPI関数は、通信先によって、リモートノードなら、IMPI、
自ノードなら自ノード内のMPI(ベンダMPIなど)を呼び出して通信
するはずですが、GridMPIが提供しているMPI関数と(自ノードの)
ベンダMPIの関数のシンボルが重複しないのはなぜでしょう?

(最初は、GridMPIから発行するベンダMPIの関数は、MPI関数では
なく、PMPI関数と思っていましたが、これは違いますよね・・・)


233:デフォルトの名無しさん
08/01/10 00:07:05
MPICH1.2.5について質問です。
MPICHのブロードキャストはTCPを用いて行われているようなのですが、
UDPによるブロードキャストを使用することはできるのでしょうか?
ご存知の方がいらっしゃれば、よろしくお願いします。

234:デフォルトの名無しさん
08/01/11 10:27:42
普段はPVMでプログラミングをしているのですが、MPIでは

1.スレーブ(MPIでもこういう表現するんですかね)のマシンに
 計算領域を割り当てて計算させる

2.マスタに計算結果を返す

1と2を繰り返す

という流れはどういう風にソース上で実現させているのでしょうか。


235:デフォルトの名無しさん
08/01/11 20:48:46
>>234
スレーブとか言いません。
全く同じプログラムが複数走ります。
主従はなく、皆平等です。

MPI_Comm_rank関数を呼び出すと自分のノード番号がわかるので、
その番号に応じた振舞いをするようにプログラムを書きます。
たとえば、0から100までの足し算を2台の計算機でするときに、
ノード番号0なら0から49まで、ノード番号1なら50から100まで計算するようにしておきます。
通信は送信したいノード番号に向けて送信し、受信したいノード番号を指定して受信します。


236:デフォルトの名無しさん
08/01/12 20:56:17
WindowsCCSでHPLのベンチ取りたいんだけど参考になるwebとかありませんか?

237:デフォルトの名無しさん
08/01/13 11:21:47
>>235
そうやるんですか

PVMで同じようにする方法がさっぱりわからんもんで
参考になるかな、とは考えたのですが・・・

238:デフォルトの名無しさん
08/01/16 23:13:34
PVMってまだ使われてるのか?

239:デフォルトの名無しさん
08/02/07 17:31:34
おーい、このスレ生きてますか?

質問です。

class base {
...
};

class derived1: base{
...
};

class derived2: base{
...
};

があって、
vector<base*> v;
にノード0で
v.push_back(new derived1());
v.push_back(new derived2());
...
などとして配列を作ります。
で、作った物を他のノードに配信したいのですが、どうやれば良いでしょうか?
newで生成したderived1などのオブジェクトも一緒に配信したいわけで、単純にvのバイト列を送れば良いというわけには行かないわけで。
実際にはderived1等にもnewしたオブジェクトのポインタが存在して、それも他のノードで再現したいわけで...

240:デフォルトの名無しさん
08/02/07 18:19:40
死んでます

241:239
08/02/07 20:05:46
死んでるのかよ!

って、まあ置いといて、STLのstringなんかもオブジェクトのバイナリ丸コピじゃだめなんだよな。
ヒープからバッファ取ってるから。
となると、シリアライズして送信、受信側で再構築なんだろうけど、正直面倒臭いな。


242:デフォルトの名無しさん
08/03/01 05:39:37
MPI_File_xxでテキストファイルは扱えないのでしょうか?

243:デフォルトの名無しさん
08/03/06 23:33:27
学科の演習用端末更新終わった〜

Linux / Cele 420 / MEM 2GB / 26台 /hdd less

という構成なんだが、手軽に遊ばせるMPIのサンプルないかな?

ちなみに、午後6時に強制shutdownの設定になってるので、
長くても8時間程度のジョブの奴を頼む。

244:デフォルトの名無しさん
08/03/18 08:12:50
MPIプログラムによってネットワークがどのくらい使用されているかは、どのようにしてわかりますか?
環境はFedora8+Intel C++ 10です。

245:デフォルトの名無しさん
08/03/29 13:32:00
Windows用のものはありませんか?

246:デフォルトの名無しさん
08/04/05 15:00:58
MPICHにWindows版があるyp!

247:デフォルトの名無しさん
08/04/17 17:12:34
プログラムをコンパイルし実行するとsignal 6というエラーが出るのですが、これはどのようなエラーなのでしょうか?

248:デフォルトの名無しさん
08/04/17 18:43:41
どっかでabort()してるんじゃないの

249:デフォルトの名無しさん
08/04/18 21:06:07
MPIにおけるシグナルの使い方は実装依存なのじゃ。
同じエラーが出るミニプログラムを作ってうp汁

250:デフォルトの名無しさん
08/04/22 00:04:00
NPACI Rocksつこうてる人おる?
どこのスレいけばいいか解らんくて
迷子してる

251:デフォルトの名無しさん
08/05/21 23:38:11
計算の進行状況をファイルに書いてたのだが、
ファイルがバッファリングされる関係で
リアルタイムで更新されないので、fflushを
つっこんだら、計算時間が倍になったぞ。

こういうのは難しいなぁ。


252:デフォルトの名無しさん
08/05/22 06:37:45
>>251
NFSとかSambaでリモートのファイルシステムに書いてない?
ローカルの /tmp あたりに書くようにすると速くなるかも。

253:デフォルトの名無しさん
08/05/22 09:17:59
というか、頻繁に確認しない限りそんな遅くならないんじゃないの?

254:251
08/05/23 00:45:22
>>252
リモートファイルシステムです。
多分それで速くなると思いますが/tmpとか勝手に
使ったら怒られそう。大学共同利用のシステムなんで。

>>253
かなり頻繁に更新してますた。数秒に1回ぐらい。

進行状況を書いてただけなので、flush頻度を1/100
にしたら速度がだいたい元に戻りました。

255:デフォルトの名無しさん
08/05/23 01:30:25
>>254
普通の大学の計算機センターならローカルディスクぐらい用意してるよ。
聞いてみな

256:251
08/05/24 18:29:49
計算の進行状況をlogに書くってのも一歩間違うと大変な事になるな。

計算で64bit Intetgerを使って、桁あふれ(2^64)が起きたら
「SKIPしますた」とlogファイルに書いて次ぎのデータ処理に入る
ようにしてたんだ。

今まで深さ4の処理をしてたんだが桁あふれが起きてなかった。

次に深さ5の処理に入ったんだ。とたんに桁あふれが増えて
「SKIPしますた。」でdisk使用制限が超えそうになっちまった。

テラヤバスで、20時間実行したjobを強制停止…

>>255
いや、他大学システムなんで、あまりくだらない質問したく
なくて。利用料金も私が出したんじゃなくて、教授のだし。

257:デフォルトの名無しさん
08/05/26 19:24:36
MPICHのMPI_Finalizeって常時ポーリングしてんのかな?
処理が終ってFinalize待ちのプロセッサの負荷が100%になってやがる。
割り込み使ってくだちゃい。

258:デフォルトの名無しさん
08/05/27 21:52:46
負荷100%といえば、

rank=0のタスクをjobのマネージメントだけにつかって
rank=1以降を計算に使うプログラムを書いた。

rank=0とrank=1以降でも大してCPU使用率がかわらん
かった。rank=0のタスクはMPI_RECVで待機してただけ
なんだがな。

259:デフォルトの名無しさん
08/06/20 22:58:08
MPIで複数のCPUを使って計算させたときに、計算の速さ(結果)を秒数などで表示する
何か良いプログラムは無いでしょうか?

姫野ベンチやHPLだと、結果がFLOPSでしかでないので分かりにくいと言われ
体感的(秒数なもの)にわかるものにしてほしいと(´・ω・`)

思いつく簡単なベンチマークを例であげると、例えばスーパーπの104万桁を2つのCPUで
計算した場合は○○秒かかったけど、4つだと○秒だったよ!という感じです。(ベンチマーク
じゃなくてもいいです。)

よろしくお願いします。

260:デフォルトの名無しさん
08/06/20 23:17:57
>>259
自分で秒数に戻せばいい。そもそも計算速度(flop/sec)というのは

 計算速度=計算量÷計算時間

として求めている。
計算量(浮動小数点演算の回数)はプログラムによって決まる。
ベンチマークプログラムなら解説文書に計算量が書いてあるはず。
計算量と計算速度が分かれば当然ながら

 計算時間=計算量÷計算速度

で秒数が分かる。

261:デフォルトの名無しさん
08/06/21 01:48:01
>>260

アドバイスありがとうございます!
なるほど!
そういう風に求めるのですね。

助かりましたm(__)m

262:デフォルトの名無しさん
08/06/21 10:55:46
time mpirun -np 3 aho &
でいいじゃん。
各ノードごとの時間を知りたければ
mpirun -np 3 time aho &
でできるぜ

263:259
08/06/26 17:15:29
>>262

timeを使えば計算時間分かりますね!
アドバイスありがとうございますm(__)m

すいません。色々アドバイスを頂いたのですが何かオープンキャンパスで
高校生の方たちにクラスタを使ってもらうらしく姫野ベンチとかだと流体
の計算なので何を計算しているのかイメージが付きにくいんじゃないか?
と、言われまして何かイメージが付きやすいプログラムというのは無い
でしょうかね・・・?

すいません、変な質問をして(汗

264:デフォルトの名無しさん
08/06/26 22:30:47
>>263
計算結果を可視化するところまでやるとか。
でも見た目が楽しい計算結果でないと訴求力がないだろうねえ。

あるいは利用ノード数(並列度)を変えて実行時間の変化をグラフにして
並列度の高いクラスタのありがたみ(速度向上)を訴えるとか。

265:デフォルトの名無しさん
08/06/27 01:51:51
>>263
迷路。

ノードごとに探索経路を色分けすればぐー

266:259
08/06/27 11:53:25
>>264

>計算結果を可視化するところまでやるとか。
>でも見た目が楽しい計算結果でないと訴求力がないだろうねえ。

そうなんですよね〜
分子力学のプログラムで計算結果を可視化できるものがあったんですが
リンク切れとソースの名前をググっても出てこなかったので諦めました・・・。

>あるいは利用ノード数(並列度)を変えて実行時間の変化をグラフにして
>並列度の高いクラスタのありがたみ(速度向上)を訴えるとか。

なるほど。理想値と実際に計算にかかった時間をグラフに書いてもらえば
オーバーヘッドの事や何倍速く計算できたかと言う事が分かりやすいですね!
アドバイスありがとうございますm(__)m

>>265

>迷路。

すいません。
迷路というのは迷路を解くと言う事でしょうか?

267:デフォルトの名無しさん
08/08/22 20:08:51
すいません MPI初心者です。
windowsでMPIを実行しようとしているんですけどエラーがでて困っています。
インクルドのパスは切っています。
error C2653: 'MPI' : 識別子がクラス名でも名前空間名でもありません。
error C3861: 'Init': 識別子が見つかりませんでした
というエラーがでます。
なんで何でしょう。いきなり初期設定でつまずいて恥ずかしいのですが
だれかアドバイスしていただけないでしょうか。

268:デフォルトの名無しさん
08/08/23 08:45:51
>>267
それで他人になにか状況が伝わるとでも?

269:デフォルトの名無しさん
08/08/23 18:49:31
C:Program Files\MPICH2\lib
C:Program Files\MPICH2\include
を追加する。
最低これでエラーはなくなるはずのに認識できない。
メッセージは同様。
error C2653: 'MPI' : 識別子がクラス名でも名前空間名でもありません。
error C3861: 'Init': 識別子が見つかりませんでした
絶対windowsで同様なエラーが出ている人がいるはず。
MPICH2はwindowsでは無理なのか?


270:デフォルトの名無しさん
08/08/23 21:20:54
>>269
それで他人になにか状況が伝わるとでも?


ソースくらい出せ。
コンパイルオプションくらい出せ

271:デフォルトの名無しさん
08/08/23 21:22:39
windowsでMPICH2は「余裕で」動いてる。

272:デフォルトの名無しさん
08/08/24 14:46:18
わかりました。
ウィザードで作った雛形をつかってコピしていたからみたいです。
空のディレクトリをしてしてファイル追加してみるとできました。
ご声援ありがとうございました。何の役にもたたなかったけど(w

273:デフォルトの名無しさん
08/08/24 20:32:38
>>272
何の役にも立たないのは、お前がなんら情報を出さないからだろ。
自分の低能を棚上げしてイヤミで〆か。
新打法がいいね。

274:デフォルトの名無しさん
08/08/25 17:29:10
>>273
野球していたが打てなかったので1本足打法に変えました。
するとよく打てるようになりました。
そして解説者に言われました。
新打法がいいね。

275:デフォルトの名無しさん
08/08/25 23:55:04
自分の考えを人間にすら伝えられないバカは
自分の考えをコンピュータに伝えられるわけがない。
プログラムなんてやめた方がいいよ。

276:デフォルトの名無しさん
08/09/16 08:21:40
OpenMPIってVistaじゃ使えないの?

277:デフォルトの名無しさん
08/09/17 03:03:50
なんか荒れてる…w
MPICH2いれてBoostのMPI使おうかと思ったが
うまくいかね

using mpi ; をusr-config.jamに書いたが
パスが通ってないと言われる…

いい解説サイト知っていたら教えてくださいませ

278:デフォルトの名無しさん
08/11/01 04:35:50
MPI対応のFFTで、2次元の場合はタイル状に、3次元の場合はブロック状に、
データ分割可能なもの知りませんか?

fftwやFFTEのMPI版は短冊形(z方向分割)にしか対応していません。

279:デフォルトの名無しさん
08/12/01 12:33:58
ちょっと質問なんですが
MPI_Sendrecvってペアじゃないと使えないですかね?

片方がMPI_Sendrecv

もう一方がMPI_SendだけとかMPI_Recvだけとか。

わかる方いたらご教授願いたいのですが。


280:デフォルトの名無しさん
08/12/04 16:33:04
シングルノードWinXP-Proの環境で、MPICH2に付属ので例題cpi.exeを実行してみたら動きませんでした。
エラーメッセージは特になく、タスクマネージャで確認するとCPUコア数分のcpi.exeが実行中であるのが
確認できるのでが、強制終了する以外コントロールできない状況です。MPICH1ではうまくゆくのですが。
どなたかご教示のほうよろしくお願いします。




最新レス表示
スレッドの検索
類似スレ一覧
話題のニュース
おまかせリスト
▼オプションを表示
暇つぶし2ch

5207日前に更新/78 KB
担当:undef