- 1 名前:デフォルトの名無しさん [04/11/07 18:25:56]
- MPIによる並列プログラミングについて話し合う統合スレッドです。
とりあえず本家 www-unix.mcs.anl.gov/mpi/
- 369 名前:デフォルトの名無しさん [2009/10/15(木) 06:37:31 ]
- だらだら書いてしまったけど・・・・
>>366 ダミー的にメインを作って、本当のメインをサブルーチンとして呼ぶとか? にYes!と書けば終わりだったな・・・・w 早起きはするものではないね。
- 370 名前:デフォルトの名無しさん mailto:sage [2009/10/17(土) 05:54:20 ]
- >>369
いえ、結構怪しかったんで具体的に書いてもらって助かります。 丁寧に教えてくれてありがとう。
- 371 名前:デフォルトの名無しさん mailto:sage [2009/10/17(土) 20:52:34 ]
- すみません、もう一つ質問なんですが、
vel(3,m) pos(3,m) (それぞれm番目の分子のxyz座標の速度と位置)を buffer(6,n) 1~3に速度(vel)を、4~6に位置(pos)をというように一つのbufferに詰め込んで 別のプロセスに送りたいんですけど、一回のアクセスで送り先のvel,pos両方に 格納することって出来ますか?別々にやらないとだめでしょうか? それとも受信用の配列(rbuffer(6,n))とか用意して、別の処理で受信用bufferから vel,posにそれぞれ移し替える方がよいでしょうか? ちなみに送られる分子のmは不連続なので送る過程ではbufferに詰め込んでますが、 送り先では送り先にある最大の分子の番号の末尾から連続で入れればよし、というような状況です。 (送り先に既にm個あったらm+1~m+nまで) 基本的に通信回数は減らした方がパフォは上がるという認識で良いですよね?
- 372 名前:デフォルトの名無しさん mailto:sage [2009/10/18(日) 05:40:13 ]
- ・・・ラグランジュ法的な粒子なのね。
隣接関係(最近接の粒子番地)がころころかわるから厄介そう。 前半最後の2行が王道だとおもう。型の同じ変数は一つの配列名のに付けてから一度に送受信。 いっそ、最初からvelpos(6,m)みたいに位置や速度の情報を一つの大きめの配列にまとめちゃう方が いいかもね。vi(m) とか sed だと、 1,$s/pos(1/velposi(4/g 1,$s/pos(m/velposi(3+m/g みたいな感じでわりと一括置換が効きやすそうだし。 ・・・・・恐いけどw
- 373 名前:デフォルトの名無しさん mailto:sage [2009/10/18(日) 06:45:10 ]
- >>372
うーん、やっぱそうですか。たびたびありがとうございます。 ちなみに代入はf90が使える場面なら PV(1:3,m+1:m+nmbuf)=rbuffer(1:3,1:nmbuf) PP(4:6,m+1:m+nmbuf)=rbuffer(4:6,1:nmbuf) みたいにループ使わずに書く方が速度的にもいいですか? (上であってます?間違いや冗長なところありますかね?) 上は簡略化してるんですが、実はもう少し複雑なので あまりパフォが違わないなら慣れた添え字ループの代入が無難かな。 情けない話ですが出来る限りコマンドラインを避けてるのでviとかsedとかの話あまり分かりません。 でもそれで置換出来るならプログラム書く効率あがりそうですね。覚えた方がいいと思いつつ… 統合環境がそういう複雑な置換装備してくれたらいいのにな。甘えすぎですか。
- 374 名前:デフォルトの名無しさん mailto:sage [2009/10/18(日) 09:38:00 ]
- >>373
例では第一添え字が6要素だから、 do i=1,nmbuf pv(1:3,m+i) = rbuffer(1:3,i) pp(1:3,m+i) = rbuffer(4:6,i) enddo にするといいかな? 右側の要素を:つかって範囲指定すると遅くなることが多い・・・とおもう。 実装にも依存するけど、ベクトル的表現は第一添字(右端)だけに しておくのが安全&安心。 エディタでの一括置換は楽だけど諸刃の剣w
- 375 名前:デフォルトの名無しさん mailto:sage [2009/10/18(日) 09:39:35 ]
- 第一添字(右端)
↓ 第一添字(左端)
- 376 名前:デフォルトの名無しさん [2009/10/20(火) 06:46:25 ]
- インテルコンパイラだけど、MPI使うには、インテルの売ってるやつを使わないといけないの?
- 377 名前:デフォルトの名無しさん mailto:sage [2009/10/20(火) 22:03:31 ]
- 何でもええ。
ライブラリがリンクできれば。
- 378 名前:デフォルトの名無しさん mailto:sage [2009/10/21(水) 02:41:08 ]
- MPI はコンパイラもだけど mpirun がないと。
自宅で文法チェックするだけなら -I -L
- 379 名前:デフォルトの名無しさん mailto:sage [2009/10/22(木) 02:52:21 ]
- max plunk institute !
- 380 名前:デフォルトの名無しさん mailto:sage [2009/10/25(日) 06:45:10 ]
- >>374
遅くなったけど本当にどうもありがとう。うまくできました。 ロードバランス大して考えずに領域の広さを均等にぶった切ったけどcore2quadで 3倍強の加速率でした。動的に負荷を割り振ったらもう少し早くなりそうかな?
- 381 名前:デフォルトの名無しさん mailto:sage [2009/10/25(日) 20:05:53 ]
- 最近HyperThreading対応の4coreのCPUが家庭向けの値段まで落ちてきたので
購入したのだが、ここまでスレッド数が多くなるとメモリ帯域か何かが溢れて 評価しないと使えないな。 同じプログラムが、 Pentium4 2.8GHz(1core * 2スレッド)ではMPIで2プロセス走らせると1.6倍ぐらい速くなったけど、 Corei7-860(4core * 2スレッド)ではMPIで8プロセス走らせると4プロセスに比べて0.9倍 ぐらいに遅くなったよ。
- 382 名前:デフォルトの名無しさん [2009/10/26(月) 06:36:28 ]
- core i7か・・・いいな。このお金持ちめw いくらだった?
1 thread あたりの作業量は 4つの時に比べて0.9*4/8=45%くらいの残念くんだった、って事? 職場での印象では mpirun がメモリアクセスのスケジューリングを うまくさばいてくれていないような気はしたな。気がしただけで検証もなにもしてないけど。 やはり分散メモリのシステムとは根本的に違う、という事なのだろうな。 ・・・・OpenMPだともう少しマシな数字がでてくるのかな?
- 383 名前:デフォルトの名無しさん mailto:sage [2009/10/26(月) 06:42:32 ]
- >>381
CPU とプロセス(またはスレッド)のアフィニティはどうしてる? プロセス数が多くなればなるほど、きっちり固定してやらないと パフォーマンス低下の原因になる希ガス。
- 384 名前:382 mailto:sage [2009/10/26(月) 07:00:00 ]
- OpenMPはデフォだとうろうろするのは知ってたけど。
MPIも固定しないのか・・・知らんかった・・・。
- 385 名前:デフォルトの名無しさん mailto:sage [2009/10/26(月) 09:46:19 ]
- windowsだとOSがウロウロさせるんだけど。
高負荷のシングルスレッドを実行させると全CPUが12%程度になるよ(8core)。 LinuxでもたまにCPUを乗り換えるけどwindowsほど頻繁じゃない。
- 386 名前:381 mailto:sage [2009/10/26(月) 23:47:19 ]
- ふと4とか8プロセスとかとか切りのよい数字じゃなくて5とか6プロセスで
実行したらどうなるんだろうと思った。 現在1〜8プロセスの全てのパターンをベンチ中。多分終わるのは明日。 > core i7か・・・いいな。このお金持ちめw いくらだった? 再利用などしたので、マザボとメモリとCPUしか買ってませんが、46,675円 > 1 thread あたりの作業量は 4つの時に比べて0.9*4/8=45%くらいの残念くんだった、って事? そういう事です。 > CPU とプロセス(またはスレッド)のアフィニティはどうしてる? そのあたり詳しくないのでほとんど設定変更せず使ってます。 ちなみにOpenMPI/CentOS5.4です。
- 387 名前:デフォルトの名無しさん mailto:sage [2009/10/27(火) 16:27:05 ]
- Pentium4ほどパイプラインがスカスカじゃないからHTの効能はあまりないんじゃないかな。
マルチ「スレッド」のプログラムならメモリ資源などの共用が多くHTの効果がでるかもしれないけど、 マルチ「プロセス」のMPIじゃ同一コアでキャッシュとメモリ帯域の争奪戦をするだけで効率低下すると思うけど。
- 388 名前:デフォルトの名無しさん [2009/10/28(水) 02:43:34 ]
- Visual C++2008でMPIを使いたいのですが、何をインストールすればよいのでしょうか?
- 389 名前:デフォルトの名無しさん mailto:sage [2009/10/28(水) 02:57:18 ]
- HTは結局コアが4つしかないから、メモリ転送がネックになる場合だと、パフォーマンスが落ちるよ。
アフィニティで固定したとしても、論理コアが物理コアとリンクしているとは限らないだろうから、 コア間で依存性があった場合は注意が必要だと思う。 HTは簡単に言うと、あいているパイプラインを有効に使うことだから、2つの処理を同じコアで計算させていることだからね。 ただ、3次キャッシュが大きいので、コアが増えることでプリフェッチの恩恵は受けやすくなるかも。
- 390 名前:デフォルトの名無しさん mailto:sage [2009/10/28(水) 02:59:50 ]
- >>384
そりゃそうでしょ。MPIだってコアの指定をしないとだめ。 もちろんPthreadでも。
- 391 名前:デフォルトの名無しさん mailto:sage [2009/10/28(水) 03:24:38 ]
- いわれるとそりゃそうだわ、なんだけど
383のを見るまで気づかんかったw OpenMPだと dplace や taskset で固定できるけど、 これはハードベンダが作った奴だしねぇ。MPIで固定するのはどうするの(特にWin機)?
|

|