Message Passing Inte ..
[2ch|▼Menu]
178:デフォルトの名無しさん
07/06/09 16:58:36
このスレではPCクラスタのシステム障害(とくにハード)について経験ある方も
少なくないと思うので、お尋ねします。

1年前に構築した16ノードクラスタ(ディスクはNFS共有、ギザイーサ)が、
最近頻繁にp4_errorを起こすようになりました。
とりあえず疑わしいところからパーツを取り替えまくったのですが、全く改善しません。
特定ノードというより全体的にパラパラと障害が発生してるので、もしやネットワークかな
と思ったのですが、ネットワークに問題があるなら、rloginやsshのセッションやNFS
の読み書きにも障害が出ると思うのですが、特に問題は出ていないようです。
MPIで並列したときに限って発生します。
これからネットワークの交換を検討していますが、何かアドバイス頂けいたら幸いです。

ちなみに1年間はほぼ問題なく使えており、他の計算機でも実績があるので
プログラム側の問題ではないです。

179:デフォルトの名無しさん
07/06/22 11:04:41
MPI_Finalizeを行わずに終了した場合、どのような問題が起きる可能性がありますか?

180:デフォルトの名無しさん
07/06/23 23:33:50
MPI_Finalize のソース読んだらいいんじゃね??


181:デフォルトの名無しさん
07/06/24 14:51:42
>>178
今頃気付いたが、ギザイーサワロス
巨大王墓間を高速インターコネクトで結んで世界の七不思議にでも入れたいノケ?

182:デフォルトの名無しさん
07/06/24 15:17:25
デッドロックを発生させない定石のようなものはありますか?

183:デフォルトの名無しさん
07/06/26 08:00:52
>>181
中川しょ(ry

184:デフォルトの名無しさん
07/06/27 15:30:14
>>181
日本語でおk

185:デフォルトの名無しさん
07/06/27 23:51:22
巨大王墓=ピラミッド

186:デフォルトの名無しさん
07/06/28 02:15:45
わかんねーよハゲwww

187:デフォルトの名無しさん
07/06/28 22:45:57
世界の七不思議=ギザのピラミッド他

188:・∀・)っ-○◎●
07/06/29 02:42:04
ギザかわゆすwwwwwww

189:デフォルトの名無しさん
07/07/02 16:57:33
現在boostのuBlasを使って逆行列を解いています。
MPIを使ってさらに大規模な行列を計算させたいのですが、お薦めのライブラリを教えてください

190:デフォルトの名無しさん
07/08/12 20:42:39
どなたかPS3でmpich2やってるひといません?

fedora5でひととおりmpich2をインストール、設定後に実行するとこんなんで
て困ってます。

# mpirun -n 1 date
mpiexec_ps3slave1 (send_dict_msg 632):send_dict_msg: sock= errmsg=:(32, 'Broken pipe'):
mpdtb:
/usr/local/bin/mpdlib.py, 632, send_dict_msg
/usr/local/bin/mpirun, 250, mpiexec
/usr/local/bin/mpirun, 1399, ?

mpiexec_ps3slave1: mpd_uncaught_except_tb handling:
exceptions.KeyError: 'cmd'
/usr/local/bin/mpirun 255 mpiexec
elif msg['cmd'] != 'response_get_mpdrun_values':
/usr/local/bin/mpirun 1399 ?
mpiexec()

どなたか御力をおかしください。

191:190
07/09/03 22:06:14
自己解決しました。Fedoroa 6を入れなおして、mpich2を入れなおしたら
いけました。

他にps3でクラスタやってる人の例をネットなどでみていると、結構Fedora 5で
やってる人がいるから、OSの違いでうまくいったというよりも、初回のmpiの
インストール時の設定に問題があったのかもしれません。以上。

192:デフォルトの名無しさん
07/09/10 01:30:38
MPIでJUnitみないなテストできんの?
知ってるひといたら教えてくれい

193:デフォルトの名無しさん
07/09/12 04:50:40
>>192
こんなのあった
自分は使ったことないが

URLリンク(sourceforge.jp)

194:デフォルトの名無しさん
07/09/23 03:05:43
>>193
つかってみたぞ
いがいとべんりだった


