トップページ⇒tech
500コメント204KB

Message Passing Interface (MPI) 統合スレ

■ このスレッドは過去ログ倉庫に格納されています
0001デフォルトの名無しさんNGNG
MPIによる並列プログラミングについて話し合う統合スレッドです。

とりあえず本家
http://www-unix.mcs.anl.gov/mpi/

0478デフォルトの名無しさん2010/11/12(金) 14:02:34
>>477
すみません質問がいい加減すぎました。

ノード1がCygwinでgcc_4.3.4を使っていて、
ノード2がUbuntuでgcc_4.4.4を使っています。
CPUはともにx86系です。

このようなときに、
MPIはコンパイラが異なることを気にせずにプログラムを動作させることができるかどうか知りたいです。
よろしくお願いします。
0479デフォルトの名無しさん2010/11/12(金) 15:38:08
mpirun mpiexec の気分次第w
まあ、動くかと。
gcc と intel は割と相性イイから
インテルも混ぜてあげよう
0480デフォルトの名無しさん2010/11/15(月) 18:12:22
MPICHを使っています。各プロセスに環境変数(具体的には$HOME)を渡したい
のですが、どうすればよいでしょうか。

Windows版の場合には、mpiexec(のみ)が提供されていて、
mpiexec -env HOME <somewhere> -np ...
とすればできますが、

Linux版では、mpirunが提供されているが、mpirunには環境変数を指定する
オプションがないので、できなくて困っています。なお、インストールには
YaSTを使い、
mpich-1.2.7p1-214.3.i586
mpich-devel-1.2.7p1-214.3.i586
を入れました。
0481デフォルトの名無しさん2011/01/13(木) 13:07:41
>>480
bashrcに書けばいいんじゃない?
0482デフォルトの名無しさん2011/01/26(水) 19:07:42
行列行列積のやり方が全くわかりません

A×B=Cで各プロセスがAとBのブロック行(ブロック行の行数は行列全体の行数/プロセス数)を保持している。
Bをプロセス間で循環させ、計算結果のCを更新していくことでA×Bを計算せよ。
行列は正方行列で1024×1024とし、プロセス数は行数の約数とする。値は乱数で決める。

誰がやり方教えて下さい。プログラムの流れとかでも良いです。お願いします。
0483デフォルトの名無しさん2011/02/09(水) 18:08:03
A B
000 333
111 444
222 555

rank0 rank1 rank2
step1
000 333 --- --- --- ---
--- --- 111 444 --- ---
--- --- --- --- 222 555

step2
000 --- --- --- --- 333
--- 444 111 --- --- ---
--- --- --- 555 222 ---

step3
000 --- --- 333 --- ---
--- --- 111 --- --- 444
--- 555 --- --- 222 ---
0484デフォルトの名無しさん2011/05/21(土) 13:51:12.10
mpich2-1.3.2、4nodesでプログラムを並列実行しようとすると

Fatal error in PMPI_Barrier: Other MPI error, error stack:
PMPI_Barrier(476)..................: MPI_Barrier(MPI_COMM_WORLD) failed
MPIR_Barrier(82)...................:
MPIC_Sendrecv(161).................:
MPIC_Wait(405).....................:
MPIDI_CH3I_Progress(150)...........:
MPID_nem_mpich2_blocking_recv(1074):
MPID_nem_tcp_connpoll(1663)........: Communication error

とエラーが出てしまい実行出来ません。検索しても有効な解決策が見つかりませんでした。
どなたか解決策を教えていただけないでしょうか?
0485デフォルトの名無しさん2011/05/31(火) 04:09:40.08
Intel mpi(impi)使ってる人います?
自分でコンパイルしたのより速い?
0486デフォルトの名無しさん2011/05/31(火) 23:53:44.81
そりゃ人間がコンパイルするより速いだろ
0487デフォルトの名無しさん2011/06/01(水) 02:31:39.53
機械語直打ちw
やだな・・・罰ゲームだ
0488デフォルトの名無しさん2011/06/07(火) 02:57:07.11
>>486,487
そんなくだらない煽りが来るとは思わなかった.
mpichってconfigure makeしません?
数値計算メインで使ってるなら,
効率考えて,コンパイラ変えたりするでしょ.

mpi関係ないコンパイラの速度って,
icc>1.1倍>gcc4>>1.8倍>>gcc3
ぐらいのイメージなんで,(Linux x86_64)
ifortやiccでmpichコンパイルしたのとどっちが早いかな
と思ったんですが.

