MPIによる並列プログラミングについて話し合う統合スレッドです。
とりあえず本家
http://www-unix.mcs.anl.gov/mpi/
Message Passing Interface (MPI) 統合スレ
■ このスレッドは過去ログ倉庫に格納されています
1デフォルトの名無しさん
NGNG214デフォルトの名無しさん
2007/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コア使い切るためにはどうしたら良いでしょうか?
2台ともデュアルコアなので、
/etc/mpich/machines.LINUX に
cluster1:2
cluster2:2
と記述しています。
テストを行おうと
mpirun -np 4 cpi
をしてみたのですが、1分以上待ってもプロンプトが帰ってきません。しかし
mpirun -np 3 cpi
とするとcluster1に2スレッド、cluster2に1スレッド割り当てられ計算結果がすぐ返ってきます?
4コア使い切るためにはどうしたら良いでしょうか?
215213
2007/11/07(水) 00:40:14 色々試したが諦めた。次はPVMを試そうと思う。
216デフォルトの名無しさん
2007/11/07(水) 11:28:47 SuSE Linux9.3
mpich-1.2.7p1
gcc, pgi 7.1
を使用していますが、emacsでmpiデバッグできませんかね。
gdbとpgdbgを使ってデバッグできますが、
pgdbgは使いにくいし、gdb単体も使いにくいので、できれば
emacsからgdbを起動したいなと。
mpich-1.2.7p1
gcc, pgi 7.1
を使用していますが、emacsでmpiデバッグできませんかね。
gdbとpgdbgを使ってデバッグできますが、
pgdbgは使いにくいし、gdb単体も使いにくいので、できれば
emacsからgdbを起動したいなと。
217デフォルトの名無しさん
2007/11/07(水) 13:26:16 PVMってまだ使われてるの?
219デフォルトの名無しさん
2007/11/07(水) 15:42:53220デフォルトの名無しさん
2007/11/07(水) 15:44:35221デフォルトの名無しさん
2007/11/07(水) 15:59:06223214
2007/11/10(土) 21:37:30 /etc/mpich/machines.LINUX の
localhost:2
cluster2:2
となっていたのを
cluster1:2
cluster2:2
にしたらいけました。3スレッドはできるので machines.LINUXは悪くないと決め付けてました。
localhost:2
cluster2:2
となっていたのを
cluster1:2
cluster2:2
にしたらいけました。3スレッドはできるので machines.LINUXは悪くないと決め付けてました。
224デフォルトの名無しさん
2007/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)に質問したところ、
設定は問題はない。プログラムの問題、あるいは通信時間がかかってしまうので
実時間が増える、といういい加減な返答しかきません。
似たような症状を経験したことのある方、対処法をご存知でしたら
教えてもらえないでしょうか。
・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デフォルトの名無しさん
2007/12/13(木) 07:08:53 sched_setaffinity(2) を使うと幸せになれるかも。
226デフォルトの名無しさん
2007/12/27(木) 14:48:26 >>224
MPICHならconfigure時に --mem=shared を付けて構築すべし
通信が共有メモリを介したものになる(異ノード間は当然sshやrsh経由)。
実行時に ps -x してsshやrshでプロセスが起動してたら、わざわざ同一計算機内でTCP/IP通信しちゃってるので損。
OSやコンパイラに付属のMPICHはsharedで構築されていない例が多いので自分で構築してみよう。
MPICHならconfigure時に --mem=shared を付けて構築すべし
通信が共有メモリを介したものになる(異ノード間は当然sshやrsh経由)。
実行時に ps -x してsshやrshでプロセスが起動してたら、わざわざ同一計算機内でTCP/IP通信しちゃってるので損。
OSやコンパイラに付属のMPICHはsharedで構築されていない例が多いので自分で構築してみよう。
227デフォルトの名無しさん
2007/12/27(木) 14:59:25 4CPU/共有メモリって、いわゆる普通のマルチプロセッサのことだよね
今時シングルコアはないから、2コアの2CPUなんだろう
今時シングルコアはないから、2コアの2CPUなんだろう
228デフォルトの名無しさん
2007/12/28(金) 20:38:39 みなさまご助言ありがとうございます。
>>225
検索すると状況としてはこれが当てはまる感じなのですが、
私には使い方がよく分かりません。
詳しいサイト等ありましたら教えてもらえないでしょうか。
>>226
確かにps x コマンドで確認すると(ノード内の場合でも)
rsh が動いていました。
このコンピュータはMPIのインストール及び設定済みのものを
購入したのですが、業者がいいかげんということなのでしょうか?
複数ノード構成なのですが、この場合はどうなのでしょうか
業者の説明では例えば、machinefile に
node00:2 とすればSMPとなるとのことでした。
node00 node00 とすれば通信が発生するとのことでした。
>>227
シングルコアのItanium2:4CPUx4ノードの構成です。
(年度でわけて増設して購入したのでちょっと古いCPUになっています)
納品されたのは1年以上前なのですが、不具合ばかりです。
>>225
検索すると状況としてはこれが当てはまる感じなのですが、
私には使い方がよく分かりません。
詳しいサイト等ありましたら教えてもらえないでしょうか。
>>226
確かにps x コマンドで確認すると(ノード内の場合でも)
rsh が動いていました。
このコンピュータはMPIのインストール及び設定済みのものを
購入したのですが、業者がいいかげんということなのでしょうか?
複数ノード構成なのですが、この場合はどうなのでしょうか
業者の説明では例えば、machinefile に
node00:2 とすればSMPとなるとのことでした。
node00 node00 とすれば通信が発生するとのことでした。
>>227
シングルコアのItanium2:4CPUx4ノードの構成です。
(年度でわけて増設して購入したのでちょっと古いCPUになっています)
納品されたのは1年以上前なのですが、不具合ばかりです。
229225
2007/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;
}
#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;
}
230225
2007/12/29(土) 00:46:50 >>229のプログラムは各プロセスが (10 + rank * 5) 秒後に終了する。
sar コマンドを使って、例えば
> sar -P ALL 1 1000
とやると各プロセスがランクと同じ番号の CPU で走り続けてランク順に終了していく様子が観察できる。
参考にしたページ:http://d.hatena.ne.jp/naoya/20070824/1187945715
sar コマンドを使って、例えば
> sar -P ALL 1 1000
とやると各プロセスがランクと同じ番号の CPU で走り続けてランク順に終了していく様子が観察できる。
参考にしたページ:http://d.hatena.ne.jp/naoya/20070824/1187945715
231デフォルトの名無しさん
2008/01/08(火) 18:31:33 >>226
の書き込み見て、--with-comm=shared というオプションをつけてMPICHを
コンパイルしてみたんだけど、逆に遅くなりました。共有メモリのほうが早く
なると思うんですけど、どうしてだろう?
CPUは Core 2 Quad 2.4GHz を使っています。
の書き込み見て、--with-comm=shared というオプションをつけてMPICHを
コンパイルしてみたんだけど、逆に遅くなりました。共有メモリのほうが早く
なると思うんですけど、どうしてだろう?
CPUは Core 2 Quad 2.4GHz を使っています。
232デフォルトの名無しさん
2008/01/09(水) 01:43:00 GridMPIについて、質問です。
GridMPIのMPI関数は、通信先によって、リモートノードなら、IMPI、
自ノードなら自ノード内のMPI(ベンダMPIなど)を呼び出して通信
するはずですが、GridMPIが提供しているMPI関数と(自ノードの)
ベンダMPIの関数のシンボルが重複しないのはなぜでしょう?
(最初は、GridMPIから発行するベンダMPIの関数は、MPI関数では
なく、PMPI関数と思っていましたが、これは違いますよね・・・)
GridMPIのMPI関数は、通信先によって、リモートノードなら、IMPI、
自ノードなら自ノード内のMPI(ベンダMPIなど)を呼び出して通信
するはずですが、GridMPIが提供しているMPI関数と(自ノードの)
ベンダMPIの関数のシンボルが重複しないのはなぜでしょう?
(最初は、GridMPIから発行するベンダMPIの関数は、MPI関数では
なく、PMPI関数と思っていましたが、これは違いますよね・・・)
233デフォルトの名無しさん
2008/01/10(木) 00:07:05 MPICH1.2.5について質問です。
MPICHのブロードキャストはTCPを用いて行われているようなのですが、
UDPによるブロードキャストを使用することはできるのでしょうか?
ご存知の方がいらっしゃれば、よろしくお願いします。
MPICHのブロードキャストはTCPを用いて行われているようなのですが、
UDPによるブロードキャストを使用することはできるのでしょうか?
ご存知の方がいらっしゃれば、よろしくお願いします。
234デフォルトの名無しさん
2008/01/11(金) 10:27:42 普段はPVMでプログラミングをしているのですが、MPIでは
1.スレーブ(MPIでもこういう表現するんですかね)のマシンに
計算領域を割り当てて計算させる
↓
2.マスタに計算結果を返す
↓
1と2を繰り返す
という流れはどういう風にソース上で実現させているのでしょうか。
1.スレーブ(MPIでもこういう表現するんですかね)のマシンに
計算領域を割り当てて計算させる
↓
2.マスタに計算結果を返す
↓
1と2を繰り返す
という流れはどういう風にソース上で実現させているのでしょうか。
235デフォルトの名無しさん
2008/01/11(金) 20:48:46 >>234
スレーブとか言いません。
全く同じプログラムが複数走ります。
主従はなく、皆平等です。
MPI_Comm_rank関数を呼び出すと自分のノード番号がわかるので、
その番号に応じた振舞いをするようにプログラムを書きます。
たとえば、0から100までの足し算を2台の計算機でするときに、
ノード番号0なら0から49まで、ノード番号1なら50から100まで計算するようにしておきます。
通信は送信したいノード番号に向けて送信し、受信したいノード番号を指定して受信します。
スレーブとか言いません。
全く同じプログラムが複数走ります。
主従はなく、皆平等です。
MPI_Comm_rank関数を呼び出すと自分のノード番号がわかるので、
その番号に応じた振舞いをするようにプログラムを書きます。
たとえば、0から100までの足し算を2台の計算機でするときに、
ノード番号0なら0から49まで、ノード番号1なら50から100まで計算するようにしておきます。
通信は送信したいノード番号に向けて送信し、受信したいノード番号を指定して受信します。
236デフォルトの名無しさん
2008/01/12(土) 20:56:17 WindowsCCSでHPLのベンチ取りたいんだけど参考になるwebとかありませんか?
237デフォルトの名無しさん
2008/01/13(日) 11:21:47238デフォルトの名無しさん
2008/01/16(水) 23:13:34 PVMってまだ使われてるのか?
239デフォルトの名無しさん
2008/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したオブジェクトのポインタが存在して、それも他のノードで再現したいわけで...
質問です。
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デフォルトの名無しさん
2008/02/07(木) 18:19:40 死んでます
241239
2008/02/07(木) 20:05:46 死んでるのかよ!
って、まあ置いといて、STLのstringなんかもオブジェクトのバイナリ丸コピじゃだめなんだよな。
ヒープからバッファ取ってるから。
となると、シリアライズして送信、受信側で再構築なんだろうけど、正直面倒臭いな。
って、まあ置いといて、STLのstringなんかもオブジェクトのバイナリ丸コピじゃだめなんだよな。
ヒープからバッファ取ってるから。
となると、シリアライズして送信、受信側で再構築なんだろうけど、正直面倒臭いな。
242デフォルトの名無しさん
2008/03/01(土) 05:39:37 MPI_File_xxでテキストファイルは扱えないのでしょうか?
243デフォルトの名無しさん
2008/03/06(木) 23:33:27 学科の演習用端末更新終わった〜
Linux / Cele 420 / MEM 2GB / 26台 /hdd less
という構成なんだが、手軽に遊ばせるMPIのサンプルないかな?
ちなみに、午後6時に強制shutdownの設定になってるので、
長くても8時間程度のジョブの奴を頼む。
Linux / Cele 420 / MEM 2GB / 26台 /hdd less
という構成なんだが、手軽に遊ばせるMPIのサンプルないかな?
ちなみに、午後6時に強制shutdownの設定になってるので、
長くても8時間程度のジョブの奴を頼む。
244デフォルトの名無しさん
2008/03/18(火) 08:12:50 MPIプログラムによってネットワークがどのくらい使用されているかは、どのようにしてわかりますか?
環境はFedora8+Intel C++ 10です。
環境はFedora8+Intel C++ 10です。
245デフォルトの名無しさん
2008/03/29(土) 13:32:00 Windows用のものはありませんか?
246デフォルトの名無しさん
2008/04/05(土) 15:00:58 MPICHにWindows版があるyp!
247デフォルトの名無しさん
2008/04/17(木) 17:12:34 プログラムをコンパイルし実行するとsignal 6というエラーが出るのですが、これはどのようなエラーなのでしょうか?
248デフォルトの名無しさん
2008/04/17(木) 18:43:41 どっかでabort()してるんじゃないの
249デフォルトの名無しさん
2008/04/18(金) 21:06:07 MPIにおけるシグナルの使い方は実装依存なのじゃ。
同じエラーが出るミニプログラムを作ってうp汁
同じエラーが出るミニプログラムを作ってうp汁
250デフォルトの名無しさん
2008/04/22(火) 00:04:00 NPACI Rocksつこうてる人おる?
どこのスレいけばいいか解らんくて
迷子してる
どこのスレいけばいいか解らんくて
迷子してる
251デフォルトの名無しさん
2008/05/21(水) 23:38:11 計算の進行状況をファイルに書いてたのだが、
ファイルがバッファリングされる関係で
リアルタイムで更新されないので、fflushを
つっこんだら、計算時間が倍になったぞ。
こういうのは難しいなぁ。
ファイルがバッファリングされる関係で
リアルタイムで更新されないので、fflushを
つっこんだら、計算時間が倍になったぞ。
こういうのは難しいなぁ。
252デフォルトの名無しさん
2008/05/22(木) 06:37:45253デフォルトの名無しさん
2008/05/22(木) 09:17:59 というか、頻繁に確認しない限りそんな遅くならないんじゃないの?
254251
2008/05/23(金) 00:45:22255デフォルトの名無しさん
2008/05/23(金) 01:30:25256251
2008/05/24(土) 18:29:49 計算の進行状況をlogに書くってのも一歩間違うと大変な事になるな。
計算で64bit Intetgerを使って、桁あふれ(2^64)が起きたら
「SKIPしますた」とlogファイルに書いて次ぎのデータ処理に入る
ようにしてたんだ。
今まで深さ4の処理をしてたんだが桁あふれが起きてなかった。
次に深さ5の処理に入ったんだ。とたんに桁あふれが増えて
「SKIPしますた。」でdisk使用制限が超えそうになっちまった。
テラヤバスで、20時間実行したjobを強制停止…
>>255
いや、他大学システムなんで、あまりくだらない質問したく
なくて。利用料金も私が出したんじゃなくて、教授のだし。
計算で64bit Intetgerを使って、桁あふれ(2^64)が起きたら
「SKIPしますた」とlogファイルに書いて次ぎのデータ処理に入る
ようにしてたんだ。
今まで深さ4の処理をしてたんだが桁あふれが起きてなかった。
次に深さ5の処理に入ったんだ。とたんに桁あふれが増えて
「SKIPしますた。」でdisk使用制限が超えそうになっちまった。
テラヤバスで、20時間実行したjobを強制停止…
>>255
いや、他大学システムなんで、あまりくだらない質問したく
なくて。利用料金も私が出したんじゃなくて、教授のだし。
257デフォルトの名無しさん
2008/05/26(月) 19:24:36 MPICHのMPI_Finalizeって常時ポーリングしてんのかな?
処理が終ってFinalize待ちのプロセッサの負荷が100%になってやがる。
割り込み使ってくだちゃい。
処理が終ってFinalize待ちのプロセッサの負荷が100%になってやがる。
割り込み使ってくだちゃい。
258デフォルトの名無しさん
2008/05/27(火) 21:52:46 負荷100%といえば、
rank=0のタスクをjobのマネージメントだけにつかって
rank=1以降を計算に使うプログラムを書いた。
rank=0とrank=1以降でも大してCPU使用率がかわらん
かった。rank=0のタスクはMPI_RECVで待機してただけ
なんだがな。
rank=0のタスクをjobのマネージメントだけにつかって
rank=1以降を計算に使うプログラムを書いた。
rank=0とrank=1以降でも大してCPU使用率がかわらん
かった。rank=0のタスクはMPI_RECVで待機してただけ
なんだがな。
259デフォルトの名無しさん
2008/06/20(金) 22:58:08 MPIで複数のCPUを使って計算させたときに、計算の速さ(結果)を秒数などで表示する
何か良いプログラムは無いでしょうか?
姫野ベンチやHPLだと、結果がFLOPSでしかでないので分かりにくいと言われ
体感的(秒数なもの)にわかるものにしてほしいと(´・ω・`)
思いつく簡単なベンチマークを例であげると、例えばスーパーπの104万桁を2つのCPUで
計算した場合は○○秒かかったけど、4つだと○秒だったよ!という感じです。(ベンチマーク
じゃなくてもいいです。)
よろしくお願いします。
何か良いプログラムは無いでしょうか?
姫野ベンチやHPLだと、結果がFLOPSでしかでないので分かりにくいと言われ
体感的(秒数なもの)にわかるものにしてほしいと(´・ω・`)
思いつく簡単なベンチマークを例であげると、例えばスーパーπの104万桁を2つのCPUで
計算した場合は○○秒かかったけど、4つだと○秒だったよ!という感じです。(ベンチマーク
じゃなくてもいいです。)
よろしくお願いします。
260デフォルトの名無しさん
2008/06/20(金) 23:17:57 >>259
自分で秒数に戻せばいい。そもそも計算速度(flop/sec)というのは
計算速度=計算量÷計算時間
として求めている。
計算量(浮動小数点演算の回数)はプログラムによって決まる。
ベンチマークプログラムなら解説文書に計算量が書いてあるはず。
計算量と計算速度が分かれば当然ながら
計算時間=計算量÷計算速度
で秒数が分かる。
自分で秒数に戻せばいい。そもそも計算速度(flop/sec)というのは
計算速度=計算量÷計算時間
として求めている。
計算量(浮動小数点演算の回数)はプログラムによって決まる。
ベンチマークプログラムなら解説文書に計算量が書いてあるはず。
計算量と計算速度が分かれば当然ながら
計算時間=計算量÷計算速度
で秒数が分かる。
261デフォルトの名無しさん
2008/06/21(土) 01:48:01262デフォルトの名無しさん
2008/06/21(土) 10:55:46 time mpirun -np 3 aho &
でいいじゃん。
各ノードごとの時間を知りたければ
mpirun -np 3 time aho &
でできるぜ
でいいじゃん。
各ノードごとの時間を知りたければ
mpirun -np 3 time aho &
でできるぜ
263259
2008/06/26(木) 17:15:29 >>262
timeを使えば計算時間分かりますね!
アドバイスありがとうございますm(__)m
すいません。色々アドバイスを頂いたのですが何かオープンキャンパスで
高校生の方たちにクラスタを使ってもらうらしく姫野ベンチとかだと流体
の計算なので何を計算しているのかイメージが付きにくいんじゃないか?
と、言われまして何かイメージが付きやすいプログラムというのは無い
でしょうかね・・・?
すいません、変な質問をして(汗
timeを使えば計算時間分かりますね!
アドバイスありがとうございますm(__)m
すいません。色々アドバイスを頂いたのですが何かオープンキャンパスで
高校生の方たちにクラスタを使ってもらうらしく姫野ベンチとかだと流体
の計算なので何を計算しているのかイメージが付きにくいんじゃないか?
と、言われまして何かイメージが付きやすいプログラムというのは無い
でしょうかね・・・?
すいません、変な質問をして(汗
264デフォルトの名無しさん
2008/06/26(木) 22:30:47 >>263
計算結果を可視化するところまでやるとか。
でも見た目が楽しい計算結果でないと訴求力がないだろうねえ。
あるいは利用ノード数(並列度)を変えて実行時間の変化をグラフにして
並列度の高いクラスタのありがたみ(速度向上)を訴えるとか。
計算結果を可視化するところまでやるとか。
でも見た目が楽しい計算結果でないと訴求力がないだろうねえ。
あるいは利用ノード数(並列度)を変えて実行時間の変化をグラフにして
並列度の高いクラスタのありがたみ(速度向上)を訴えるとか。
265デフォルトの名無しさん
2008/06/27(金) 01:51:51266259
2008/06/27(金) 11:53:25 >>264
>計算結果を可視化するところまでやるとか。
>でも見た目が楽しい計算結果でないと訴求力がないだろうねえ。
そうなんですよね〜
分子力学のプログラムで計算結果を可視化できるものがあったんですが
リンク切れとソースの名前をググっても出てこなかったので諦めました・・・。
>あるいは利用ノード数(並列度)を変えて実行時間の変化をグラフにして
>並列度の高いクラスタのありがたみ(速度向上)を訴えるとか。
なるほど。理想値と実際に計算にかかった時間をグラフに書いてもらえば
オーバーヘッドの事や何倍速く計算できたかと言う事が分かりやすいですね!
アドバイスありがとうございますm(__)m
>>265
>迷路。
すいません。
迷路というのは迷路を解くと言う事でしょうか?
>計算結果を可視化するところまでやるとか。
>でも見た目が楽しい計算結果でないと訴求力がないだろうねえ。
そうなんですよね〜
分子力学のプログラムで計算結果を可視化できるものがあったんですが
リンク切れとソースの名前をググっても出てこなかったので諦めました・・・。
>あるいは利用ノード数(並列度)を変えて実行時間の変化をグラフにして
>並列度の高いクラスタのありがたみ(速度向上)を訴えるとか。
なるほど。理想値と実際に計算にかかった時間をグラフに書いてもらえば
オーバーヘッドの事や何倍速く計算できたかと言う事が分かりやすいですね!
アドバイスありがとうございますm(__)m
>>265
>迷路。
すいません。
迷路というのは迷路を解くと言う事でしょうか?
267デフォルトの名無しさん
2008/08/22(金) 20:08:51 すいません MPI初心者です。
windowsでMPIを実行しようとしているんですけどエラーがでて困っています。
インクルドのパスは切っています。
error C2653: 'MPI' : 識別子がクラス名でも名前空間名でもありません。
error C3861: 'Init': 識別子が見つかりませんでした
というエラーがでます。
なんで何でしょう。いきなり初期設定でつまずいて恥ずかしいのですが
だれかアドバイスしていただけないでしょうか。
windowsでMPIを実行しようとしているんですけどエラーがでて困っています。
インクルドのパスは切っています。
error C2653: 'MPI' : 識別子がクラス名でも名前空間名でもありません。
error C3861: 'Init': 識別子が見つかりませんでした
というエラーがでます。
なんで何でしょう。いきなり初期設定でつまずいて恥ずかしいのですが
だれかアドバイスしていただけないでしょうか。
268デフォルトの名無しさん
2008/08/23(土) 08:45:51 >>267
それで他人になにか状況が伝わるとでも?
それで他人になにか状況が伝わるとでも?
269デフォルトの名無しさん
2008/08/23(土) 18:49:31 C:Program Files\MPICH2\lib
C:Program Files\MPICH2\include
を追加する。
最低これでエラーはなくなるはずのに認識できない。
メッセージは同様。
error C2653: 'MPI' : 識別子がクラス名でも名前空間名でもありません。
error C3861: 'Init': 識別子が見つかりませんでした
絶対windowsで同様なエラーが出ている人がいるはず。
MPICH2はwindowsでは無理なのか?
C:Program Files\MPICH2\include
を追加する。
最低これでエラーはなくなるはずのに認識できない。
メッセージは同様。
error C2653: 'MPI' : 識別子がクラス名でも名前空間名でもありません。
error C3861: 'Init': 識別子が見つかりませんでした
絶対windowsで同様なエラーが出ている人がいるはず。
MPICH2はwindowsでは無理なのか?
270デフォルトの名無しさん
2008/08/23(土) 21:20:54271デフォルトの名無しさん
2008/08/23(土) 21:22:39 windowsでMPICH2は「余裕で」動いてる。
272デフォルトの名無しさん
2008/08/24(日) 14:46:18 わかりました。
ウィザードで作った雛形をつかってコピしていたからみたいです。
空のディレクトリをしてしてファイル追加してみるとできました。
ご声援ありがとうございました。何の役にもたたなかったけど(w
ウィザードで作った雛形をつかってコピしていたからみたいです。
空のディレクトリをしてしてファイル追加してみるとできました。
ご声援ありがとうございました。何の役にもたたなかったけど(w
273デフォルトの名無しさん
2008/08/24(日) 20:32:38274デフォルトの名無しさん
2008/08/25(月) 17:29:10275デフォルトの名無しさん
2008/08/25(月) 23:55:04 自分の考えを人間にすら伝えられないバカは
自分の考えをコンピュータに伝えられるわけがない。
プログラムなんてやめた方がいいよ。
自分の考えをコンピュータに伝えられるわけがない。
プログラムなんてやめた方がいいよ。
276デフォルトの名無しさん
2008/09/16(火) 08:21:40 OpenMPIってVistaじゃ使えないの?
277デフォルトの名無しさん
2008/09/17(水) 03:03:50 なんか荒れてる…w
MPICH2いれてBoostのMPI使おうかと思ったが
うまくいかね
using mpi ; をusr-config.jamに書いたが
パスが通ってないと言われる…
いい解説サイト知っていたら教えてくださいませ
MPICH2いれてBoostのMPI使おうかと思ったが
うまくいかね
using mpi ; をusr-config.jamに書いたが
パスが通ってないと言われる…
いい解説サイト知っていたら教えてくださいませ
278デフォルトの名無しさん
2008/11/01(土) 04:35:50 MPI対応のFFTで、2次元の場合はタイル状に、3次元の場合はブロック状に、
データ分割可能なもの知りませんか?
fftwやFFTEのMPI版は短冊形(z方向分割)にしか対応していません。
データ分割可能なもの知りませんか?
fftwやFFTEのMPI版は短冊形(z方向分割)にしか対応していません。
279デフォルトの名無しさん
2008/12/01(月) 12:33:58 ちょっと質問なんですが
MPI_Sendrecvってペアじゃないと使えないですかね?
片方がMPI_Sendrecv
もう一方がMPI_SendだけとかMPI_Recvだけとか。
わかる方いたらご教授願いたいのですが。
MPI_Sendrecvってペアじゃないと使えないですかね?
片方がMPI_Sendrecv
もう一方がMPI_SendだけとかMPI_Recvだけとか。
わかる方いたらご教授願いたいのですが。
280デフォルトの名無しさん
2008/12/04(木) 16:33:04 シングルノードWinXP-Proの環境で、MPICH2に付属ので例題cpi.exeを実行してみたら動きませんでした。
エラーメッセージは特になく、タスクマネージャで確認するとCPUコア数分のcpi.exeが実行中であるのが
確認できるのでが、強制終了する以外コントロールできない状況です。MPICH1ではうまくゆくのですが。
どなたかご教示のほうよろしくお願いします。
エラーメッセージは特になく、タスクマネージャで確認するとCPUコア数分のcpi.exeが実行中であるのが
確認できるのでが、強制終了する以外コントロールできない状況です。MPICH1ではうまくゆくのですが。
どなたかご教示のほうよろしくお願いします。
281デフォルトの名無しさん
2009/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にてコピーしました。この先、何をやればよいでしょうか?
とりあえず以下のコードを実行しました。
$ 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デフォルトの名無しさん
2009/01/14(水) 00:08:03 machinefile または hosts でいけるんじゃないか
mpiexec -machinefile mpd.hosts -n 3 a.out
http://www.mcs.anl.gov/research/projects/mpich2/documentation/files/mpich2-1.0.8-userguide.pdf
mpiexec -machinefile mpd.hosts -n 3 a.out
http://www.mcs.anl.gov/research/projects/mpich2/documentation/files/mpich2-1.0.8-userguide.pdf
283281
2009/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のランクの順に出力したい場合はどう修正すればよいでしょうか?
有り難うございます。出来ました。
別の質問なのですが、以下のコードを実行すると、結果は順不同で出力されます。
#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デフォルトの名無しさん
2009/01/15(木) 10:36:11 >>283
別々のプロセスが勝手に出力を出しているのでそうなる。
ノード0 出力が終わったらノード1に何か情報を送る
ノード1 ノード0空の受信を待った後、画面に出力。その後ノード2に情報を送信
・・・
という感じにするか、あるいはノード0に角ノードが出力したい情報を送りつけて、出力は全部ノード0でやるか。
別々のプロセスが勝手に出力を出しているのでそうなる。
ノード0 出力が終わったらノード1に何か情報を送る
ノード1 ノード0空の受信を待った後、画面に出力。その後ノード2に情報を送信
・・・
という感じにするか、あるいはノード0に角ノードが出力したい情報を送りつけて、出力は全部ノード0でやるか。
285デフォルトの名無しさん
2009/01/15(木) 14:13:53286281
2009/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
どっちか一冊買ってみます。
>>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デフォルトの名無しさん
2009/01/16(金) 11:11:50 >>286
それ、最終ノードが受信してなくね?
printf後にfflushするといいかも
それとループするより素直に
ノード0
表示
送信
ノード 1...n-1
受信
表示
送信
ノード n
受信
表示
でバラして書いた方が見やすいと思う。
同じコードをたくさん書きたくなければ、受信、送信のところを条件分けで囲ったものの間に共通の表示処理を入れるか。
それ、最終ノードが受信してなくね?
printf後にfflushするといいかも
それとループするより素直に
ノード0
表示
送信
ノード 1...n-1
受信
表示
送信
ノード n
受信
表示
でバラして書いた方が見やすいと思う。
同じコードをたくさん書きたくなければ、受信、送信のところを条件分けで囲ったものの間に共通の表示処理を入れるか。
288デフォルトの名無しさん
2009/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回程度繰り返したところでエラーがでます。
考えれる原因などありますか?
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デフォルトの名無しさん
2009/01/30(金) 20:45:55 >>288
プログラムのどっかでreturn 0かexit(0)してんだろ
プログラムのどっかでreturn 0かexit(0)してんだろ
290デフォルトの名無しさん
2009/01/30(金) 22:40:48 質問
コンパイルすると"libmpi_c.so.0"なり"libmpi_cxx.so.0"が
No such fileって言われるんだけどこれはどう解決すればいいですか?
コンパイルすると"libmpi_c.so.0"なり"libmpi_cxx.so.0"が
No such fileって言われるんだけどこれはどう解決すればいいですか?
291デフォルトの名無しさん
2009/01/30(金) 23:51:35 MPIみたいな、少なくとも大学院クラスの人間が数値解析で使うもののスレにしては
エスパーを要請する質問が多いな。
そんな表現能力じゃ論文もかけないだろ。
エスパーを要請する質問が多いな。
そんな表現能力じゃ論文もかけないだろ。
292デフォルトの名無しさん
2009/02/02(月) 21:48:56 >>289
return 0はmain関数の一番最後でしかやってません。
return 0はmain関数の一番最後でしかやってません。
293デフォルトの名無しさん
2009/02/02(月) 21:52:31294デフォルトの名無しさん
2009/02/03(火) 13:14:23296デフォルトの名無しさん
2009/02/04(水) 21:26:54297デフォルトの名無しさん
2009/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
----------
反映されるのかな? ちょいスクリプトのタイポして、書き換えたい
のだが… 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
----------
298294
2009/02/05(木) 10:25:41 みなさん、丁寧にありがとうございます。
2chにソースはあげたくないので、メール頂けると助かります。
2chにソースはあげたくないので、メール頂けると助かります。
299デフォルトの名無しさん
2009/02/05(木) 13:19:21 >>298
いくら払うんだ?
いくら払うんだ?
300デフォルトの名無しさん
2009/02/05(木) 22:34:17 >>298
どうせ卒論だろ。研究室の先輩に聞けよ。
どうせ卒論だろ。研究室の先輩に聞けよ。
301デフォルトの名無しさん
2009/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);
マスタが"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デフォルトの名無しさん
2009/03/11(水) 02:46:50 http://arkouji.cocolog-nifty.com/blog/mpich2/index.html
概ね、ここに書いてあるようにやりました。
(使いたいのは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です。
概ね、ここに書いてあるようにやりました。
(使いたいのは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です。
303302
2009/03/11(水) 02:59:26304デフォルトの名無しさん
2009/03/12(木) 02:12:20 > 使いたいのはfortran
> #include <iostream>
> int main(int argc,char **argv)
これのどこがFortran…
> #include <iostream>
> int main(int argc,char **argv)
これのどこがFortran…
305デフォルトの名無しさん
2009/03/12(木) 18:40:57 >>304
いや、すみません、上はCのサンプルコードをビルドしようとしたときのことです。
「また、fortranの…」以降が自分で書いたfortranのコードをビルドしようとしたときです。
分かりにくくて申し訳ないです。
いや、すみません、上はCのサンプルコードをビルドしようとしたときのことです。
「また、fortranの…」以降が自分で書いたfortranのコードをビルドしようとしたときです。
分かりにくくて申し訳ないです。
306デフォルトの名無しさん
2009/03/12(木) 19:24:10 >>302
プロジェクトのプロパティの
Configuration Properties → C/C++ → Precompiled Headers → Create/Use Precompiled Header
を Not Using Precompiled Headers にすればいいと思われ。
(VC++ で C のプログラムをコンパイルするときによくハマる罠です。)
これは英語版の VC++ 2008 の表記だけど日本語版にも該当する項目があるはず。
プロジェクトのプロパティの
Configuration Properties → C/C++ → Precompiled Headers → Create/Use Precompiled Header
を Not Using Precompiled Headers にすればいいと思われ。
(VC++ で C のプログラムをコンパイルするときによくハマる罠です。)
これは英語版の VC++ 2008 の表記だけど日本語版にも該当する項目があるはず。
308デフォルトの名無しさん
2009/03/12(木) 21:26:09 正直、Linux入れてmpif77とかmpiccとかのラッピングされたコマンド使ったほうが楽だろ。
ライブラリが足りないとかそんな次元が自己解決できないようなら。
KNOPPIXに入ってたりするからとりあえずそれで試してみれば。
ライブラリが足りないとかそんな次元が自己解決できないようなら。
KNOPPIXに入ってたりするからとりあえずそれで試してみれば。
309デフォルトの名無しさん
2009/03/12(木) 23:17:29310デフォルトの名無しさん
2009/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さんはどういう環境で使ってらっしゃるんでしょうか?
もともと、リモートに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さんはどういう環境で使ってらっしゃるんでしょうか?
311302
2009/03/13(金) 07:02:25 というかマニュアルに思い切りfortranの場合fmpich2.libを追加してね、と
書いてあったんですよね。まるっきり見落としてました。ほんとに申し訳ない。
書いてあったんですよね。まるっきり見落としてました。ほんとに申し訳ない。
312デフォルトの名無しさん
2009/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 で実行できることに意味があると思いました。
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デフォルトの名無しさん
2009/03/13(金) 19:04:32 MPI2のMPI_Put/MPI_Getを使いたいので早速簡単なコードを書いたのですが、思うように
動作しません。日本語の文献が極端に少ないので英語のサイトを見ながらやっているのですが、
サンプルコードが難しいものが多く理解出来ていません。まずはシンプルに、プロセス1の変数aを単純にプロセス0
の変数aにコピーしたいだけなのですが、MPI_Send/MPI_Recvを使わずにMPI_Getを使うにはどのように書けばいいでしょうか?
下のコードのどこがおかしいのかご指摘下さい。
ttp://www.dotup.org/uploda/www.dotup.org1347.c.html
動作しません。日本語の文献が極端に少ないので英語のサイトを見ながらやっているのですが、
サンプルコードが難しいものが多く理解出来ていません。まずはシンプルに、プロセス1の変数aを単純にプロセス0
の変数aにコピーしたいだけなのですが、MPI_Send/MPI_Recvを使わずにMPI_Getを使うにはどのように書けばいいでしょうか?
下のコードのどこがおかしいのかご指摘下さい。
ttp://www.dotup.org/uploda/www.dotup.org1347.c.html
■ このスレッドは過去ログ倉庫に格納されています
ニュース
- 【文春】永野芽郁(25)&田中圭(40)燃え上がる不倫LINE ★21 [Ailuropoda melanoleuca★]
- 永野芽郁「一部報道にあるやり取りはしていない」所属事務所が「本人に確認」改めて「交際等の事実はない」★6 [muffin★]
- 【米】スーパーのコメ価格、4233円 17週連続値上がり 前年同期比で2145円高く ★2 [ぐれ★]
- 【栃木】全生徒が徹夜で歩く85キロ強歩→35キロに短縮 大田原高校の伝統行事、負担増で [ぐれ★]
- 【文春】田中圭と永野芽郁やりとりに「スクショはないの?」「信憑性が…」証拠となるはずのLINE画像が公開されない理由とは [muffin★]
- 【陰謀論】「ファクトチェック後進国」日本に変化の兆し 兵庫県知事選きっかけに全国の新聞社が始めた試み [ぐれ★]
- 眠れぬADHD女と雑談するスレ
- 【速報】週刊文春、捏造が確定、永野芽郁&田中圭の両者がLINEトーク報道を否定 [606757419]
- 【速報!!!】トランプ大統領、近く「地球を揺るがす」重大発表を予告 [483862913]
- ジークアクス、初めてロボに乗ったJKが一年戦争の猛者をぶっ殺す
- モク爺😶‍🌫のもくもく木曜日🏡
- 【動画】中国、エチで天才的なゲームを開発してしまう… [306119931]