195:デフォルトの名無しさん
07/09/24 00:57:56
誰かまともなチュートリアル書いてくれよ

196:デフォルトの名無しさん
07/09/26 16:47:33
>>195
チュートリアル書きたいが
どんな機能があるのがよくわからん

197:デフォルトの名無しさん
07/09/27 00:30:55
>>195
虎の巻じゃだめかね

198:デフォルトの名無しさん
07/09/27 01:59:38
>>197
虎の巻をたのむ


199:デフォルトの名無しさん
07/09/27 09:50:27
>>198
URLリンク(accc.riken.jp)

200:デフォルトの名無しさん
07/09/27 15:07:25
>>199
すまねえ
193の虎の巻がほしかったんだ


201:デフォルトの名無しさん
07/09/30 00:21:40
>>200
パッケージの中にあるじゃん


202:デフォルトの名無しさん
07/09/30 12:28:39
>>201
あるけどわかりにくくない?


203:デフォルトの名無しさん
07/09/30 21:15:53
>>200

URLリンク(sourceforge.jp)

204:デフォルトの名無しさん
07/09/30 21:37:27
もっぺん書くけどさ、

ま と も な

チュートリアルが欲しいんだよ。


205:デフォルトの名無しさん
07/10/01 03:36:48
>>204
作者に直で言うしかないな


206:デフォルトの名無しさん
07/10/01 23:01:28
みんなここで勉強したのかえ?

207:デフォルトの名無しさん
07/10/04 21:05:22
203のチュートリアルを直そうと思うんだけどここにはっていいよね?
どうせLGPLだし

204氏はどんなチュートリアルが欲しいんだい?


208:デフォルトの名無しさん
07/10/05 12:19:32
boostにmpi入るからそれでいいじゃん

209:デフォルトの名無しさん
07/10/11 00:03:40
だれか>>193使った人いる?


210:デフォルトの名無しさん
07/10/17 09:58:07
>>209
使ってるよ
プログラミングの効率が上がった


211:デフォルトの名無しさん
07/10/20 20:55:50
作者は岩手大学の学生か?


212:デフォルトの名無しさん
07/10/26 21:09:07
AUTHORSにそう書いてあるね


213:デフォルトの名無しさん
07/11/02 21:07:27
CentOS5.0にrpmで入ってたOpenMPIを使ってます。

$ rpm -qa |grep mpi
openmpi-devel-1.1.1-5.el5
openmpi-libs-1.1.1-5.el5
openmpi-libs-1.1.1-5.el5
openmpi-1.1.1-5.el5
openmpi-devel-1.1.1-5.el5

手元にX86_64のPCが2台とi386のPCがあるのですが、

異種アーキテクチャのバイナリの自動選択はどうやってするのでしょうか?

全部i386で揃えろって意見もあるかもしれませんが、64bit整数演算をする
ので64bitで動かしたいんですよね。

mpichは出来るみたいですね。

URLリンク(enrico.phys.cmu.edu)

というかOpenMPIはman マニュアル無くて悲しい。

214:デフォルトの名無しさん
07/11/04 15:00:58
Debian 4.0 etch AMD64のマシンを2台用意してMPICHで環境を整えようとしています。
2台ともデュアルコアなので、

/etc/mpich/machines.LINUX   に
cluster1:2
cluster2:2

と記述しています。
テストを行おうと
mpirun -np 4 cpi
をしてみたのですが、1分以上待ってもプロンプトが帰ってきません。しかし
mpirun -np 3 cpi
とするとcluster1に2スレッド、cluster2に1スレッド割り当てられ計算結果がすぐ返ってきます?

4コア使い切るためにはどうしたら良いでしょうか?


215:213
07/11/07 00:40:14
色々試したが諦めた。次はPVMを試そうと思う。

216:デフォルトの名無しさん
07/11/07 11:28:47
SuSE Linux9.3
mpich-1.2.7p1
gcc, pgi 7.1
を使用していますが、emacsでmpiデバッグできませんかね。
gdbとpgdbgを使ってデバッグできますが、
pgdbgは使いにくいし、gdb単体も使いにくいので、できれば
emacsからgdbを起動したいなと。