impiだと,
mpicc -cc=icc
て出来ることがわかったので,自己解決しました.
0489デフォルトの名無しさん2011/06/07(火) 03:03:11.95
>>481
環境変数はbash_profileのほうがふつうじゃない?

>>484
mpd立てた?
listenportの設定は適切?
付属のサンプルプログラムは流れた?
0490デフォルトの名無しさん2011/06/08(水) 00:50:57.29
>>488
「自分でコンパイル」に該当する環境をきちんと定義しないからさ。
コンパイラは?gcc?icc?それ以外?
mpiライブラリは?計算内容は?

まぁどれにしてもmpiコンパイラって基本的に適当なライブラリをくっつけて
ビルドするスクリプトだから、実際やってる内容を出力するオプションあるし
それで1つ1つ確認すればいいんじゃない?
0491デフォルトの名無しさん2011/06/08(水) 01:47:18.76
>>490
回答ありがとう.たしかにあやふやな質問だったと思う.
偏見かもしれんが,まともなwindowsクラスタってあるの?
数値計算を32bitで行うのは論外でしょ.
でIntel Compilerを入れる時点で,アーキテクチャほぼ決まると思いますが.

impiのデフォルトコンパイラはgcc&gfortranです.
mpiライブラリの意味がわからん.
impiの前はmpichを使ってた.(これで回答になっている?)
計算内容は有限差分とモンテカルロ.

続く
0492デフォルトの名無しさん2011/06/08(水) 01:48:27.26
>>490
続き

適当なライブラリが-lmpi -lpthread -lmとかを言っているなら,
libmpiをコンパイルする必要があると思いますが.
このライブラリをIntelがチューニングしてくれたら,
自分でコンパイルするより早いでしょうし.
デフォルトのgccとかでやられてたら,
自分でコンパイルしたほうが速そうじゃない?

実際やってる内容ってのは,mpiccやmpifcのスクリプトの中身のこと?
それとも別の何かを指しているの?
0493デフォルトの名無しさん2011/08/28(日) 05:28:03.47
ブロードキャストってネットワークの送受信量を減らすことができるのですか?
それとも単に便利なだけというだけなのでしょうか?
0494デフォルトの名無しさん2011/09/01(木) 19:37:51.69
MPIってテキストからデータ読み込んだ時に、
MPI_SendやMPI_Recvを使って送受信可能にするためには変換が必要だったりしますか?

double型のデータなんですが。
0495デフォルトの名無しさん2011/09/02(金) 11:09:03.84
MPIでどうしても通らなくて困ってます。
エラーが
One of the process started by mpirun has exited with a nonzero exit code.
this typically indicates that the process finished in error.if your process
did not finish in error,besure to include a "return 0"or"exit(0)"in your
C code before exiting the application.

PID ***** failed on node n2 due to signal 11と出て通りません。

ソースはアップロダにあげるのでよければご教授お願いします。
ttp://uproda.2ch-library.com/423445uMY/lib423445.c
0496デフォルトの名無しさん2011/09/03(土) 10:38:26.00
One of the process started by mpirun has exited with a nonzero exit code.
とあるので全うな終了をしてないプロセスがあるんでしょう。
return 0以外で終了するっぽいコードは inputn() です。何故か EOF に達すると exit(1) しているので
inputq() のように break にすれば直る・・・・・・とは思いませんが。

とりあえず他の点でも突っ込み。
・座標入力でy,zがEOFになってもbreakで抜けて処理しているけどいいの?というかそういう表示を出さないとバグがわからないと思う。
・mainのループ関係がおかしい。わかりやすいところではifとelseが対応してない。
・getdouble() は1行から1つの数値しか読み込まないっぽいので 3次元座標的には読みにくい入力データが必要。
04974952011/09/04(日) 09:45:19.22
>>496さんの言った通り直しても通りませんでした…。
正直自分の知識じゃ限界を感じているので
代わりにやってくれる方がいれば報酬払ってもいいです。
最大2万円までしか出せませんが…。メール待ってます。
0498デフォルトの名無しさん2011/11/15(火) 11:36:05.43
openmpi使ってるんだがnohupが効かねぇ・・・
端末PC落とすと計算やめちゃうんだが
0499デフォルトの名無しさん2011/11/19(土) 16:31:12.60
へえ
0500デフォルトの名無しさん2011/11/24(木) 19:56:37.29
MPIの勉強始めようと思うんだけどMPI3ってのはまだ出てないの?
■ このスレッドは過去ログ倉庫に格納されています