X



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

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

0005デフォルトの名無しさん
垢版 |
NGNG
初心者ですが何かよい参考書はありませんか?
0009デフォルトの名無しさん
垢版 |
NGNG
0010デフォルトの名無しさん
垢版 |
NGNG
例とかが載っているサイトとかがあったら教えてください
0012デフォルトの名無しさん
垢版 |
NGNG
MPIは使い方は簡単だけど、問題はアルゴリズムの並列化だよね。
MPI自体はほんとに難しいことはないから、リンク先でも読めばすぐにわかるよ。
0013デフォルトの名無しさん
垢版 |
NGNG
MPI始めたばかりなんですが
mpiccを実行した後、mpirunすると
0 - MPI_SEND : Invalid rank 2
p0_23956: p4_error: : 8262
[0] Aborting program !
[0] Aborting program!
パイプ破壊
とエラーがでてしまいます。
何がいけないのでしょうか?;;
0014デフォルトの名無しさん
垢版 |
NGNG
>>13
他のMPIプログラムはちゃんと動いたの?
もし動いたのなら、今回動かなかったプログラムのソースは載せられる?
0015デフォルトの名無しさん
垢版 |
NGNG
>>13
> 0 - MPI_SEND : Invalid rank 2
Invalid rankなんだから、"2" に対応するpeがMPI_Sendで使用したコミュニケー
タに無いんじゃないの?
001713
垢版 |
NGNG
うわ・・書いてる途中で
>>15
知識が足りなくて理解できない…
本でも買って出直してきます;;
0018デフォルトの名無しさん
垢版 |
NGNG
>>16
for(source=1;source<mb;source++){
多分ここでしょ。でもmbをpに直しても間違いのような・・・
突っ込みどころたくさんあるんだけど、もうちょい勉強してみて。
002013
垢版 |
NGNG
>>16,17
ありがとうございます。
周りに聞ける人いなくて助かりましたー
勉強してがんばります!
002113
垢版 |
NGNG
>>18,19でした…ミスばかりですみません;;
002213
垢版 |
NGNG
同志社の資料はわかりやすいですね。
「MPI並列プログラミング」(P.パチェコ著)も買ってみたんですが
結構難しくてちゃんと理解できるか不安に・・・。

0023デフォルトの名無しさん
垢版 |
NGNG
KNOPPIX クラスタ 情報交換会
日時:12月28日 13:30-
場所:同志社大学 京田辺校地 香知館 3F会議場
ttp://www.is.doshisha.ac.jp/SMPP/meetings/2004/041228.html
0024デフォルトの名無しさん
垢版 |
NGNG
む〜んエラーばっかだ
かなり行き詰まってきた;;
<NO ERROR MESSAGE> : Internal MPI error! Attribute in commun
icator is not a valid attribute
Special bit pattern 0 in attribute is incorrect.
[0] Aborting program !
[0] Aborting program!
0025デフォルトの名無しさん
垢版 |
NGNG
プロセス数2以外でやると止まってしまうんですが
原因がわかりません…ご教授のほどを

他のプログラムはプロセス数に限らず動いたんだけどなぁ
0026デフォルトの名無しさん
垢版 |
NGNG
print文を入れてどこで止まってるか調べたら?
多分MPIの通信ルーチンの所だと思うけどね。
0027デフォルトの名無しさん
垢版 |
05/02/15 02:50:23
>>25
どういう状況でとまるのか書かないとわかりにくいッす。
愚考ながら、1のときと3のときでは止まる原因が違う、ということも。

ところで、MPICHのWIN版設定ってやってるページ少ないですね。
GUIのmpirunは接続異常は表示しないし…
0028デフォルトの名無しさん
垢版 |
05/02/18 03:07:35
ちょいとお尋ねしますが。
MPICHって、GlobalArrays実装してますか?
英文必死こいて読んで見たけど、らしき記述が見当たらないのです。
・・・いや、職場で異様に自信満々で「共有メモリ使える」と逝ってる香具師がいるもんで。
そもそも分散型プロセス通信の為の規格っつーか仕様ですよね?>MPI
0029デフォルトの名無しさん
垢版 |
05/02/18 11:13:13
>>28
まさか「共有メモリ」なんて無いですよ。MPIって "Message Passing Interface" ですもん。
プロセッサ間のやりとりはすべてメッセージの送受信ですよ。

> ・・・いや、職場で異様に自信満々で「共有メモリ使える」と逝ってる香具師がいるもんで。
ずいぶんと不幸な職場環境ですね……
003028
垢版 |
05/02/18 21:09:43
>>29
・・・やっぱり?
おかしいとは思ったんですわ。
まあ、もうちょっと読み進めては見ますがせっかくだし。

それはそれとして、RMAのある実装って何かありますか?
MPICHにはないようで。
うまく使えばかなりおいしそうなんで、いじってみたい・・・
0031デフォルトの名無しさん
垢版 |
05/02/22 10:09:38
パソコンにインストールしたいのだけどどこから手をつけていいかわからん
0032デフォルトの名無しさん
垢版 |
05/02/24 03:22:52
とりあえず、
ハード的にはネットワークの使えるパソコン数台と、ルーター
ソフト系は上のほうの紹介サイトぐるっと回ってライブラリをとってくる。
あとはメインのプログラムの開発環境、これぐらい?
0033デフォルトの名無しさん
垢版 |
05/03/09 17:16:27
bcc32で使える?
0034デフォルトの名無しさん
垢版 |
2005/03/28(月) 08:43:19
拡張子が.cの場合は問題ないのに、.cppにすると下記のようなエラーが出ます。
何がいけないのでしょうか?解決方法を教えてください。
/tmp/ccGU5ztX.o(.eh_frame+0x11): undefined reference to `__gxx_personality_v0'
collect2: ld returned 1 exit status
0036デフォルトの名無しさん
垢版 |
2005/03/28(月) 08:57:36
c++を使用したい場合は?
0038デフォルトの名無しさん
垢版 |
2005/03/28(月) 09:12:40
mpiccです。
0039デフォルトの名無しさん
垢版 |
2005/03/28(月) 16:28:41
MPIつかったプログラムを走らせた場合、すべてのプロセスは終わるときも同時に終わるのですか?
0040デフォルトの名無しさん
垢版 |
2005/03/28(月) 16:30:00
同時に終わるようにプログラムしないと同時には終わらないよ
0041デフォルトの名無しさん
垢版 |
2005/03/29(火) 02:56:38
プログラム中で、クラスを作成し、プログラム終了時に、ブロックから抜けることによって破棄されます。
このクラスのデストラクタがランク0以外働かないのですが、何故なのでしょうか?
0043デフォルトの名無しさん
垢版 |
2005/03/29(火) 11:17:29
受け取る側のプロセスがまだrecv関数に到達していないときに、送信側がsendを送った場合、メッセージは破棄されてしまうのでしょうか?
0045デフォルトの名無しさん
垢版 |
2005/03/31(木) 07:23:49
MPIはC++には対応しているの?
0046デフォルトの名無しさん
垢版 |
2005/04/06(水) 14:28:48
G77などのフリーソフトでMPI関数で書かれたプログラム文を
コンパイルする詳しい方法分かりますか?
004746
垢版 |
2005/04/06(水) 14:40:00
OSはwindowsXPです。
include 'mpif.h'で定義ファイルを読み込むんですよね?
0048デフォルトの名無しさん
垢版 |
2005/04/06(水) 15:41:26
>>47
Unixは使えないのですか?
004946
垢版 |
2005/04/06(水) 16:07:03
>>48
使えないです。unixでないとできませんか?
0050デフォルトの名無しさん
垢版 |
2005/04/06(水) 16:30:58
G77ってgnuのfortran?
005146
垢版 |
2005/04/06(水) 16:33:04
そうです。無理ですか?
0052デフォルトの名無しさん
垢版 |
2005/04/06(水) 22:37:29
Windows上でのfortranコンパイラは何使ってるの?
005346
垢版 |
2005/04/06(水) 23:35:21
主にG77でコンパイルしています。
0054デフォルトの名無しさん
垢版 |
2005/04/07(木) 14:03:18
MPIを使ってPDEを解きたいのですが、データはそれぞれのノードがデータの一部分を持つのでしょうか?
threadを使ったプログラムは経験があるのですが、MPIでの作成方法がよくわかりません。
0055デフォルトの名無しさん
垢版 |
2005/04/11(月) 00:23:11
MPICH2使った人いる?MPICHは普通に動くのだけれどMIPCH2が全然機能してくれない。
0056デフォルトの名無しさん
垢版 |
2005/04/16(土) 01:49:10
mpichについていたπの計算するプログラムが理解できません。
なんでwhile(!done){}あたりのギミックが必要なの?
0057デフォルトの名無しさん
垢版 |
2005/04/16(土) 13:14:57
   _、 _ ∩
 ( ∀`) 彡 >>56 教えてやってもいいが