217:デフォルトの名無しさん
07/11/07 13:26:16
PVMってまだ使われてるの?

218:213
07/11/07 14:06:12
>>217
しらんけど、CentOSに標準でパッケージが入ってたよ。


219:デフォルトの名無しさん
07/11/07 15:42:53
>>213
ローカルマシンに同じ名前のディレクトリを作る。
そこに機種毎のバイナリを置く。
これで桶。

220:デフォルトの名無しさん
07/11/07 15:44:35
>>219
補足。
機種毎のバイナリは同じ名前で作っておく。

mpirunはデフォでは同じ名前のユーザーの同じ名前のディレクトリにある
同じ名前のコマンドを実行するだけなので。

221:デフォルトの名無しさん
07/11/07 15:59:06
>>218
標準で入ってるんだ
昔はPVMが主流だったそうだけど、今はほとんどがMPIだよね

222:213
07/11/08 00:36:34
>>219
ありがとう。しかしPVMのマニュアルをせっかく読み始めたので
こっちで行ってみます。MPIは出鼻をくじかれたので気に入らない。

223:214
07/11/10 21:37:30
/etc/mpich/machines.LINUX   の
localhost:2
cluster2:2

となっていたのを

cluster1:2
cluster2:2

にしたらいけました。3スレッドはできるので machines.LINUXは悪くないと決め付けてました。



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ではうまくゆくのですが。
どなたかご教示のほうよろしくお願いします。



281:デフォルトの名無しさん
09/01/13 08:26:39
MPI初心者です。MPICH2をMacOSXにインストールしました。
とりあえず以下のコードを実行しました。
$ mpicc test.c
$ mpiexec -n 3 ./a.out

#include <stdio.h>
#include "mpi.h"
int main(int argc, char **argv){
int nprocs;
int mype;
int proc_name_len;
char proc_name[40];

MPI_Init(&argc, &argv);
MPI_Comm_size(MPI_COMM_WORLD, &nprocs);
MPI_Comm_rank(MPI_COMM_WORLD, &mype);
MPI_Get_processor_name(proc_name, &proc_name_len);
printf("My name is : %s\n", proc_name);
MPI_Finalize();
}
すると、結果は
My name is : tetsuya-sato-macbook.local
My name is : tetsuya-sato-macbook.local
My name is : tetsuya-sato-macbook.local
となりました。全処理が自分の端末で実行されてしまっているということでしょうか。環境設定がうまくいっていないのでしょうか。
一応、自分の端末からssh経由でログイン出来るLinux端末が10台あるので、自分の端末のホームディレクトリ配下に
mpd.hostsファイルを作成してそれら10台のマシンのホスト名を記述しました。次に、自分の端末で
$ cd ~/.ssh
$ ssh-keygen -t rsa
$ cp ida_rsa.pub authorized_keys2
としました。それから、このauthorized_keys2ファイルをsshでログイン出来るLinux端末10台の
~/.ssh/配下にSCPにてコピーしました。この先、何をやればよいでしょうか?

282:デフォルトの名無しさん
09/01/14 00:08:03
machinefile または hosts でいけるんじゃないか
mpiexec -machinefile mpd.hosts -n 3 a.out
URLリンク(www.mcs.anl.gov)

283:281
09/01/15 03:39:43
>>282
有り難うございます。出来ました。
別の質問なのですが、以下のコードを実行すると、結果は順不同で出力されます。
#include <stdio.h>
#include <stdlib.h>
#include "mpi.h"
int main(int argc, char **argv){
int nprocs;
int mype;
MPI_Init(&argc, &argv);
MPI_Comm_size(MPI_COMM_WORLD, &nprocs);
MPI_Comm_rank(MPI_COMM_WORLD, &mype);
printf("proc番号は : %d\n", mype);
MPI_Finalize();
}
<結果>
proc番号は : 0
proc番号は : 2
proc番号は : 1
これを必ず昇順の0、1、2のランクの順に出力したい場合はどう修正すればよいでしょうか?

284:デフォルトの名無しさん
09/01/15 10:36:11
>>283
別々のプロセスが勝手に出力を出しているのでそうなる。
ノード0 出力が終わったらノード1に何か情報を送る
ノード1 ノード0空の受信を待った後、画面に出力。その後ノード2に情報を送信
・・・
という感じにするか、あるいはノード0に角ノードが出力したい情報を送りつけて、出力は全部ノード0でやるか。


