1 名前:デフォルトの名無しさん [04/11/07 18:25:56.net] MPIによる並列プログラミングについて話し合う統合スレッドです。 とりあえず本家 www-unix.mcs.anl.gov/mpi/
413 名前:デフォルトの名無しさん mailto:sage [2009/12/23(水) 13:05:15 .net] 他人に自分の意志を伝えられない奴が コンピュータに自分の意志を伝えるプログラミングができるわけがない。 ソースもなしに・・・エスパーも求もと書いとけ。
414 名前:デフォルトの名無しさん mailto:sage [2009/12/27(日) 20:24:15 .net] openfabrics.orgがつながらない、、、
415 名前:デフォルトの名無しさん [2009/12/28(月) 22:57:30 .net] 先日、Bcastの件で指導を頂いたものですが、今回、ScatterとGatherについてご指導願います。 プログラムは program TEST implicit real*8(a-h,o-z) : : MPIの使用開始の手続き : dimension a(2000),b(2000) ! if(Nrank.eq.0) then do i=1, 2000 a(i)=dble(i) enddo endif ! call MPI_Scatter(a(1),20,MPI_DOUBLE_Precision,b(1),20,0,MPI_COMM_WORLD,ierr) ! if(Nrank.gt.0) then do i=1, 20 print *,Nrank,b(i) :この部分で画面に出力 enddo endif ! iiii = 1 + Nrank*10 call MPI_Gather(b(1),10,MPI=DOUBLE_Precision,a(iiii),10,MPI_DOUBLE_Precision,0,MPI_COMM_WORLD,ierr) : として、実行したのですが、画面出力部分では、出力値が全てのランクで0.0となるんです。 当然のことながらGatherでも同様なんですが、どうやった良いのか原因も何も解りません。どうかご指導ください
416 名前:デフォルトの名無しさん [2009/12/28(月) 23:06:52 .net] 失礼しました、 Scatterで...,b(1),20,の後にMPI_DOUBLE_Precision,を書き漏らしております。 質問時の記入ミスです。すみません。
417 名前:デフォルトの名無しさん [2010/01/06(水) 09:09:27 .net] これで出力が出ます。 それとGatherの方で MPI=DOUBLE_Precision の=が_の間違い。 a(iiii)は、ランク0に送るなら ランク0の受信バッファーを指定するので多分a(1)です。 implicit real*8(a-h,o-z) include'mpif.h' dimension a(2000),b(2000) call mpi_init(ierr) call mpi_comm_rank(mpi_comm_world,Nrank,ierr) if(Nrank.eq.0) then do i=1, 2000 a(i)=dble(i) enddo endif call MPI_Scatter(a(1),20,MPI_DOUBLE_Precision, & b(1),20,MPI_DOUBLE_Precision, & 0,MPI_COMM_WORLD,ierr) if(Nrank.gt.0) then do i=1, 20 print *,Nrank,b(i) enddo endif call mpi_finalize(ierr) end
418 名前:デフォルトの名無しさん [2010/02/08(月) 17:39:36 .net] PCだと大丈夫なんですが、大規模な計算機にジョブを投げたとき、 あるプロセスからの出力だけ途中で止まることがあります。 PCはintel fortran+mpich、大規模計算機はPGIfortran+Voltaire MPIです。 例えばプロセスごとにoutput00,output01,output02,output03のように 別のファイルに出力させているんですが、何かの拍子にいくつかが出力 されなくなったりします。ループの途中にbcastやbarrier等の同期があるので、 出力がないプロセスも計算そのものが停止しているということはないと思うのですが、 別のファイルや標準出力への出力も停止するのでうまく調べきれず、定かではありません。 かなり情報が少なくて申し訳ないのですが、考えうる原因、調査法、解決法もしくは それに至らなくとも何か思いついたことでもあれば教えて頂けませんか?
419 名前:デフォルトの名無しさん mailto:sage [2010/02/08(月) 19:42:12 .net] >>415 2桁のファイル名を決める整数が 違うプロセスで同じ整数になっちゃって・・・とか とびとびになってしまって、とかは無いのかな? PCとスパコンで違う並列数でやっておかしくなったのなら 同じ並列数(2とかw)でやってテストしてみては? CPUが自分のプロセス番号(例題でよく変数名Myrankになるやつ) を決める部分のチェックとかもやるといいかも。 とあるシステムでちゃんと動いてるので415さんのMPIの (データ転送とかの)部分にミスがあるとは考えにくい、 という推定からすると他にはあまり思いつかないな。
420 名前:デフォルトの名無しさん mailto:sage [2010/02/09(火) 00:30:15 .net] >>415 ノードローカルのディスクに書いてるとかいうオチならブチキレ
421 名前:デフォルトの名無しさん mailto:sage [2010/02/09(火) 02:35:40 .net] でもたいていのシステムではジョブ終了時に一箇所にまとめるから 少なくともジョブ終了後にユーザーがファイルを移動する操作を する必要は無いような気もするけど・・・・ その可能性は大いにあるね。
422 名前:デフォルトの名無しさん [2010/02/10(水) 18:08:04 .net] 問題のプロセスはファイル出力はせずに計算はちゃんと終了してるの? mpi_finalizeを実行せずに終了してるのでは?
423 名前:デフォルトの名無しさん mailto:sage [2010/02/10(水) 20:33:47 .net] MPI_Finalizeとファイル出力はなんも関係ない
424 名前:デフォルトの名無しさん mailto:sage [2010/02/11(木) 10:58:34 .net] MPI_Finalizeとファイル出力はなんも関係ない => MPIとファイル出力はなんも関係ない => このスレとファイル出力はなんも関係ない
425 名前:デフォルトの名無しさん mailto:sage [2010/02/11(木) 12:03:48 .net] アホかいな MPI_Finalizeしなくても、ファイル出力していればファイルはできてるし、ジョブが死ぬときにファイルがクローズされるからそのときにフラッシュされるわけで MPI_Finalizeしないことがファイルができないこととは無関係だっつってんだよ。
426 名前:デフォルトの名無しさん mailto:sage [2010/02/11(木) 21:49:22 .net] LAM/MPIか何かでMPI_Finalizeを呼ばずにプログラムの実行を終了すると 次回以降のプログラムの実行がおかしくなることがあった希ガス。 確かlambootし直すと正しく実行できるようになったから、裏方のプロセスが 狂ったんだろうな。そういう状況ではファイル入出力が一部おかしくなっても 不思議ではない。
427 名前:デフォルトの名無しさん mailto:sage [2010/02/11(木) 23:16:52 .net] 標準入出力はともかく、ファイル入出力をリダイレクトなんかしてませんよ。 途中でプロセスを頃したらmpichでもおかしくなることがあるが、あくまで通信に失敗すると言う次元のおかしくなり方だから。
428 名前:デフォルトの名無しさん mailto:sage [2010/02/11(木) 23:37:48 .net] Finalizeを指定しなかったために通信がおかしくなって、 それによってプログラムの動き(例えば通信結果によってif文の判定を行っている)が変り、 ファイルへの書き出し部分を通過しなくなったというのは?
429 名前:デフォルトの名無しさん mailto:sage [2010/02/12(金) 01:10:41 .net] 先に他のジョブが終わるってこと? つーか、その程度のミスならPCでマトモに動くとは思えないけど。
430 名前:デフォルトの名無しさん mailto:sage [2010/02/12(金) 15:46:16 .net] 他のジョブとは関係なく、 一つのジョブで、MPI_Finalizeを指定しないで終了するプロセスがあると 通信がおかしくなることがあったと思う。
431 名前:デフォルトの名無しさん mailto:sage [2010/02/13(土) 20:26:46 .net] >>29 ん?じゃぁ宛先はドコに置くん?
432 名前:デフォルトの名無しさん mailto:sage [2010/02/13(土) 21:14:35 .net] >>428 メインプロセスがチャイルドプロセスを立ち上げる。 実装によるが、そのとき引数にチャイルドプロセスの情報を加える。 MPI_Initでargc, argvが要求されるのはそのため。
433 名前:デフォルトの名無しさん mailto:sage [2010/02/19(金) 13:33:36 .net] MPI_Comm_size(MPI_COMM_WORLD,&numprocs); N_local = N_global / numprocs; double u_new[N_local + 2], u_old[N_local + 2]; こうやったら、Integer constant expression requiredって言われました どうすればいいの?
434 名前:デフォルトの名無しさん mailto:sage [2010/02/19(金) 19:29:59 .net] >>430 MPIの前にCの勉強をしろカス といいたいところだが親切な俺様が教えてやろう C89, C++では動的配列は使えない。 mallocかnewで確保汁!
435 名前:デフォルトの名無しさん [2010/03/20(土) 18:01:31 .net] 三次元空間での拡散方程式の解法でお薦めのものを教えてください。 格子は150x150x150で、線形の拡散方程式です。
436 名前:デフォルトの名無しさん [2010/03/24(水) 06:27:04 .net] 自分で作るw ・・・姫野ベンチって計算そのものはラプラスかポアッソンソルバーだったような気がする。 MPI版あったような・・・気がする。気がする、ばかりでなんだが。 それを元にして、というのも。 ライセンス的にアリなのかわからないけど理研(?)の人に聞いてみよう!
437 名前:デフォルトの名無しさん [2010/03/24(水) 10:20:58 .net] コンパイルオプションで倍精度を指定した場合ってmpiの関数が送受信する データはどうなりますか?書き換えが必要ですか?
438 名前:デフォルトの名無しさん mailto:sage [2010/03/24(水) 13:18:17 .net] >>434 Intel Fortran では要った、というか回避策を見つけ切れなかった。しょうがないので、 自分は#if つかってMPI通信部分を単精度用と倍精度用の2種類作って そのうちの一つだけを使うように、#define 一行いじれば済むようににしたけど ・・・・忘れたwときがイヤなのであまり満足していない。 プリプロセスもクレバーに使えばコンパイル時に とあるオプションが使われたときにだけONになるように出来るハズだけど 使い方がいまいちわからんw この部分はコンパイラのベンダ依存性もあるからあまり突き詰めても しょうがないきがするので・・・・便乗だけど、賢者の人カモン!
439 名前:デフォルトの名無しさん mailto:sage [2010/03/24(水) 21:28:25 .net] 面倒くさいのでMPI_BYTEで送ってる。 個数を配列の長さ*sizeof(TYPE)にして。 fortranでこんなことができるか知らんけど。 エンディアンがあってないと大変なことになるが気にしない。
440 名前:435 mailto:sage [2010/03/25(木) 03:25:12 .net] 賢者あらわる。なるほど。ためしにFortran で real r r = 1.0 if sizeof(r) .eq. 8 then call mpi_send(...,mpi_double,....) else call mpi_send(...,mpi_float,....) endif をつくってみたけど、コンパイル時のオプションで振舞がちゃんと変わった。 例では r は単精度か倍精度かの判定用のダミー、のつもり。 値が空だとなんか気持ちがわるいのでてきとうな値を放りこんでみた。意味はない。
441 名前:434 mailto:sage [2010/03/26(金) 17:48:06 .net] >>436 ありがとうございます!出来るんですね。 >>437 436さんの文章だけ見てもぱっと分かんなかったんで助かります。 試してみます。 もう一つ、mpich2って使ってる人いますか? mpi_in_place使えるはずと思うんですが、mpi_reduceの中で使ったところ、 Invalid buffer pointerってエラーが出て使えません。 多分何かとんでもない勘違いしてそうなんですが、どこがおかしいでしょうか? ちなみにこんな感じです↓ mpi_reduce(mpi_in_place,sumofv,n_cell,mpi_real,mpi_sum,0,mpi_comm_world,ierr)
442 名前:436 mailto:sage [2010/03/26(金) 19:38:08 .net] 俺がやってるのは double a[N]; MPI_Send(... N, MPI_DOUBLE, ...) の代わりに MPI_Send(... N*sizeof(a[0]), MPI_BYTE ...) なんだが。 これだとdoubleの代わりが単精度だろうが倍精度だろうが複素数だろうが構造体だろうが送れる。 >>437 だと新しい型を増やす度に条件分岐が増える。
443 名前:デフォルトの名無しさん mailto:sage [2010/03/27(土) 02:01:35 .net] > MPI_Send(... N*sizeof(a[0]), MPI_BYTE ...) なるほど!
444 名前:デフォルトの名無しさん mailto:sage [2010/03/27(土) 12:13:43 .net] if (myrank==0) then call mpi_reduce(mpi_in_place,sumofv,n_cell,mpi_real,mpi_sum,0,mpi_comm_world,ierr) else call mpi_reduce(sumofv,iwork,n_cell,mpi_real,mpi_sum,0,mpi_comm_world,ierr) endif
445 名前:デフォルトの名無しさん [2010/04/04(日) 09:08:14 .net] ダグ番号って例題だと0だけど、複数の通信がシステム全体で走ってるときも0でいいのかな? ・・・宛先番号とか別に指定してるから、とある2つのプロセス間で2つ以上の通信が発生しなければ、 同じタグ番号でも困らないような気はするけど。
446 名前:デフォルトの名無しさん [2010/04/14(水) 10:18:20 .net] ubuntu9.10にOpenMPIをapt-getでインストールしました 。 インテルコンパイラを使うには、apt-getではなく、自らコンパイルしないといけないのでしょうか? 何か設定で切り替える方法があれば教えてください
447 名前:デフォルトの名無しさん mailto:sage [2010/04/21(水) 01:33:13 .net] arkouji.cocolog-nifty.com/blog/mpich2/index.html ここの通りにやってサンプルを使った 円周率の計算まではできたんですけど 自分で書いたC, C++を動かすことができません とりあえずプロジェクトをいじってるんですがそれでいいんでしょうか? 何か留意点などありますか?
448 名前:デフォルトの名無しさん mailto:sage [2010/04/21(水) 01:39:49 .net] windows版のmpichはmingw gccでもリンクできるからgccで作った方が早い。 mpi自体の設定もLinuxの方が簡単。
449 名前:デフォルトの名無しさん mailto:sage [2010/04/21(水) 10:35:03 .net] 最近勉強を始めました。 並列クイックソートを実装しようとしているのですが、実行時にエラーが出てしまいます。 とりあえず2個のプロセッサでやってみてるのですが、いったいどこがいけないのでしょうか? codepad.org/13tw3pKS アドバイスお願いします。
450 名前:デフォルトの名無しさん mailto:sage [2010/04/22(木) 00:58:42 .net] >>446 で、技術料はいくら払うんだ?
451 名前:デフォルトの名無しさん [2010/04/30(金) 06:33:21 .net] $200
452 名前:デフォルトの名無しさん [2010/05/10(月) 05:36:11 .net] OpenMPIとMPICH、どちらをインストールしたらよいのでしょうか それぞれの利点欠点を教えてください
453 名前:デフォルトの名無しさん [2010/06/12(土) 19:14:06 .net] MPICH2 1.0.7rc1 + g95 + cygwin の環境下で、以下のようにバックグランド実行させているのですが、 >nohup mpiexec -np 4 ./a.out >& log.txt & 標準出力(log.txt)に下記のようなメッセージが大量に書き込まれてしまいます。 これを表示させない方法はないでしょうか? (handle_stdin_input 1067): stdin problem; if pgm is run in background, redirect from /dev/null (handle_stdin_input 1068): e.g.: mpiexec -n 4 a.out < /dev/null &
454 名前:デフォルトの名無しさん mailto:sage [2010/06/12(土) 23:35:54 .net] >>450 メッセージに書かれている通りのことをやればいいだけ
455 名前:デフォルトの名無しさん [2010/06/13(日) 04:24:41 .net] >>451 ありがとうございました。確かに入力用にこれを指定すると出なくなりました。 しかし普通に入力ファイルをしていた場合は入力ファイルが読めずに、エラーが出たので、 このようにしたのですが、それはマルチノードの設定の問題でしょうか。
456 名前:デフォルトの名無しさん mailto:sage [2010/06/13(日) 10:55:37 .net] 何をやったらどんなエラーが出たのか書けよ
457 名前:デフォルトの名無しさん mailto:sage [2010/06/16(水) 22:05:53 .net] PhenomII x6 1090Tを3.2GHzから4GHzにOCして、MPIでバカ並列の数値計算 プログラムを走らせて 使ってたのだが、速度が出ないので調べてみた。 殆どOn cacheで動くプログラム、キャッシュミスが無いようなプログラムなのに、 計算に使うコア数を減らすほど速くなる事に気がついた。3コアで最高速。 ふと、OCやめて定格に戻したら、まともな速度が出るようになった。 なんてこった。どうやらOCで逆に遅くなる事があるようだ。 OCする場合とOCしないときと速度比較してみる価値あるかもよ。
458 名前:デフォルトの名無しさん mailto:sage [2010/06/16(水) 22:47:52 .net] MPI使った計算なんて遊びじゃないんだからOCなんて普通しねーっての
459 名前:デフォルトの名無しさん mailto:sage [2010/06/16(水) 23:29:08 .net] まぁそうだな。奇特な人向けの情報です。
460 名前:デフォルトの名無しさん mailto:sage [2010/06/17(木) 19:01:17 .net] 遊びじゃないのにOCするのってダメなのかな 通常のOCのリスク(熱・故障等)以外に、結果が狂うとかある?
461 名前:デフォルトの名無しさん mailto:sage [2010/06/18(金) 00:53:44 .net] >>457 狂った事あるよ。 デカイファイルが出力されるプログラムを実行させてたときに ./a.out | gzip > out.txt.gz とかやってたんだが、out.txt.gz をgzip -d で解凍させたら壊れて ますとエラーが出たので気が付いた。OCでgzipがまともに動作し なかった模様。多分計算結果も壊れてたんだろうな。 てかgzipで圧縮してなかったら計算結果が壊れてる事に気がついて なかった罠。
462 名前:デフォルトの名無しさん mailto:sage [2010/06/18(金) 01:00:23 .net] いやしかし、そろそろMPIに厳しい時期になりましたなぁ。 そろそろ10月まで止めるかなぁ。電流計で測ると11A使っている から1100Wの電熱器付けているようなもんだからなぁ。
463 名前:名無しさん@そうだ選挙に行こう mailto:sage [2010/07/10(土) 14:37:03 .net] >>459 台数を6台から1台に減らしたんだが、最適化に尽力したら、2倍速くなった(w (一台あたりの話) 作業配列をunsignedからunsigned charにしただけで、1.2倍。 昔のCPUは1byteアクセスはペナルティ高かったような… PentiumPro ぐらいの話だが。最近はペナルティ無いのか?
464 名前:名無しさん@そうだ選挙に行こう mailto:sage [2010/07/10(土) 19:12:52 .net] コンパイラや最適化の影響があるかも知れない。 単純にはインテルコンパイラ使ってSSE吐いているならその部分は4倍速くなってるはず。
465 名前:460 mailto:sage [2010/07/10(土) 23:39:18 .net] >>461 単純にメモリ利用量が減ってキャッシュの効きがよくなっただけだと思います。 CPUがPhenom II 945だしインテルコンパイラーつかえねー
466 名前:460 mailto:sage [2010/07/12(月) 23:52:31 .net] 最適化を推し進めていくと、inline命令の逆のnoinline命令が欲しくなるな(gccは拡張機能であるがANSI Cとして欲しいね) コンパイラの最適化レベルを上げるとホットスポット内にある、めったに呼ばれない関数までinline展開されてループ内のマシン語が大きくなってしまう。 また、ifでの条件分離の確率をプログラマーが指定したくなるな。。これはコンパイラーの機能ではどうにもならなかったので、制御構造を変更するしかなかった。こういうのはコンパイラ変更したら無意味になりそうでいやーん。 マシン語がどういう形で展開されているかは、素直に読むとなかなか辛いので、以下のようにasm文で適当にLABEL文を埋め込んでいけばいい。 --- asm(".HOGEHOGE_START:"); for(i=0; i < MAX; i++){ hogehoge;} asm(".HOGEHOGEEND:"); -- そして-save-tempsでマシン語をファイル(hoge.s)に出力させればいい。マシン語のC++の関数名は奇妙奇天烈な名前に変換されるが、c++filtで復元出来る。 $ cat tmp.c void test(int hoge){} $ g++ tmp.c -c $ nm tmp.o 00000000 T _Z4testi <- 謎の関数名 U __gxx_personality_v0 $ nm tmp.o | c++filt 00000000 T test(int) <- 関数名を復元 U __gxx_personality_v0
467 名前:デフォルトの名無しさん [2010/07/14(水) 03:12:44 .net] >>458 そんなこともあるんですか あまり欲張らないでおこう
468 名前:デフォルトの名無しさん mailto:sage [2010/07/14(水) 16:19:27 .net] MPIを使わずに馬鹿並列をする簡単なフレームワークないですかね? MPIをインストールするのめどい。 やって欲しい事は、32coreのマシンと、数千個のファイルがある。 .a.outにこのファイルを一つづつ渡して実行してほしい。処理が終 わったら続いてファイルを渡して処理をして欲しい。同時に32個 のa.outを実行しつつ、処理が終わったa.outがあったら残りの ファイルをa.outで処理してほしい。
469 名前:デフォルトの名無しさん mailto:sage [2010/07/14(水) 16:24:10 .net] ↑ それぞれのa.outは処理時間が一定ではありません。
470 名前:デフォルトの名無しさん mailto:sage [2010/07/15(木) 00:26:56 .net] 妥当なところはOpenMPかな。 #pragma omp parallel for schedule(dynamic,1) for( int i = 0 ; i < 1000 ; ++i ) { char filename[100]; sprintf(filename, "file%03d.dat", i); process(filename); } 結構適当に書いたけど、こんな感じ?
471 名前:デフォルトの名無しさん mailto:sage [2010/07/15(木) 22:00:42 .net] ありがとうございます。OpenMPでそんな事ができるんですね。 gccも4系はサポートしているみたいですので、試してみます。
472 名前:デフォルトの名無しさん mailto:sage [2010/08/07(土) 11:07:24 .net] この辺でもみてくださいな。 一見正しく動いていても、OCで遅くなったり計算間違ったり ttp://hibari.2ch.net/test/read.cgi/tech/1099819556/454 ttp://hibari.2ch.net/test/read.cgi/tech/1099819556/458
473 名前:デフォルトの名無しさん [2010/09/12(日) 06:01:26 .net] 465-466 で処理量が一定でないとの事だから、 >>467 さんの schedule(dynamic,1) は必須だね。これがなくてもちゃんと動くだろうけど、かなり能率は落ちるハズだ。 頑張ってね〜。
474 名前:デフォルトの名無しさん mailto:sage [2010/10/03(日) 18:04:08 .net] MPI導入の話なのですが… MPICH2のmpdbootを失敗した際に出る(handle_mpd_output ***)のまとめサイトのようなものを探しております。 日本語か英語のサイトで見たことあるという方、教えていただければ嬉しいです。
475 名前:デフォルトの名無しさん [2010/10/12(火) 03:47:24 .net] MPIでコンパイルしているかどうかをコンパイル中に#ifdefで判別したいのですが、 どれがdefineされているかを調べれば良いのでしょうか?
476 名前:デフォルトの名無しさん [2010/10/22(金) 10:35:24 .net] Ubuntuでintelコンパイラを使ってMPIプログラムをコンパイルしたいのですが、 apt-getでopenmpiをインストールした後、使用するコンパイラをgccからiccに変更する 方法がわかりません。 やり方を教えてください
477 名前:デフォルトの名無しさん mailto:sage [2010/10/24(日) 02:32:25 .net] www.google.co.jp/search?q=ubuntu+icc&ie=utf-8&oe=utf-8 なるほど分からん
478 名前:デフォルトの名無しさん mailto:sage [2010/10/24(日) 02:44:51 .net] gcc -E -dM -xc /dev/null 定義済みマクロ wikiwiki.jp/redstrange/?%C4%EA%B5%C1%BA%D1%A4%DF%A5%DE%A5%AF%A5%ED __MPI __OPENMP
479 名前:デフォルトの名無しさん [2010/11/11(木) 06:38:52 .net] ご存知の方教えてください。 MPIの各ノードのコンパイラが違っても、コンパイラに依存したソースでなければ動作しますか? よろしくお願いします。
480 名前:デフォルトの名無しさん mailto:sage [2010/11/11(木) 10:15:27 .net] なんか答えにくい質問だなぁ・・ たとえば x86 なCPU で linux 上で、とかなら .o ファイルかき集めて最後にリンクできて・・なら、 たぶんだけど意図したとおりに動くんじゃないかな? コードはあげないけど中間ファイルならあげるよ、という人たちから いろいろもらって一まとめで使う、とかなの?
481 名前:デフォルトの名無しさん [2010/11/12(金) 14:02:34 .net] >>477 すみません質問がいい加減すぎました。 ノード1がCygwinでgcc_4.3.4を使っていて、 ノード2がUbuntuでgcc_4.4.4を使っています。 CPUはともにx86系です。 このようなときに、 MPIはコンパイラが異なることを気にせずにプログラムを動作させることができるかどうか知りたいです。 よろしくお願いします。
482 名前:デフォルトの名無しさん mailto:sage [2010/11/12(金) 15:38:08 .net] mpirun mpiexec の気分次第w まあ、動くかと。 gcc と intel は割と相性イイから インテルも混ぜてあげよう
483 名前:デフォルトの名無しさん [2010/11/15(月) 18:12:22 .net] 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 を入れました。
484 名前:デフォルトの名無しさん mailto:sage [2011/01/13(木) 13:07:41 .net] >>480 bashrcに書けばいいんじゃない?
485 名前:デフォルトの名無しさん [2011/01/26(水) 19:07:42 .net] 行列行列積のやり方が全くわかりません A×B=Cで各プロセスがAとBのブロック行(ブロック行の行数は行列全体の行数/プロセス数)を保持している。 Bをプロセス間で循環させ、計算結果のCを更新していくことでA×Bを計算せよ。 行列は正方行列で1024×1024とし、プロセス数は行数の約数とする。値は乱数で決める。 誰がやり方教えて下さい。プログラムの流れとかでも良いです。お願いします。
486 名前:デフォルトの名無しさん [2011/02/09(水) 18:08:03 .net] 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 ---
487 名前:デフォルトの名無しさん mailto:sage [2011/05/21(土) 13:51:12.10 .net] 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 とエラーが出てしまい実行出来ません。検索しても有効な解決策が見つかりませんでした。 どなたか解決策を教えていただけないでしょうか?
488 名前:デフォルトの名無しさん mailto:sage [2011/05/31(火) 04:09:40.08 .net] Intel mpi(impi)使ってる人います? 自分でコンパイルしたのより速い?
489 名前:デフォルトの名無しさん mailto:sage [2011/05/31(火) 23:53:44.81 .net] そりゃ人間がコンパイルするより速いだろ
490 名前:デフォルトの名無しさん mailto:sage [2011/06/01(水) 02:31:39.53 .net] 機械語直打ちw やだな・・・罰ゲームだ
491 名前:デフォルトの名無しさん mailto:sage [2011/06/07(火) 02:57:07.11 .net] >>486 ,487 そんなくだらない煽りが来るとは思わなかった. mpichってconfigure makeしません? 数値計算メインで使ってるなら, 効率考えて,コンパイラ変えたりするでしょ. mpi関係ないコンパイラの速度って, icc>1.1倍>gcc4>>1 .8倍>>gcc3 ぐらいのイメージなんで,(Linux x86_64) ifortやiccでmpichコンパイルしたのとどっちが早いかな と思ったんですが. impiだと, mpicc -cc=icc て出来ることがわかったので,自己解決しました.
492 名前:デフォルトの名無しさん mailto:sage [2011/06/07(火) 03:03:11.95 .net] >>481 環境変数はbash_profileのほうがふつうじゃない? >>484 mpd立てた? listenportの設定は適切? 付属のサンプルプログラムは流れた?
493 名前:デフォルトの名無しさん mailto:sage [2011/06/08(水) 00:50:57.29 .net] >>488 「自分でコンパイル」に該当する環境をきちんと定義しないからさ。 コンパイラは?gcc?icc?それ以外? mpiライブラリは?計算内容は? まぁどれにしてもmpiコンパイラって基本的に適当なライブラリをくっつけて ビルドするスクリプトだから、実際やってる内容を出力するオプションあるし それで1つ1つ確認すればいいんじゃない?
494 名前:デフォルトの名無しさん mailto:sage [2011/06/08(水) 01:47:18.76 .net] >>490 回答ありがとう.たしかにあやふやな質問だったと思う. 偏見かもしれんが,まともなwindowsクラスタってあるの? 数値計算を32bitで行うのは論外でしょ. でIntel Compilerを入れる時点で,アーキテクチャほぼ決まると思いますが. impiのデフォルトコンパイラはgcc&gfortranです. mpiライブラリの意味がわからん. impiの前はmpichを使ってた.(これで回答になっている?) 計算内容は有限差分とモンテカルロ. 続く
495 名前:デフォルトの名無しさん mailto:sage [2011/06/08(水) 01:48:27.26 .net] >>490 続き 適当なライブラリが-lmpi -lpthread -lmとかを言っているなら, libmpiをコンパイルする必要があると思いますが. このライブラリをIntelがチューニングしてくれたら, 自分でコンパイルするより早いでしょうし. デフォルトのgccとかでやられてたら, 自分でコンパイルしたほうが速そうじゃない? 実際やってる内容ってのは,mpiccやmpifcのスクリプトの中身のこと? それとも別の何かを指しているの?
496 名前:デフォルトの名無しさん [2011/08/28(日) 05:28:03.47 .net] ブロードキャストってネットワークの送受信量を減らすことができるのですか? それとも単に便利なだけというだけなのでしょうか?
497 名前:デフォルトの名無しさん mailto:sage [2011/09/01(木) 19:37:51.69 .net] MPIってテキストからデータ読み込んだ時に、 MPI_SendやMPI_Recvを使って送受信可能にするためには変換が必要だったりしますか? double型のデータなんですが。
498 名前:デフォルトの名無しさん mailto:hotaru__hyoma0615@hotmail.co.jp [2011/09/02(金) 11:09:03.84 .net] 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
499 名前:デフォルトの名無しさん mailto:sage [2011/09/03(土) 10:38:26.00 .net] 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次元座標的には読みにくい入力データが必要。
500 名前:495 mailto:hotaru_hyoma0615@hotmail.co.jp [2011/09/04(日) 09:45:19.22 .net] >>496 さんの言った通り直しても通りませんでした…。 正直自分の知識じゃ限界を感じているので 代わりにやってくれる方がいれば報酬払ってもいいです。 最大2万円までしか出せませんが…。メール待ってます。
501 名前:デフォルトの名無しさん [2011/11/15(火) 11:36:05.43 .net] openmpi使ってるんだがnohupが効かねぇ・・・ 端末PC落とすと計算やめちゃうんだが
502 名前:デフォルトの名無しさん [2011/11/19(土) 16:31:12.60 .net] へえ
503 名前:デフォルトの名無しさん [2011/11/24(木) 19:56:37.29 .net] MPIの勉強始めようと思うんだけどMPI3ってのはまだ出てないの?
504 名前:デフォルトの名無しさん [2012/05/16(水) 14:34:19.07 .net] OpemMPとの違いを教えてください
505 名前:デフォルトの名無しさん mailto:sage [2012/05/16(水) 15:20:09.38 .net] MPI 妖精がいっぱい同時に働く。 拍子を合わせそこなうと、ぐだぐだ。 プログラムは最初から並列前提で書く方が いいかもしてない。非並列からの移行は面倒臭い。 OpenMP 手がいっぱいある妖精が独りで頑張る。 並列化はかなり楽。 混在できるけどね。 gfortran とか無料コンパイラがOpenMPに 対応しているし、マルチコアCPUが 普通になってきた今日、 小規模から中規模ならOpenMPがオススメ。 大規模スパコン使う可能性があるなら、 MPI で最初から組むべし。
506 名前:デフォルトの名無しさん [2012/06/21(木) 09:40:29.85 .net] MPIにおすすめのスイッチングハブを教えてください
507 名前:デフォルトの名無しさん [2012/08/03(金) 08:01:03.03 .net] >>503 バカハブこれ最強
508 名前:デフォルトの名無しさん mailto:sage [2012/10/31(水) 13:14:04.95 .net] LANポートにあきがあるならノードでリングベース組むのが勉強になるで 俺は混在は結構ありだとおもうで クラスタとかなら通信時間削減が期待できる
509 名前:デフォルトの名無しさん [2012/11/23(金) 18:27:19.04 .net] gigabit ethernetからInfiniBandに変えた場合のベンチマーク結果とかありますか? アプリケーションにも依るとは思うのですが、ある程度、どのくらい向上するのか知りたいのですが ♪∧,,∧ ♪∧,,∧・ ω・) ∧,,∧・ ω・) )っ (・ ω・) )っ__フ (っ )っ__フ(_/彡 ( __フ(_/彡 (_/彡♪
510 名前:デフォルトの名無しさん mailto:sage [2013/04/01(月) 12:31:36.78 .net] www.science-academy.jp/showcase/11/pdf/P-108_showcase2012.pdf ↑こいつとか、国泰寺高校もそうだけど、学生でもこういうMPIのシステムを構築できる時代なんだな。 ただ、それゆえに性能測定しかしていない。 テーマを持たないと意味ないよな。 それに関して指導できる教師が高校にいるものだろうか?
511 名前:デフォルトの名無しさん mailto:sage [2013/04/21(日) 05:09:09.55 .net] 動的に確保する要素を含む構造体のデータタイプを作るにはどうしたらいいのでしょうか。 int MPI_Type_struct(int count, int blocklens[], MPI_Aint indices[], MPI_Datatype old_types[], MPI_Datatype *newtype) のMPI_Aint indices[]のアドレス計算部分で構造体の動的に確保した要素のせいで アドレスが一部分に固まってないのでよくわかりません。
512 名前:デフォルトの名無しさん mailto:sage [2013/06/22(土) 16:11:03.36 .net] >>508 要素を一つずつ配布するしかないんじゃないか
513 名前:デフォルトの名無しさん mailto:sage [2013/07/28(日) NY:AN:NY.AN .net] 多体問題とか計算させて可視化とか ありきたりだけどインパクトはあるよね そんなに難しくないし