((≡O  ⊃
  |   |   おまい!左腕を上下 右腕を前後
  し⌒J   同時にやってみろ!話はそれからだ!
0058デフォルトの名無しさん
垢版 |
2005/04/16(土) 13:52:56
CPUは別々に稼動してるだろ。CPU1個が処理終わったからといって
他のn個のCPUが処理が完全同期で終わる保証はどこにもないだろ。
だったら全部の処理が終わるまで待つのは当たり前だろ。
 それともそんなことすら解らないのか?プログラム組むの辞めろ。お前は
もう、日本から出て行け
0059デフォルトの名無しさん
垢版 |
2005/04/16(土) 16:24:45
>>56
> なんでwhile(!done){}あたりのギミックが必要なの?
単にコードの書き方がまずいだけと思われ。
この内容ならもっと見やすくシンプルにできるよね。
0060デフォルトの名無しさん
垢版 |
2005/04/16(土) 21:35:10
56です。
なんかわかったような気がする。
コメントアウトの部分のソースを無視していました。
頭悪くてすみませんでした。

>>58さん
MPI_Reduce()で全プロセスが終わるの待ってるのかと思ってたんですけど
違うんですか?
0061デフォルトの名無しさん
垢版 |
2005/04/30(土) 18:49:38
CPUが空いているマシンから優先的にジョブを割り当てるにはどうしたらよいのでしょうか?
0062デフォルトの名無しさん
垢版 |
2005/05/01(日) 01:56:36
エラーもなくコンパイルが終わり、プログラムを実行すると、ある時点で

p5_30033:  p4_error: interrupt SIGSEGV: 11
Broken pipe
Broken pipe

というエラーが出ます。これは何がいけないのでしょうか?
個人的には、ファイルアクセスで問題が起きていると思っているのですが、エラーの原因が未だつかめません。
0063デフォルトの名無しさん
垢版 |
2005/05/01(日) 02:18:46
>>60
 >>58 そいつ、単なるバカだから相手にすんな
0064デフォルトの名無しさん
垢版 |
2005/05/03(火) 11:48:06
>>62
配列の範囲外にアクセスしているとか
MPI以外のエラーを疑え
0065デフォルトの名無しさん
垢版 |
2005/05/05(木) 11:48:10
gccのバージョンの違うコンパイラでmakeしたMPIを別のバージョンgccでコンパイルするCプログラムで利用しても問題ないですか?
問題ないと思っていたのですが、gcc4にアップデートして以来、原因不明で0番プロセス以外が実行中に落ちます。
0067デフォルトの名無しさん
垢版 |
2005/08/19(金) 18:09:30
MPICH2をインストールするのにちょっと苦戦してるんですが
mpd.confにsecretwordを書いた後どうすればいいかちょっと分かりません
教えてもらえないでしょうか?
0069デフォルトの名無しさん
垢版 |
2005/08/22(月) 05:24:37
これがちょっち?
0071デフォルトの名無しさん
垢版 |
2005/09/12(月) 22:52:56
ググってみましたが、情報が少ないですね。
C++でサーバアプリで計算しながら、クライアントアプリにソケット通信するようなシステムに
適用できますか?
サーバー側は1000件/分ぐらいのトランザクションで、クライアント側はサマリー情報を
半リアルで表示させるだけといったかんじです。
0073デフォルトの名無しさん
垢版 |
2005/11/06(日) 16:40:07
mpiプログラミングの前にmpiの勉強をした方が(w
0074デフォルトの名無しさん
垢版 |
2005/11/17(木) 11:20:42
実行時に使用するコンピュータを指定することは出来ないのでしょうか?
0076デフォルトの名無しさん
垢版 |
2005/11/17(木) 16:19:52
やり方を教えてください
0079デフォルトの名無しさん
垢版 |
2006/01/12(木) 23:20:44
お客さんの16CPUマシン(8node, SMP 2way)向けにC言語でMPIプログラムを書いています。単純に差分法で計算するプログラムです。でも私の開発環境は、Pen4の1CPU、fedora3マシンなのです。その1CPUマシンで

mpirun -c 16 myprog.exe

で実行すると、16個のプロセスが動き始めるのですが、問題があります。
それは、プログラムを実行すると、データファイルを読み込んで、処理が始まるのですが、データファイルはいくつかの大きさのものを用意しているのですが、
あるデータファイルでは、正しく計算が完了するのですが、あるデータファイルでは
計算開始直後にエラーで終了してしまいます。調べたところ、MPI_Bcast()で
エラーしていました。
また、正しく計算できるデータファイルを使って、
mpirun -c 8 myprog.exe
のように変えるとエラーする場合もあります。
そこで教えていただきたいのですが、そもそも1CPUマシンで、このような並列計算を
実行することは、何か問題がありますでしょうか?
よろしく。
0081デフォルトの名無しさん
垢版 |
2006/01/13(金) 11:50:49
アドバイスありがとうございます。
>基本的に動かないとまずい。
>メモリ不足とかじゃなきゃ、プログラムのバグだろうね
やはりそうですか。
実際、プログラムを単純化して、単に16プロセスでMPI_Bcast()するだけというプログラムでは、問題なく動きます。
16以外のどんな数字でも問題ありません。なので、プログラムのバグの可能性が高いのですが、一つ気になる点は、
エラーするケースでも、エラーしないケースでも、いずれの場合でもプロセスをps -ef などでモニタしていると、
実行中に16プロセスそれぞれの親プロセスIDがころころ変わっているのが確認できるのですが、何かそのあたり
に関係しているのではと思うのですが、どなたか詳しい方、ヒントなどお願いします。
0082デフォルトの名無しさん
垢版 |
2006/01/15(日) 08:59:30
mpichでもlamでも、実機でもなるってんだったら、
プログラムのバグ。
MPI_Barrier()で、きちんと同期とって
MPI_Bcast()で起こってるなら
MPI実装を疑ってもいい。

まあ、なんだ。
漏れには「FedoraのMPIでエラー終了」じゃ、
どのMPI環境なのかも
どんな異常終了かもサパーリですよ。
0083デフォルトの名無しさん
垢版 |
2006/01/15(日) 14:56:36
>実際プログラムを単純化して、単に16プロセスでMPI_Bcast()するだけというプログラムでは、問題なく動きます

(1) 単純化したプログラムと、エラーが起こる実プログラムで、
送信データの大きさは同じですか?

(2)どういうエラーメッセージが出ますか?

(3)mpi_bcastの前後にprintfでランクの値を書き出した場合、
どうなりますか?
(全プロセスがmpi_bcast前しか表示しないのか、
それともプロセスによってはmpi_bcast後も表示するのか)

(4)エラーが起こるデータファイルで、プロセス数が16より少ないときは
どうなりますか?
0084デフォルトの名無しさん
垢版 |
2006/01/16(月) 00:57:31
皆さん、アドバイスありがとうございます。
>(1) 単純化したプログラムと、エラーが起こる実プログラムで、
>送信データの大きさは同じですか?
はい。MPI_INTを一個です。

>(2)どういうエラーメッセージが出ますか?
今自宅なので、正確には覚えていませんが、英語のメッセージで、
『どれかのプロセスでエラーしました』とか言う感じだったと思います。

>(3)mpi_bcastの前後にprintfでランクの値を書き出した場合、
>どうなりますか?
正しく、自分のランク値が表示されます。

>(全プロセスがmpi_bcast前しか表示しないのか、
>それともプロセスによってはmpi_bcast後も表示するのか)
全プロセスで、MPI_Bcast前に正しいランク値が表示されますが、
MPI_Bcast後には、どのプロセスも何も表示されません。
0085デフォルトの名無しさん
垢版 |
2006/01/16(月) 00:58:31
>(4)エラーが起こるデータファイルで、プロセス数が16より少ないときは
>どうなりますか?
ええっと、その後、いろいろ試してみたら以下のようになりました。
分割数    大きいデータ  小さいデータ
2       OK       エラー
4       OK       OK
5       エラー     エラー
6       エラー     エラー
7       エラー     エラー
8       エラー     OK
9       エラー     OK
10       エラー     OK
11       エラー     OK
12       OK      OK
13       エラー     OK
14       OK      OK
15       エラー     OK
16       エラー     OK
20       エラー     OK
というわけで、よく分かりません。
ちなみに、MPI_Barrier同期は、まったく問題なく動きます。
今のところ、MPI_Bcastを使うのをやめて、MPI_Send/MPI_Recvで同等の処理を
することで、エラーを回避できたようなのですが、MPI_Bcastがエラーする
原因が分からないので、ちょっと気がかりです。
0086デフォルトの名無しさん
垢版 |
2006/01/16(月) 04:45:45
(5)
>はい。MPI_INTを一個です。
確認ですが、一個というのは、下記の2つ目の引数が1という意味ですか?
MPI_Bcast(a,1,MPI_INT,〜);

(6) 上記MPI_BCASTの4つ目の引数(送信元プロセスのランク値)は、
全プロセスで同じ値になっていますか?
また、2,3つ目の引数(送受信バッファーの個数と型)も
全プロセスで同じ値になっていますか?

(7)下記の表の意味ですが、1CPUで2プロセス(mpirun -np 2)で実行し、
小さいデータを入力させた場合でもエラーになるという意味ですか?
またこれは何度やっても同じ結果ですか?
(つまり同じケースでもOKになったりエラーになったりすることはないか)

分割数    大きいデータ  小さいデータ
2       OK       エラー

0087デフォルトの名無しさん
垢版 |
2006/01/16(月) 04:50:20
(8) 問題のMPI_Bcastに到達する前に、MPIの他の通信は行っていますか?

(9) 実プログラムが下記のような構成になっているとして
(a)の部分をすべてコメントにすれば、
  (単純化したプログラムではうまくいくとのことなので)
  うまく動くと思いますが、
  その後で、(a)の部分を前半から少しずつ
  コメントをはずしてはテストしを繰り返せば、
  どこかで再びエラーとなるはずです。
  それによって、エラーの原因となっている個所が特定できるかもしれません。

あるいは逆に、(b)と同等の通信を(送信バッファーの中身は空でも可)
  まず(a)の直前で行い、うまくいったら、
  (a)内を少しずつ後ろへずらしていっても同じテストができます。

MPI_Init();
(a) 入力ファイルの読み込み等
(b) MPI_Bcast(a,1,MPI_INT,〜);
(c) 計算
MPI_Finalize();
0088デフォルトの名無しさん
垢版 |
2006/01/16(月) 05:13:37
(5)の訂正

>はい。MPI_INTを一個です。
確認ですが、一個というのは、下記の2つ目の引数が1という意味ですか?
MPI_Bcast(a,1,MPI_INT,〜);
また、下記の大きいデータの場合も小さいデータの場合も1ですか?

分割数    大きいデータ  小さいデータ
2       OK       エラー
0089デフォルトの名無しさん
垢版 |
2006/01/16(月) 18:19:54
長文のアドバイスありがとうございます。
>(5)の訂正
>確認ですが、一個というのは、下記の2つ目の引数が1という意味ですか?
>MPI_Bcast(a,1,MPI_INT,〜);
はい、そうです。
>また、下記の大きいデータの場合も小さいデータの場合も1ですか?
>分割数    大きいデータ  小さいデータ
>2       OK       エラー
はい。
>(6) 上記MPI_BCASTの4つ目の引数(送信元プロセスのランク値)は、
>全プロセスで同じ値になっていますか?
はい、そうなっています。printfで確認しました。
>また、2,3つ目の引数(送受信バッファーの個数と型)も
>全プロセスで同じ値になっていますか?
はい、同じです。
>(7)下記の表の意味ですが、1CPUで2プロセス(mpirun -np 2)で実行し、
>小さいデータを入力させた場合でもエラーになるという意味ですか?
はいそうです。
>またこれは何度やっても同じ結果ですか?
>(つまり同じケースでもOKになったりエラーになったりすることはないか)
再現されます。同じデータ、同じ分割数で、数回実験しましたが、その時は再現しました。
でも、何十回も同じ条件でテストしたわけではありません。
>(8) 問題のMPI_Bcastに到達する前に、MPIの他の通信は行っていますか?
他に行っているのは、MPI_Barrierのみです。同期をたくさん入れれば問題が解決するんじゃあ
ないかと思って、たくさん入れました。
>(9) 実プログラムが下記のような構成になっているとして
>(a)の部分をすべてコメントにすれば、
これらのテスト結果の報告は、後日させていただきます。
0090sage
垢版 |
2006/01/19(木) 03:41:50
mpichをインストールをしたいのですがconfigureで指定しなければならない
オプションをちょっと教えていただけないでしょうか?
osはfedora core4  コンパイラーにintel fortran compilar 9.0
mpich-1.2.7p1 を使用しています。
よろしくおねがいします。

0091デフォルトの名無しさん
垢版 |
2006/01/19(木) 17:54:06
こんなふうに、実数型と整数型を一緒にするとエラーがでます。
if ( myid .eq. 0 ) then
call MPI_IRecv(retunum,90,MPI_REAL8,1,itag(myid+2),MPI_COMM_WORLD,ireq2,ierr)
elseif ( myid .eq. 1 ) then
call MPI_ISend(retunum,60,MPI_REAL8,0,itag(myid+1),MPI_COMM_WORLD,ireq2,ierr)
end if
if ( myid .eq. 0 ) then
call MPI_IRecv(iretunum,90,MPI_INTEGER,1,itag(myid+2),MPI_COMM_WORLD,istaus,ierr)
elseif ( myid .eq. 1 ) then
call MPI_ISend(iretunum,60,MPI_INTEGER,0,itag(myid+1),MPI_COMM_WORLD,ierr)
end if
以下のように、何故ですか?わかる人教えて下さい。
test-calcul2.f:99: warning:
call MPI_IRecv(retunum,90,MPI_REAL8,
1
test-calcul2.f:106: (continued):
call MPI_IRecv(iretunum,90,MPI_INTEGER,
2
Argument #1 of `mpi_irecv' is one type at (2) but is some other type at (1) [info -f g77 M GLOBALS]
0092デフォルトの名無しさん
垢版 |
2006/01/19(木) 17:56:58
あ、タイプミスだ。
> if ( myid .eq. 0 ) then
> call MPI_IRecv(iretunum,90,MPI_INTEGER,1,itag(myid+2),MPI_COMM_WORLD,istaus,ierr)
> elseif ( myid .eq. 1 ) then
> call MPI_ISend(iretunum,60,MPI_INTEGER,0,itag(myid+1),MPI_COMM_WORLD,ierr)
> end if
if ( myid .eq. 0 ) then
call MPI_IRecv(iretunum,90,MPI_INTEGER,1,itag(myid+2),MPI_COMM_WORLD,ireq2,ierr)
elseif ( myid .eq. 1 ) then
call MPI_ISend(iretunum,60,MPI_INTEGER,0,itag(myid+1),MPI_COMM_WORLD,ireq2,ierr)
end if
です。
0093デフォルトの名無しさん
垢版 |
2006/01/20(金) 00:14:20
下記のプログラムでも同じエラーが出ますか?
もし同じエラーが出たとしたら、
同じサブルーチンの同じ引数に異なる型を指定しているという
警告で、MPIとは関係ないと思います。

program test
call sub(a)
call sub(i)
end
subroutine sub(a)
a=1
end
0094デフォルトの名無しさん
垢版 |
2006/01/20(金) 00:21:15
それから念のため補足ですが
-2つのif文を1つにまとめた方がすっきりすると思います。
-例えばランク0プロセスが同じireq2を(mpi_waitする前に)2回使うのはまずいです。
片方を例えばireq1にしてください。
また2回のcall mpi_xxxの後でmpi_waitが2回必要となります。
あるいはmpi_sendrecvを使う手もあります。
009591
垢版 |
2006/01/23(月) 16:20:18
>>93
まさにそれでした。
>>94
なるほど、了解です。
ところで、送信バッファーに3次元の配列を持たせたいのですが
送受信がうまくいきません。何故かわかる方いますか?
if ( myid .eq. 0 ) then
call MPI_Recv(test(i,j,1),3,MPI_REAL8,1,itag,
& MPI_COMM_WORLD,istaus,ierr)
else
call MPI_Send(test(i,j,1),3,MPI_REAL8,0,itag,
& MPI_COMM_WORLD,ierr)
endif
test(1〜50,1〜100,1〜3)です。

0096デフォルトの名無しさん
垢版 |
2006/01/23(月) 18:40:47
(1) test(i,j,1)のiとjには何が指定されてますか?
(2) 送る要素数は3個ですか?
(3) istatusは大きさmpi_status_sizeで配列宣言してますか?
(4) itagには何が指定されてますか?
(5) 実行するとどういうエラーになりますか?
009791
垢版 |
2006/01/24(火) 11:15:33
>>96
(1) test(i,j,1)のiとjには何が指定されてますか?
i=1,100とj=1,300です。DOループで指定されます。
(2) 送る要素数は3個ですか?
はい、南北方向・東西方向・上下方向の意味なので、3個です。
(3) istatusは大きさmpi_status_sizeで配列宣言してますか?
integer istatus(MPI_STATUS_SIZE)で宣言しています。
(4) itagには何が指定されてますか?
itag=1です。
(5) 実行するとどういうエラーになりますか?
テストプログラムで行った結果、エラー文は出ませんでしたが
入っているはずの値が入っていませんでした。
たとえば、10.5が入るはずなのに、0.0のままであったりします。

0099デフォルトの名無しさん
垢版 |
2006/01/24(火) 18:46:04
例えばi=1,j=1のとき、送りたいデータは以下(A)(B)のどちらですか?
(Fortranの場合は(A)が送られます。)

(A)
test(1,1,1)
test(2,1,1)
test(3,1,1)

(B)
test(1,1,1)
test(1,1,2)
test(1,1,3)

余談ですが、通信回数が多いと通信時間がかかるので、
普通は送りたいデータをまとめて1回で送るようにします。
従ってループ内で通信を行うということはあまりしません。
0100デフォルトの名無しさん
垢版 |
2006/01/26(木) 13:56:53
MPIf77でコンパイルできても
MPIf90でコンパイルできねー!!
↓こんな感じのエラーしかでねー!!
IPO Error: unresolved : mpi_type_dup_fn_
Referenced in newfile.o
IPO Error: unresolved : mpi_win_dup_fn_
Referenced in newfile.o
newfile.o(.text+0x20): In function `MAIN__':
: undefined reference to `mpi_init_'
newfile.o(.text+0x34): In function `MAIN__':
: undefined reference to `mpi_comm_rank_'
MPIのインストールの時おかしな事したのか?おれ
■ このスレッドは過去ログ倉庫に格納されています

ニューススポーツなんでも実況