285:デフォルトの名無しさん
09/01/15 14:13:53
最初の頃に買った本紹介しとくよ
URLリンク(www.amazon.co.jp)
URLリンク(www.amazon.co.jp)

286:281
09/01/16 09:59:35
>>285
どっちか一冊買ってみます。
>>284
こんな感じにしたのですが、順番に出力されません。書き方、まずいでしょうか?
#include <stdio.h>
#include <stdlib.h>
#include "mpi.h"
int main(int argc, char **argv){
int nprocs;
int mype;
int dummy;
int i;
int tag=0;
MPI_Status status;
MPI_Init(&argc, &argv);
MPI_Comm_size(MPI_COMM_WORLD, &nprocs);
MPI_Comm_rank(MPI_COMM_WORLD, &mype);
for(i=0; i<nprocs-1; i++) {
if(mype==i) {
printf("My proc is : %d\n", mype);
MPI_Send(&mype, 1, MPI_INT, i+1, tag, MPI_COMM_WORLD);}
if(mype==i+1) {
MPI_Recv(&dummy, 1, MPI_INT, i, tag, MPI_COMM_WORLD, &status);}
}
if(mype==(nprocs-1)) {
printf("My proc is : %d\n", mype);}
MPI_Finalize();}
<実行>
mpirun -np 5 -machinefile mpd.hosts ./a.out

287:デフォルトの名無しさん
09/01/16 11:11:50
>>286
それ、最終ノードが受信してなくね?
printf後にfflushするといいかも

それとループするより素直に
ノード0
 表示
 送信
ノード 1...n-1
 受信
 表示
 送信
ノード n
 受信
 表示

でバラして書いた方が見やすいと思う。
同じコードをたくさん書きたくなければ、受信、送信のところを条件分けで囲ったものの間に共通の表示処理を入れるか。

288:デフォルトの名無しさん
09/01/30 11:49:31
One of the processes 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, be sure to include a "return
0" or "exit(0)" in your C code before exiting the application.

PID 13373 failed on node n0 (1**.1**.**.10) due to signal 9.

とエラーが出ます。

パック、アンパックを利用して、何度も送受信出来ているんですけど、
5000回程度繰り返したところでエラーがでます。

考えれる原因などありますか?

289:デフォルトの名無しさん
09/01/30 20:45:55
>>288
プログラムのどっかでreturn 0かexit(0)してんだろ

290:デフォルトの名無しさん
09/01/30 22:40:48
質問

コンパイルすると"libmpi_c.so.0"なり"libmpi_cxx.so.0"が
No such fileって言われるんだけどこれはどう解決すればいいですか?

291:デフォルトの名無しさん
09/01/30 23:51:35
MPIみたいな、少なくとも大学院クラスの人間が数値解析で使うもののスレにしては
エスパーを要請する質問が多いな。
そんな表現能力じゃ論文もかけないだろ。

292:デフォルトの名無しさん
09/02/02 21:48:56
>>289
return 0はmain関数の一番最後でしかやってません。

293:デフォルトの名無しさん
09/02/02 21:52:31
>>292
signal9だからSIGKILLだ。
自分で殺してないんだったら、誰かにプロセス殺されてるんじゃないのか。
時間貸しのスパコンとかだったら、一定時間来たらプロセス殺されるぞ。

294:デフォルトの名無しさん
09/02/03 13:14:23
どうせおまえさんんが書いたコードのバグだと思うけど
とりあえずソースさらしなよ
それで解決するかどうかは分からんけど、
少なくとも>>289みたいなアホは湧かなくなるよ

295:.
09/02/03 16:56:38
>>294
>>288から得られる情報は>>289くらいしかないだろう、実際。


296:デフォルトの名無しさん
09/02/04 21:26:54
>>290
エスパー回答だが、コンパイル時にmpiccを使ってないとか?


297:デフォルトの名無しさん
09/02/04 21:43:21
スパコンのバッチファイルって、QUEUEに投入後書き換えても
反映されるのかな? ちょいスクリプトのタイポして、書き換えたい
のだが… 64CPUなのにSIZEの所に8と書いてしまった…

今の時期、QUEUEに順番待ちが多くて、再投入すると多分一週間後
になるんだ。

---------
cd ${QSUB_WORKDIR}

SIZE=64
C=1
while [ ${C} -lt 10 ]; do
echo -n STEP${C}: ; date
mpiexec -n ${SIZE} ./a.out ${C}
let C=C+1
done
echo -n DONE: ; date
----------

298:294
09/02/05 10:25:41
みなさん、丁寧にありがとうございます。

2chにソースはあげたくないので、メール頂けると助かります。

299:デフォルトの名無しさん
09/02/05 13:19:21
>>298
いくら払うんだ?

300:デフォルトの名無しさん
09/02/05 22:34:17
>>298
どうせ卒論だろ。研究室の先輩に聞けよ。

301:デフォルトの名無しさん
09/02/22 17:59:18
マスタープロセスの処理内でMPI_Bcastしたいのですが、無理でしょうか?例えば以下のようなコードがあった場合(あまり意味がないコードですが)、
マスタが"TERMINATE"をタグにつけて送るまでの間、スレーブは無限ループでメッセージを受信し続ける。その間、一定の処理毎にマスターとスレーブの
プロセス間で同期を取らせたい。しかし、同期を取らせたい処理はマスタープロセスのif文内にあるので、実行しても効果はない。(つまり、(1)でBcastをやっても反映されない。勿論(2)は反映される)何かいい方法はありますか?
(コードは途中省略)
MPI_Datatype newtype;
MPI_Type_contiguous(sizeof(struct abc), MPI_BYTE, &newtype);
MPI_Type_commit(&newtype);
int k, j, r;
srand((unsigned)time(NULL));
r=rand()%10+1;
if(mype==0) {
for(j=0; j<100; j++) {
for(k=0; k<r; k++) {
MPI_Send(&kp[0], 1, newtype, 1, CONTINUE, MPI_COMM_WORLD);
}
//(1) MPI_Bcast(kp, 3, newtype, 0, MPI_COMM_WORLD);
}
MPI_Send(&kp[0], 1, newtype, 1, TERMINATE, MPI_COMM_WORLD);
} if(mype==1) {
do {
MPI_Probe(0, MPI_ANY_TAG, MPI_COMM_WORLD, &stat);
if(stat.MPI_TAG==CONTINUE) {
MPI_Recv(&kp[0], 1, newtype, 0, CONTINUE, MPI_COMM_WORLD, &stat);
}
} while(stat.MPI_TAG==CONTINUE);
}
//(2) MPI_Bcast(kp, 3, newtype, 0, MPI_COMM_WORLD);

302:デフォルトの名無しさん
09/03/11 02:46:50
URLリンク(arkouji.cocolog-nifty.com)

概ね、ここに書いてあるようにやりました。
(使いたいのはfortranなのでfortranの設定は別にやっときました)
ここの一番下のサンプルコードをビルドしようとすると以下のエラーが出ます。

warning C4627: '#include "mpi.h"': プリコンパイル済みヘッダーの使用を検索中にスキップされました 行;1
warning C4627: '#include <iostream>': プリコンパイル済みヘッダーの使用を検索中にスキップされました 行;2
fatal error C1010: プリコンパイル ヘッダーを検索中に不明な EOF が見つかりました。'#include "stdafx.h"' をソースに追加しましたか?  行:18

また、fortranのコードを自分で書いてビルドしようとすると、以下のようなエラーが出ます。

fatal error LNK1181: 入力ファイル 'mpilib.obj' を開けません。

どこが間違ってるんでしょうか?環境はvisual studio2008とvisual fortran11です。

303:302
09/03/11 02:59:26
アドレス間違えました。こっちです。
URLリンク(ums.futene.net)

304:デフォルトの名無しさん
09/03/12 02:12:20
> 使いたいのはfortran

> #include <iostream>

> int main(int argc,char **argv)

これのどこがFortran…

305:デフォルトの名無しさん
09/03/12 18:40:57
>>304
いや、すみません、上はCのサンプルコードをビルドしようとしたときのことです。
「また、fortranの…」以降が自分で書いたfortranのコードをビルドしようとしたときです。
分かりにくくて申し訳ないです。

306:デフォルトの名無しさん
09/03/12 19:24:10
>>302
プロジェクトのプロパティの
Configuration Properties → C/C++ → Precompiled Headers → Create/Use Precompiled Header
を Not Using Precompiled Headers にすればいいと思われ。
(VC++ で C のプログラムをコンパイルするときによくハマる罠です。)
これは英語版の VC++ 2008 の表記だけど日本語版にも該当する項目があるはず。


307:302
09/03/12 20:45:54
>>306
Cの方は出来ました!ありがとうございます。

308:デフォルトの名無しさん
09/03/12 21:26:09
正直、Linux入れてmpif77とかmpiccとかのラッピングされたコマンド使ったほうが楽だろ。
ライブラリが足りないとかそんな次元が自己解決できないようなら。
KNOPPIXに入ってたりするからとりあえずそれで試してみれば。

309:デフォルトの名無しさん
09/03/12 23:17:29
>>307
動いて良かったね。Fortran の方は俺は使ったことないので単なる予想だけど
mpi.lib の点(ピリオド)が抜けてて mpilib → mpilib.obj と解釈されてるのでは。
あと mpi.lib と一緒に fmpich2.lib も要るかも。

>>308
普段 Windows で暮らしていると実行してデバッグできる MPICH2 for Win32 は
とっても便利ですよー。多少苦労しても使う価値があると思います。Windows
マシンはありふれているので手近の PC をかき集めて“なんちゃってクラスタ”を
作るといったことも案外簡単にできます。


310:デフォルトの名無しさん
09/03/13 07:00:15
>>308
もともと、リモートにlinuxが入っててmpiが使える計算機はあるんですが、ちょっと楽して
開発したかったので。情けない話ですがCUIは苦手なんで出来る限り避けてます…
と言おうと思ったらKNOPPIXってGUIなんですね。そんなのもあったんですね。

>>309
全ておっしゃるとおりでした。お恥ずかしいです。
後から僕のようなレベルの人がここに来た場合のために経過を書いときます。

mpi.libに直したところ、未解決のシンボル云々というエラーが出てきたので、
fmpich2.libを追加したらビルドが成功しました。その後、実行しようとすると、
mpiexec.exeが見つかりません、と出ました。C:\Program Files\MPICH2\bin\への
パスは通っているので、プロジェクトのプロパティ→コマンド のところにはmpiexec.exe
とだけ書いておいたんですが、念のためC:\Program Files\MPICH2\bin\mpiexec.exeと
フルパスにするとちゃんと動きました。パスが通ってても上の指定じゃだめなんですね。

ちなみにデバッグ無しで実行すると問題なく出来るけど、デバッグ開始を選択すると
デバッグ情報が見つからないか、または一致しませんってエラーが出ました。
要するにブレークポイントとか関数ウオッチとかあのあたりが使えないってことですかね。
もはやmpiの質問でも無さそうなんで、も少し調べてみることにします。

ところで参考までにお聞きしたいんですが、309さんはどういう環境で使ってらっしゃるんでしょうか?

311:302
09/03/13 07:02:25
というかマニュアルに思い切りfortranの場合fmpich2.libを追加してね、と
書いてあったんですよね。まるっきり見落としてました。ほんとに申し訳ない。

312:デフォルトの名無しさん
09/03/13 10:23:00
>>310
309ですが使っている環境は何の変哲もないですよ。
Windows XP に MPICH2 と Visual Studio 2008 Express Edition を入れてます(あと MinGW も)。
用途は数値シミュレーションで、Windows PC で小さな問題サイズで実行できるところまで作って、
Linux クラスタに移して大きな問題サイズで実行、実験データを採るというパタンが多いです。
クラスタの計算ノードはマルチコアなので OpenMP も併用しています。

最近書いたコードは、逐次、OpenMP 並列、MPI 並列、OpenMP + MPI ハイブリッド並列の
4つのバージョンを同じソースから条件コンパイルで生成できるようにしました。
VS 2008 EE では OpenMP をサポートしているので、MPICH2 と組み合わせることで
複数の並列化の方法を実際に試して性能のいいものを選ぶという芸当が Windows 上でもできます。(^^)

ああ、そうだ、Windows 上で実行できることのメリットを1つ思い出しました。
上述のコードは逐次プログラムとしてコンパイルしたときにはデバッグ用の GUI を表示して
操作できるようにしました。同じことは Linux クラスタから X の窓を飛ばすことで実現できますが
クラスタの計算ノードに X ライブラリが入っていなかったり Windows 側に X サーバが必要だったりで
何かと面倒です。かかる手間が少ないという点で Windows で実行できることに意味があると思いました。


313:デフォルトの名無しさん
09/03/13 19:04:32
MPI2のMPI_Put/MPI_Getを使いたいので早速簡単なコードを書いたのですが、思うように
動作しません。日本語の文献が極端に少ないので英語のサイトを見ながらやっているのですが、
サンプルコードが難しいものが多く理解出来ていません。まずはシンプルに、プロセス1の変数aを単純にプロセス0
の変数aにコピーしたいだけなのですが、MPI_Send/MPI_Recvを使わずにMPI_Getを使うにはどのように書けばいいでしょうか?
下のコードのどこがおかしいのかご指摘下さい。
URLリンク(www.dotup.org)

314:313
09/03/14 05:12:50
他んとこに聞いてみます

315:302
09/03/14 18:05:44
>>312
ありがとうございます。
あー、その環境だと完全にタダで構築できるってことですよね。自宅のPCはそれでチャレンジしてみようかな…
OpenMP+MPIって性能出ます?先生に相談したら最初からMPIで書いた方がいいよ、と言われて鵜呑みに
してたんですけど。今まで基本的に学校で用意されてる環境をそのまま使うだけというぬるま湯に使ってきたんで
これからは多少そのへんも自分で勉強してみます。

316:デフォルトの名無しさん
09/03/14 19:15:30
>>314
312に書いたアプリの場合は、実環境で試したところ OpenMP+MPI は素の MPI よりわずかに
遅いかほとんど同じという結果でした。

もっとも、どちらの性能がいいかは問題、ハードウェア、ソフトウェアなどに依存しますし、
最終的にはやってみないと分かりませんので、可能性があると思ったら試す価値があります。

ハイブリッド並列化に興味があるのでしたら次の記事が参考になると思います。

T2Kオープンスパコン(東大)チューニング連載講座(その5)
OpenMPによる並列化のテクニック:Hybrid並列化に向けて
URLリンク(www.cc.u-tokyo.ac.jp)


317:デフォルトの名無しさん
09/03/14 19:17:51
レス番号をまちがえました。316は>>315宛てです。


318:デフォルトの名無しさん
09/03/21 22:47:30
VS 2008 のExpress EditionはOpen MP非対応じゃなかたか。

319:デフォルトの名無しさん
09/03/22 05:57:00
>>318
Windows SDK for Windows Server 2008 and .NET Framework 3.5 を一緒に入れると使えます。
参考:URLリンク(tech.ckme.co.jp)


320:デフォルトの名無しさん
09/04/02 20:54:42
初めまして、MPIを勉強中の者で、使用言語はGFORTRANを使っています。
メイン又はサブにMPI_INIT〜MPI_FINALIZE及び計算式を一括して含む場合は
問題なくプログラムは動きますが、メインにMPI_INIT〜MPI_SIZEを
サブにMPI_SEND、MPI_RECV、MPI_BCAST等と計算式を分離した場合、
リンクはできますが、実行時OSがエラーを発行し動きません。
そこで’MPI_COMM_WORLD’をメインでラベルつきCOMMONで確保し
サブに渡すと、OSからのエラーメッセージはなく実行は出来ますが、
今度は’MPI_COMM_WORLD’からINVARID DATA TYPEが発行され、
値が上手く通信できません。ご指導願います。



321:デフォルトの名無しさん
09/04/03 03:39:48
質問です。1〜300の分子のうち今、rank0が分子を1~100個目、rank1が101~205個目、
rank2が205~300個目の速度の計算を受け持ったとします。で、計算が終わった後、
自分が受け持った分の分子の速度をそれぞれ別の全てのプロセスに渡したいとします。
ちなみにそれぞれのプロセスが受け持つ個数も総数も計算中に変動するので、
それぞれのプロセスの最初の分子の番号をista_mol、もってる個数をnum_mol
n個目の分子の速度をvel_mol(n)として、

do n=1,3
CALL MPI_BCAST(vel_mol(ista_mol),num_mol,MPI_REAL8,n,MPI_COMM_WORLD,IERR)
end do

とやらかすと、それぞれのプロセスが持っているista_mol,num_molの値が違うので絵
受信側と送信側のアドレスと要素数がずれて困ったことになりますね。
この場合、ista_mol(n),num_mol(n)とでもしてそれぞれ別の値として持たせて、
(ista_mol(1)にrank0の値を、ista_mol(2)にrank1の値を…)

do n=1,3
CALL MPI_BCAST(vel_mol(ista_mol(n)),num_mol(n),MPI_REAL8,n,MPI_COMM_WORLD,IERR)
end do

とでもしないとダメなんでしょうか?どう考えてももっとスマートなやりかたが
ありそうなんですがどうなんでしょうか?どなたか教えていただけませんか?


322:デフォルトの名無しさん
09/04/03 12:07:03
>>321 MPI_ALLGATHERV

323:デフォルトの名無しさん
09/04/05 04:03:40
お答え頂き有難うございます。ただ、ほとんど基本的なサブルーチンしか使ってないので
MPI_ALLGATHERVはよくわからないんですが、今見た感じだと受信バッファ内の
位置は指定しないといけないんですよね?とすると結局他のプロセスが持っている個数に
関してはこの通信の前に教えてやる必要があるということになるでしょうか?

324:デフォルトの名無しさん
09/04/05 08:34:21
>>323 そうです。

325:デフォルトの名無しさん
09/04/05 15:13:03
なるほど、大体分かりました。mpi_allgathervを使う場合、
num_molを個別に持たせる必要がある以外はほぼ上の形で書けそうですね。
mpi_allgathervなら送信バッファと受信バッファ個別に指定できるので
送信の開始アドレスをずらして指定して大丈夫なんですよね?

それと別の質問なんですが、mpich2をマルチコアcpu一個のマシンでで使う場合って
mpiconfigでホストのところに動かすマシンを追加するほかは特に設定いらないでしょうか?
あとは -np 4 をつけて実行するだけ?なんか単純な問題でも妙に遅いんですが…
キャッシュとかはCPU側で勝手に最適化して使ってくれてるんですかね?

326:デフォルトの名無しさん
09/04/06 02:44:25
コード例を示したほうが良さげですね。こういう具合です。

int num_mol; // 各プロセスが持つ分子の数
double vel_mol[...]; // 分子の速度の配列。要素数は num_mol
int recvbuf_num_mol[NUM_PROCS];
int displs_vel_mol[NUM_PROCS];
double recvbuf_vel_mol[TOTAL_NUM_MOL];
// 1. まず各プロセスが自分の num_mol を他のプロセスに送る
// recvbuf_num_mol[i] にはランク i の num_mol が入る
MPI_Allgather(&num_mol, 1, MPI_INT, recvbuf_num_mol, 1, MPI_INT, MPI_COMM_WORLD);
// 2. recvbuf_num_mol から ALLGATHERV に必要な displs_vel_mol を作る
count = 0;
for (i = 0; i < NUM_PROCS; i++) {
displs_vel_mol[i] = count;
count = count + recv_num_mol[i];
}
// 3. 上記 1. で得た recvbuf_num_mol と 2. で得た displs_vel_mol を使って
// 各プロセスが自分の vel_mol (サイズ不定の配列) を他のプロセスに送る
MPI_Allgatherv (vel_mol, num_mol, MPI_DOUBLE, recvbuf_vel_mol, recvbuf_num_mol, displs_vel_mol, MPI_DOUBLE, MPI_COMM_WORLD);

マルチコアマシン1台で並列実行する場合は
-machinefile オプションに与えるファイルに localhost:4 のように記述するか
-machinefile オプションを使わずに mpirun -localonly 4 のように実行すると
良いような気がします。



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

5158日前に更新/124 KB
担当:undef