>>298
いくら払うんだ?
探検
Message Passing Interface (MPI) 統合スレ
■ このスレッドは過去ログ倉庫に格納されています
299デフォルトの名無しさん
2009/02/05(木) 13:19:21300デフォルトの名無しさん
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
314313
2009/03/14(土) 05:12:50 他んとこに聞いてみます
315302
2009/03/14(土) 18:05:44 >>312
ありがとうございます。
あー、その環境だと完全にタダで構築できるってことですよね。自宅のPCはそれでチャレンジしてみようかな…
OpenMP+MPIって性能出ます?先生に相談したら最初からMPIで書いた方がいいよ、と言われて鵜呑みに
してたんですけど。今まで基本的に学校で用意されてる環境をそのまま使うだけというぬるま湯に使ってきたんで
これからは多少そのへんも自分で勉強してみます。
ありがとうございます。
あー、その環境だと完全にタダで構築できるってことですよね。自宅のPCはそれでチャレンジしてみようかな…
OpenMP+MPIって性能出ます?先生に相談したら最初からMPIで書いた方がいいよ、と言われて鵜呑みに
してたんですけど。今まで基本的に学校で用意されてる環境をそのまま使うだけというぬるま湯に使ってきたんで
これからは多少そのへんも自分で勉強してみます。
316デフォルトの名無しさん
2009/03/14(土) 19:15:30 >>314
312に書いたアプリの場合は、実環境で試したところ OpenMP+MPI は素の MPI よりわずかに
遅いかほとんど同じという結果でした。
もっとも、どちらの性能がいいかは問題、ハードウェア、ソフトウェアなどに依存しますし、
最終的にはやってみないと分かりませんので、可能性があると思ったら試す価値があります。
ハイブリッド並列化に興味があるのでしたら次の記事が参考になると思います。
T2Kオープンスパコン(東大)チューニング連載講座(その5)
OpenMPによる並列化のテクニック:Hybrid並列化に向けて
http://www.cc.u-tokyo.ac.jp/publication/news/VOL11/No1/200901tuning.pdf
312に書いたアプリの場合は、実環境で試したところ OpenMP+MPI は素の MPI よりわずかに
遅いかほとんど同じという結果でした。
もっとも、どちらの性能がいいかは問題、ハードウェア、ソフトウェアなどに依存しますし、
最終的にはやってみないと分かりませんので、可能性があると思ったら試す価値があります。
ハイブリッド並列化に興味があるのでしたら次の記事が参考になると思います。
T2Kオープンスパコン(東大)チューニング連載講座(その5)
OpenMPによる並列化のテクニック:Hybrid並列化に向けて
http://www.cc.u-tokyo.ac.jp/publication/news/VOL11/No1/200901tuning.pdf
317デフォルトの名無しさん
2009/03/14(土) 19:17:51 レス番号をまちがえました。316は>>315宛てです。
318デフォルトの名無しさん
2009/03/21(土) 22:47:30 VS 2008 のExpress EditionはOpen MP非対応じゃなかたか。
319デフォルトの名無しさん
2009/03/22(日) 05:57:00 >>318
Windows SDK for Windows Server 2008 and .NET Framework 3.5 を一緒に入れると使えます。
参考:http://tech.ckme.co.jp/vc.shtml
Windows SDK for Windows Server 2008 and .NET Framework 3.5 を一緒に入れると使えます。
参考:http://tech.ckme.co.jp/vc.shtml
320デフォルトの名無しさん
2009/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が発行され、
値が上手く通信できません。ご指導願います。
メイン又はサブに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デフォルトの名無しさん
2009/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
とでもしないとダメなんでしょうか?どう考えてももっとスマートなやりかたが
ありそうなんですがどうなんでしょうか?どなたか教えていただけませんか?
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デフォルトの名無しさん
2009/04/03(金) 12:07:03 >>321 MPI_ALLGATHERV
323デフォルトの名無しさん
2009/04/05(日) 04:03:40 お答え頂き有難うございます。ただ、ほとんど基本的なサブルーチンしか使ってないので
MPI_ALLGATHERVはよくわからないんですが、今見た感じだと受信バッファ内の
位置は指定しないといけないんですよね?とすると結局他のプロセスが持っている個数に
関してはこの通信の前に教えてやる必要があるということになるでしょうか?
MPI_ALLGATHERVはよくわからないんですが、今見た感じだと受信バッファ内の
位置は指定しないといけないんですよね?とすると結局他のプロセスが持っている個数に
関してはこの通信の前に教えてやる必要があるということになるでしょうか?
324デフォルトの名無しさん
2009/04/05(日) 08:34:21 >>323 そうです。
325デフォルトの名無しさん
2009/04/05(日) 15:13:03 なるほど、大体分かりました。mpi_allgathervを使う場合、
num_molを個別に持たせる必要がある以外はほぼ上の形で書けそうですね。
mpi_allgathervなら送信バッファと受信バッファ個別に指定できるので
送信の開始アドレスをずらして指定して大丈夫なんですよね?
それと別の質問なんですが、mpich2をマルチコアcpu一個のマシンでで使う場合って
mpiconfigでホストのところに動かすマシンを追加するほかは特に設定いらないでしょうか?
あとは -np 4 をつけて実行するだけ?なんか単純な問題でも妙に遅いんですが…
キャッシュとかはCPU側で勝手に最適化して使ってくれてるんですかね?
num_molを個別に持たせる必要がある以外はほぼ上の形で書けそうですね。
mpi_allgathervなら送信バッファと受信バッファ個別に指定できるので
送信の開始アドレスをずらして指定して大丈夫なんですよね?
それと別の質問なんですが、mpich2をマルチコアcpu一個のマシンでで使う場合って
mpiconfigでホストのところに動かすマシンを追加するほかは特に設定いらないでしょうか?
あとは -np 4 をつけて実行するだけ?なんか単純な問題でも妙に遅いんですが…
キャッシュとかはCPU側で勝手に最適化して使ってくれてるんですかね?
326デフォルトの名無しさん
2009/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 のように実行すると
良いような気がします。
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 のように実行すると
良いような気がします。
327デフォルトの名無しさん
2009/04/08(水) 01:08:39 あるある
328デフォルトの名無しさん
2009/06/03(水) 17:15:01 PVMからMPIに鞍替えしようと思って勉強を始めようと思うのだが
今だとOpenMPIとMPICH2のどちらを勉強すればいいのだろう
Mac OS X LeopardにはOpenMPIがもれなくついてくるらしいのだが
MPICH2とどう特徴が異なるのかを見極めて判断したいのですが・・・
今だとOpenMPIとMPICH2のどちらを勉強すればいいのだろう
Mac OS X LeopardにはOpenMPIがもれなくついてくるらしいのだが
MPICH2とどう特徴が異なるのかを見極めて判断したいのですが・・・
329デフォルトの名無しさん
2009/06/03(水) 23:59:12 >>328
MPIの実装に依存するようなプログラムでも作る気かい?
MPIの実装に依存するようなプログラムでも作る気かい?
330お願いします
2009/06/18(木) 20:47:03 MPIでどうしてもわかりません。
f(x)=x*xの0~1の積分なんですが、答えが通常0.3333となるはずですが
なぜ以下のプログラムだと違った答えがでるのでしょうか?
すみません、どなたか教えていただけないでしょうか?
ちなみにプログラムはよくあるMPI(倍風館)の本のものです。
実行すると0.000488のような値がでてきます。困っています。
どうやれば0.3333みたいな値を得ることができるでしょうか?
f(x)=x*xの0~1の積分なんですが、答えが通常0.3333となるはずですが
なぜ以下のプログラムだと違った答えがでるのでしょうか?
すみません、どなたか教えていただけないでしょうか?
ちなみにプログラムはよくあるMPI(倍風館)の本のものです。
実行すると0.000488のような値がでてきます。困っています。
どうやれば0.3333みたいな値を得ることができるでしょうか?
331お願いします
2009/06/18(木) 20:53:12 #include <stdio.h>
#include <mpi.h>
main(int argc, char** argv) {
int my_rank; /* カレントプロセスのランク */
int p; /* プロセスの数 */
float a = 0.0; /* 全積分区間の左端 */
float b = 1.0; /* 全積分区間の右端 */
int n = 1024; /* 台形の全個数 */
float h; /* 台形の底辺の長さ */
float local_a; /* 本プロセスの積分区間の左端 */
float local_b; /* 本プロセスの積分区間の右端 */
int local_n; /* 本プロセスの台形の数 */
float integral; /* 本プロセスの積分 */
float total; /* 全積分値 */
int source; /* 積分を送るプロセス */
int dest = 0; /* すべてのメッセージは0へ */
#include <mpi.h>
main(int argc, char** argv) {
int my_rank; /* カレントプロセスのランク */
int p; /* プロセスの数 */
float a = 0.0; /* 全積分区間の左端 */
float b = 1.0; /* 全積分区間の右端 */
int n = 1024; /* 台形の全個数 */
float h; /* 台形の底辺の長さ */
float local_a; /* 本プロセスの積分区間の左端 */
float local_b; /* 本プロセスの積分区間の右端 */
int local_n; /* 本プロセスの台形の数 */
float integral; /* 本プロセスの積分 */
float total; /* 全積分値 */
int source; /* 積分を送るプロセス */
int dest = 0; /* すべてのメッセージは0へ */
332お願いします
2009/06/18(木) 20:53:55 int tag = 0;
MPI_Status status;
/* ローカルな積分を計算する */
float Trap(float local_a, float local_b, int local_n, float h);
/* MPIの初期化 */
MPI_Init(&argc, &argv);
/* カレントプロセスのランクを求める */
MPI_Comm_rank(MPI_COMM_WORLD, &my_rank);
/* プロセスの数を求める */
MPI_Comm_size(MPI_COMM_WORLD, &p);
h = (b-a)/n; /* hはすべてのプロセスで同じ */
local_n = n/p; /* したがって台形の数も同じ */
/* 各プロセスの積分区間の長さはlocal_n*hである。 */
/* 本区間は次から始まる */
local_a = a + my_rank*local_n*h;
local_b = local_a + local_n*h;
integral = Trap(local_a, local_b, local_n, h);
MPI_Status status;
/* ローカルな積分を計算する */
float Trap(float local_a, float local_b, int local_n, float h);
/* MPIの初期化 */
MPI_Init(&argc, &argv);
/* カレントプロセスのランクを求める */
MPI_Comm_rank(MPI_COMM_WORLD, &my_rank);
/* プロセスの数を求める */
MPI_Comm_size(MPI_COMM_WORLD, &p);
h = (b-a)/n; /* hはすべてのプロセスで同じ */
local_n = n/p; /* したがって台形の数も同じ */
/* 各プロセスの積分区間の長さはlocal_n*hである。 */
/* 本区間は次から始まる */
local_a = a + my_rank*local_n*h;
local_b = local_a + local_n*h;
integral = Trap(local_a, local_b, local_n, h);
333お願いします
2009/06/18(木) 20:54:39 /* 各プロセスの積分を加算する */
if (my_rank == 0) {
total = integral;
for (source = 1; source < p; source++) {
MPI_Recv(&integral, 1, MPI_FLOAT, source, tag, MPI_COMM_WORLD, &status);
total = total + integral;
}
} else {
MPI_Send(&integral, 1, MPI_FLOAT, dest, tag, MPI_COMM_WORLD);
}
/* 結果のプリント */
if (my_rank == 0) {
printf("With n = %d trapezoids, our estimate\n", n);
printf("of the integral from %f to %f = %f\n", a, b, total);
}
/* MPIを閉じる */
MPI_Finalize();
} /* main */
if (my_rank == 0) {
total = integral;
for (source = 1; source < p; source++) {
MPI_Recv(&integral, 1, MPI_FLOAT, source, tag, MPI_COMM_WORLD, &status);
total = total + integral;
}
} else {
MPI_Send(&integral, 1, MPI_FLOAT, dest, tag, MPI_COMM_WORLD);
}
/* 結果のプリント */
if (my_rank == 0) {
printf("With n = %d trapezoids, our estimate\n", n);
printf("of the integral from %f to %f = %f\n", a, b, total);
}
/* MPIを閉じる */
MPI_Finalize();
} /* main */
334お願いします
2009/06/18(木) 20:55:45 float Trap(
float local_a /* 入力 */,
float local_b /* 入力 */,
int local_n /* 入力 */,
float h /* 入力 */){
float integral; /* 積分値 */
float x;
int i;
float f(float x); /* 被積分関数 */
integral = (f(local_a) + f(local_b))/2.0;
x = local_a;
for (i = 1; i <= local_n-1; i++) {
x = x + h;
integral = integral + f(x);
}
integral = integral*h;
return integral;
} /* Trap */
float f(float x) {
float return_val;
/* f(x) を計算する */
/* return_val に計算結果を入れる */
return_val = x * x;
return return_val;
} /* f */
float local_a /* 入力 */,
float local_b /* 入力 */,
int local_n /* 入力 */,
float h /* 入力 */){
float integral; /* 積分値 */
float x;
int i;
float f(float x); /* 被積分関数 */
integral = (f(local_a) + f(local_b))/2.0;
x = local_a;
for (i = 1; i <= local_n-1; i++) {
x = x + h;
integral = integral + f(x);
}
integral = integral*h;
return integral;
} /* Trap */
float f(float x) {
float return_val;
/* f(x) を計算する */
/* return_val に計算結果を入れる */
return_val = x * x;
return return_val;
} /* f */
335お願いします
2009/06/18(木) 20:57:04336デフォルトの名無しさん
2009/06/19(金) 00:14:35 まず各ノードのintegralを送信せずに表示してみろよ。
積分が間違ってるのか送受信でやらかしてるのか区別つくだろ。
この程度のことくらいやってから他人に聞けば?
積分が間違ってるのか送受信でやらかしてるのか区別つくだろ。
この程度のことくらいやってから他人に聞けば?
337デフォルトの名無しさん
2009/06/19(金) 14:08:34 >>330
手元で実行してみたが
$ mpirun -np 2 ./a.out
With n = 1024 trapezoids, our estimate
of the integral from 0.000000 to 1.000000 = 0.333333
となったぞ。ハードウェアの構成は何だ?
手元で実行してみたが
$ mpirun -np 2 ./a.out
With n = 1024 trapezoids, our estimate
of the integral from 0.000000 to 1.000000 = 0.333333
となったぞ。ハードウェアの構成は何だ?
338お願いします
2009/06/19(金) 19:45:20 ありがとうございます。
PCクラスタ環境は
Fujitsu PRIMERGY RS200 ×16台
Xeon 3.20GHz/L3:1MB ×2
2GBメモリ
146.8GB HDD ×2(RAID1利用のため実効はこの半分)
73GB HDD ×5(RAID5利用のため実効はこの4/5)
こんな感じです。
PCクラスタ環境は
Fujitsu PRIMERGY RS200 ×16台
Xeon 3.20GHz/L3:1MB ×2
2GBメモリ
146.8GB HDD ×2(RAID1利用のため実効はこの半分)
73GB HDD ×5(RAID5利用のため実効はこの4/5)
こんな感じです。
339お願いします
2009/06/19(金) 20:10:05 見直したんですがやっぱり出てくる答えは0.000488になって正しくないです。
340デフォルトの名無しさん
2009/06/19(金) 21:01:54341デフォルトの名無しさん
2009/06/19(金) 21:04:22 MPIがおかしいと思うなら、そんな積分した答えじゃなく、1とか単純な値を送信しろよ。
自分で問題切り分ける意思がゼロだな。
自分で問題切り分ける意思がゼロだな。
342デフォルトの名無しさん
2009/06/20(土) 04:41:49 本当にコピペしたコードそのままで打ち間違いが無いのなら、
まずはMPI部分を全部削って1CPUで動かしてみろよ。
まずはMPI部分を全部削って1CPUで動かしてみろよ。
343お願いします
2009/06/20(土) 12:43:17 MPI部分なしでやれば0.333でます
344デフォルトの名無しさん
2009/06/20(土) 18:44:42 Mac用のMPIはどこで手に入りますか?
345デフォルトの名無しさん
2009/06/20(土) 18:45:15 MacにはOpenMPIが入っているが
346デフォルトの名無しさん
2009/06/21(日) 07:22:30 通常のGigabitイーサネットとInfiniBandではMPIを使った際にどの程度差が出ますか?
もちろんプログラムにもよるでしょうが、InfiniBandに投資するだけの価値はありますか?
もちろんプログラムにもよるでしょうが、InfiniBandに投資するだけの価値はありますか?
347デフォルトの名無しさん
2009/06/27(土) 19:20:41 >>346
自分のGigabit環境で、MPIプログラムの通信部分と演算部分の比率を出してみれば、
InfiniBand環境でどれくらい改善するか、予測が付くだろう。
あと、B/F値への要求が高いコードでは、マルチコア環境で、メモリアクセス速度により、
並列化効率がでない場合も多いので、この点も注意した方がいい。
自分のGigabit環境で、MPIプログラムの通信部分と演算部分の比率を出してみれば、
InfiniBand環境でどれくらい改善するか、予測が付くだろう。
あと、B/F値への要求が高いコードでは、マルチコア環境で、メモリアクセス速度により、
並列化効率がでない場合も多いので、この点も注意した方がいい。
348デフォルトの名無しさん
2009/07/06(月) 06:59:07 MPIの本を読むとSendとReceiveって奇数ノードと偶数ノードそれぞれ順序を逆にして書かないとデッドロックが発生するようなのですが、
今まで、すべてのノードでSendを先に書いていたのですが、とくにデッドロックしたことはありません。
OSか何かに依存するのでしょうか?
今まで、すべてのノードでSendを先に書いていたのですが、とくにデッドロックしたことはありません。
OSか何かに依存するのでしょうか?
349デフォルトの名無しさん
2009/07/06(月) 21:10:54 MPI_SendとMPI_Recvは送受信が完了するまで戻ってきませんが。
MPIの仕様なのでOSには依存しません。
別に偶数ノードと奇数ノードとか関係ありません。
送信と受信が対になって実行されないといけないだけです。
ノンブロッキング通信なら送信、受信動作が完了しなくても戻ってきますが、
別の関数で送受信が完了しているか確認をとる必要があります。
MPIの仕様なのでOSには依存しません。
別に偶数ノードと奇数ノードとか関係ありません。
送信と受信が対になって実行されないといけないだけです。
ノンブロッキング通信なら送信、受信動作が完了しなくても戻ってきますが、
別の関数で送受信が完了しているか確認をとる必要があります。
350デフォルトの名無しさん
2009/07/06(月) 21:46:09 >>348
どの本のどういう記述よ
どの本のどういう記述よ
351デフォルトの名無しさん
2009/07/07(火) 14:04:08 そういえば、標準モードでMPIが勝手にバッファリングモードを使用していたら対応する受信が起動ていなくても戻ってくるか。
そういう意味ではMPIの実装依存でデッドロックが起きていないということになるわな。
そういう意味ではMPIの実装依存でデッドロックが起きていないということになるわな。
352デフォルトの名無しさん
2009/07/07(火) 16:32:14 n 行 n 列 の整数二次元配列 A(i, j) のうち、i = 1 の成分
(A(1, 1), A(1, 2), A(1, 3), ..., A(1, n-1), A(1, n)) だけを
j = 1 から m 個ローカルプロセスの B(j) に集めたいと思います。
そこで、mpi_gather を使って以下のように書いたのですが、
このままでは m/n 個しか B(j) に渡されないようなのです。
call mpi_gather(A(1, 1), m, mpi_integer, B(1), m, mpi_integer, 0, mpi_comm_world, ierr)
fortran で書いていますので、この原因がメモリ上でのデータの
並び方(データがメモリ上で A(1, 1), A(2, 1), A(3, 1), ...,
A(n, 1), A(1, 2), ... と並ぶ)なのだろうと思いますが、もし
飛び飛びでデータを選ぶ(j だけ m 個 ローカルに渡す)方法を
ご存じでしたら教えて頂けないでしょうか?
初心的な質問ですみません。
(A(1, 1), A(1, 2), A(1, 3), ..., A(1, n-1), A(1, n)) だけを
j = 1 から m 個ローカルプロセスの B(j) に集めたいと思います。
そこで、mpi_gather を使って以下のように書いたのですが、
このままでは m/n 個しか B(j) に渡されないようなのです。
call mpi_gather(A(1, 1), m, mpi_integer, B(1), m, mpi_integer, 0, mpi_comm_world, ierr)
fortran で書いていますので、この原因がメモリ上でのデータの
並び方(データがメモリ上で A(1, 1), A(2, 1), A(3, 1), ...,
A(n, 1), A(1, 2), ... と並ぶ)なのだろうと思いますが、もし
飛び飛びでデータを選ぶ(j だけ m 個 ローカルに渡す)方法を
ご存じでしたら教えて頂けないでしょうか?
初心的な質問ですみません。
353デフォルトの名無しさん
2009/07/07(火) 19:07:19354デフォルトの名無しさん
2009/07/07(火) 20:32:32 >> 353
神様、仏様、353様!
早速お教え頂きありがとうございました。
神様、仏様、353様!
早速お教え頂きありがとうございました。
355デフォルトの名無しさん
2009/07/24(金) 16:46:11 MPICH2とOpenMPIを使い分ける基準ってなんなのだろう
構文の違いと通信のしかたの違いとでどういう特徴があるのか・・・
構文の違いと通信のしかたの違いとでどういう特徴があるのか・・・
356355
2009/07/24(金) 16:49:25 ちなみに自分のはMac OS XなのでOpenMPIが標準で入っているそうですが
(XgridもOpenMPIを通して使うそうですね)
MPICH2のほうはどうなのか、ちと気になりましてw
(XgridもOpenMPIを通して使うそうですね)
MPICH2のほうはどうなのか、ちと気になりましてw
357デフォルトの名無しさん
2009/09/06(日) 10:48:01 mpif77 でコンパイルは出来るのですが、
実行時 に mpirun -np 4 tttt と入力すると
error while loading shared libraries : libompi_f77.so.o cannot open云々
となって動きません。libにはあるんですが、どうしたらよいか教えて下さい
実行時 に mpirun -np 4 tttt と入力すると
error while loading shared libraries : libompi_f77.so.o cannot open云々
となって動きません。libにはあるんですが、どうしたらよいか教えて下さい
358デフォルトの名無しさん
2009/09/06(日) 11:37:43 >>357
実行時に .so ファイルを探したが見つからないというエラーなので適当な設定を加える必要がある。
libompi_f77.so のあるディレクトリを仮に /opt/lib とすると
a) コンパイル時に -Wl,-rpath,/opt/lib オプションを指定する
b) 実行時に環境変数 LD_LIBRARY_PATH=/opt/lib を設定する
c) /etc/ld.so.conf に /opt/lib を追加して ldconfig コマンドを root 権限で実行する
のどれかをすればいいと思われ。
a) は gcc のオプションで他のコンパイラにも同じようなオプションがある(はず)。
b) の環境変数の指定方法はあなたが使っているシェル(bash とか tcsh とか)によって違うので調べて。
c) は Linux の方法で、他の OS だとファイル名が違うかも知れない。
実行時に .so ファイルを探したが見つからないというエラーなので適当な設定を加える必要がある。
libompi_f77.so のあるディレクトリを仮に /opt/lib とすると
a) コンパイル時に -Wl,-rpath,/opt/lib オプションを指定する
b) 実行時に環境変数 LD_LIBRARY_PATH=/opt/lib を設定する
c) /etc/ld.so.conf に /opt/lib を追加して ldconfig コマンドを root 権限で実行する
のどれかをすればいいと思われ。
a) は gcc のオプションで他のコンパイラにも同じようなオプションがある(はず)。
b) の環境変数の指定方法はあなたが使っているシェル(bash とか tcsh とか)によって違うので調べて。
c) は Linux の方法で、他の OS だとファイル名が違うかも知れない。
359デフォルトの名無しさん
2009/09/06(日) 13:37:28 サンプルプログラムを実行することができました。有難うございます
360デフォルトの名無しさん
2009/09/18(金) 16:07:43 rank数が0から始まるとちょっと使いにくいんですが、
勝手に
include 'mpif.h'
call mpi_init(ierr)
call mpi_comm_rank(mpi_comm_world,np,ierr)
call mpi_comm_size(mpi_comm_world,npe,ierr)
np=np+1
ってやって使っても問題ないでしょうか?
勝手に
include 'mpif.h'
call mpi_init(ierr)
call mpi_comm_rank(mpi_comm_world,np,ierr)
call mpi_comm_size(mpi_comm_world,npe,ierr)
np=np+1
ってやって使っても問題ないでしょうか?
361デフォルトの名無しさん
2009/09/18(金) 18:29:39 好きにせぇや
362デフォルトの名無しさん
2009/09/19(土) 00:13:13 すいません、Visual studioのスレで聞いたんですが、
こっちで聞いた方が良いとのことでこっちにきました。
Visual studio2008+MPICH2+ifortranを使ってます。
ブレークポイントやステップ実行などが使いたいのですが、
デバッグ開始にすると「デバッグ情報が見つからないか、または一致しません」となります。
http://msdn.microsoft.com/ja-jp/library/ms164731.aspx
上のサイトにプロジェクトのプロパティのデバッグで[起動するデバッガ] を選択しろとありますが、
デバッガー-デバッガーの種類 しかそれらしいものが見当たらず、
また、グレーの文字になっていて変更できそうにありません(ネイティブのみとなっています)
ちなみにデバッグなしで開始なら問題なく実行できますが…
今までCygwin上でwrite文を打ち込みながら原始的にやっていたので、
さっぱりVSの仕組みが分かっていなくて要領を得ないかと思うんですが、
どうすればデバッグモードで実行できるでしょうか?お手数ですが、アドバイスを頂くにあたって
足りない情報などあればご指摘ください。
こっちで聞いた方が良いとのことでこっちにきました。
Visual studio2008+MPICH2+ifortranを使ってます。
ブレークポイントやステップ実行などが使いたいのですが、
デバッグ開始にすると「デバッグ情報が見つからないか、または一致しません」となります。
http://msdn.microsoft.com/ja-jp/library/ms164731.aspx
上のサイトにプロジェクトのプロパティのデバッグで[起動するデバッガ] を選択しろとありますが、
デバッガー-デバッガーの種類 しかそれらしいものが見当たらず、
また、グレーの文字になっていて変更できそうにありません(ネイティブのみとなっています)
ちなみにデバッグなしで開始なら問題なく実行できますが…
今までCygwin上でwrite文を打ち込みながら原始的にやっていたので、
さっぱりVSの仕組みが分かっていなくて要領を得ないかと思うんですが、
どうすればデバッグモードで実行できるでしょうか?お手数ですが、アドバイスを頂くにあたって
足りない情報などあればご指摘ください。
363デフォルトの名無しさん
2009/09/24(木) 17:43:11364デフォルトの名無しさん
2009/10/13(火) 21:53:16 質問です。fortranで配列の要素数をプロセス数に応じて決めたいのですが、
どのように宣言したらよいのでしょうか?allocateを使うしかないでしょうか?
77では無理ですか?
どのように宣言したらよいのでしょうか?allocateを使うしかないでしょうか?
77では無理ですか?
365デフォルトの名無しさん
2009/10/14(水) 11:12:10 call mpiplay(n)
subroutine mpiplay(n)
real data(n)
とか、かな。Initializeやfinalizeはメイン階層でしてね。
もっとも今は77とそれ以降を混ぜて書いても解釈してくれるから
allocate でがんがんやっても良いと思うけど。
subroutine mpiplay(n)
real data(n)
とか、かな。Initializeやfinalizeはメイン階層でしてね。
もっとも今は77とそれ以降を混ぜて書いても解釈してくれるから
allocate でがんがんやっても良いと思うけど。
366デフォルトの名無しさん
2009/10/14(水) 19:51:56 >>365
なるほど。動的配列を使うまでもなくそれでいいのですか。
ありがとうございます。もう一つお聞きしたいのですが、
メインでもその配列を使いたいときはどうすればよいでしょう?
rank等の取得の前に宣言部が来るのでそのやり方では出来ないでしょうか?
ダミー的にメインを作って、本当のメインをサブルーチンとして呼ぶとか?
なるほど。動的配列を使うまでもなくそれでいいのですか。
ありがとうございます。もう一つお聞きしたいのですが、
メインでもその配列を使いたいときはどうすればよいでしょう?
rank等の取得の前に宣言部が来るのでそのやり方では出来ないでしょうか?
ダミー的にメインを作って、本当のメインをサブルーチンとして呼ぶとか?
367365
2009/10/15(木) 05:59:50 365の例では サブルーチンでの型宣言 integer n とMPI呼出呪文w include 'mpif.h' が抜けてたね。
呪文はメイン階層でもする必要があるけど。
>>366
配列の要素数を、例えばプロセス数の100倍にしたければ、
program mpiwrapper
(略;なんか行があったりなかったり)
include 'mpif.h'
(略、宣言部とか)
call mpi_init(ierr)
(略)
call mpi_comm_size(mpi_comm_world,nprocs,ierr)
n=nprocs*100
call mpiplay(n)
(略)
call mpi_finalize(ierr)
stop
end program mpiwrapper
subroutine mpiplay(n)
include 'mpif.h'
integer n
real data(n)
(略)
call mpi_comm_rank(mpi_comm_world,myrank,ierr)
(略;分割対象のループがいっぱい。初期化とかiteration処理とか)
(略その2;data配列をmainにお持ち帰りできないので書き出しとかはこの階層で)
return
end subroutine mpiplay
かな?wrapperの表現が適切かはちと疑問だけど、まあここではOKということで・・・。
この例だと変数の初期値代入から書き出し保存などは全部 mpiplay(n)階層ですることになるね。
呪文はメイン階層でもする必要があるけど。
>>366
配列の要素数を、例えばプロセス数の100倍にしたければ、
program mpiwrapper
(略;なんか行があったりなかったり)
include 'mpif.h'
(略、宣言部とか)
call mpi_init(ierr)
(略)
call mpi_comm_size(mpi_comm_world,nprocs,ierr)
n=nprocs*100
call mpiplay(n)
(略)
call mpi_finalize(ierr)
stop
end program mpiwrapper
subroutine mpiplay(n)
include 'mpif.h'
integer n
real data(n)
(略)
call mpi_comm_rank(mpi_comm_world,myrank,ierr)
(略;分割対象のループがいっぱい。初期化とかiteration処理とか)
(略その2;data配列をmainにお持ち帰りできないので書き出しとかはこの階層で)
return
end subroutine mpiplay
かな?wrapperの表現が適切かはちと疑問だけど、まあここではOKということで・・・。
この例だと変数の初期値代入から書き出し保存などは全部 mpiplay(n)階層ですることになるね。
368デフォルトの名無しさん
2009/10/15(木) 06:29:09 そんなわけで、fortran77コンパチで且つ前もって配列サイズを決めなくて良い、というのは
できるけど。めんどいよねw. 自分自身はコマンドラインの引数を使いたい、
計算コード自身は77で書いてしまった、の2つの理由で
メイン階層のWrapperをCでつくる事が多いけど。上の例は良くつかう。
やはり、というか配列サイズが前もって決まっていないタイプのコードは
最適化が抑制されるのか、遅いね。まあいちいちコード編集&コンパイルの
手間がかからないから楽といえば楽だけど。
できるけど。めんどいよねw. 自分自身はコマンドラインの引数を使いたい、
計算コード自身は77で書いてしまった、の2つの理由で
メイン階層のWrapperをCでつくる事が多いけど。上の例は良くつかう。
やはり、というか配列サイズが前もって決まっていないタイプのコードは
最適化が抑制されるのか、遅いね。まあいちいちコード編集&コンパイルの
手間がかからないから楽といえば楽だけど。
369デフォルトの名無しさん
2009/10/15(木) 06:37:31370デフォルトの名無しさん
2009/10/17(土) 05:54:20371デフォルトの名無しさん
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まで)
基本的に通信回数は減らした方がパフォは上がるという認識で良いですよね?
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デフォルトの名無しさん
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
隣接関係(最近接の粒子番地)がころころかわるから厄介そう。
前半最後の2行が王道だとおもう。型の同じ変数は一つの配列名のに付けてから一度に送受信。
いっそ、最初からvelpos(6,m)みたいに位置や速度の情報を一つの大きめの配列にまとめちゃう方が
いいかもね。vi(m) とか sed だと、
1,$s/pos(1/velposi(4/g
1,$s/pos(m/velposi(3+m/g
みたいな感じでわりと一括置換が効きやすそうだし。
・・・・・恐いけどw
373デフォルトの名無しさん
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とかの話あまり分かりません。
でもそれで置換出来るならプログラム書く効率あがりそうですね。覚えた方がいいと思いつつ…
統合環境がそういう複雑な置換装備してくれたらいいのにな。甘えすぎですか。
うーん、やっぱそうですか。たびたびありがとうございます。
ちなみに代入は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デフォルトの名無しさん
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
例では第一添え字が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デフォルトの名無しさん
2009/10/18(日) 09:39:35 第一添字(右端)
↓
第一添字(左端)
↓
第一添字(左端)
376デフォルトの名無しさん
2009/10/20(火) 06:46:25 インテルコンパイラだけど、MPI使うには、インテルの売ってるやつを使わないといけないの?
377デフォルトの名無しさん
2009/10/20(火) 22:03:31 何でもええ。
ライブラリがリンクできれば。
ライブラリがリンクできれば。
378デフォルトの名無しさん
2009/10/21(水) 02:41:08 MPI はコンパイラもだけど mpirun がないと。
自宅で文法チェックするだけなら -I -L
自宅で文法チェックするだけなら -I -L
379デフォルトの名無しさん
2009/10/22(木) 02:52:21 max plunk institute !
380デフォルトの名無しさん
2009/10/25(日) 06:45:10 >>374
遅くなったけど本当にどうもありがとう。うまくできました。
ロードバランス大して考えずに領域の広さを均等にぶった切ったけどcore2quadで
3倍強の加速率でした。動的に負荷を割り振ったらもう少し早くなりそうかな?
遅くなったけど本当にどうもありがとう。うまくできました。
ロードバランス大して考えずに領域の広さを均等にぶった切ったけどcore2quadで
3倍強の加速率でした。動的に負荷を割り振ったらもう少し早くなりそうかな?
381デフォルトの名無しさん
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倍
ぐらいに遅くなったよ。
購入したのだが、ここまでスレッド数が多くなるとメモリ帯域か何かが溢れて
評価しないと使えないな。
同じプログラムが、
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だともう少しマシな数字がでてくるのかな?
1 thread あたりの作業量は 4つの時に比べて0.9*4/8=45%くらいの残念くんだった、って事?
職場での印象では mpirun がメモリアクセスのスケジューリングを
うまくさばいてくれていないような気はしたな。気がしただけで検証もなにもしてないけど。
やはり分散メモリのシステムとは根本的に違う、という事なのだろうな。
・・・・OpenMPだともう少しマシな数字がでてくるのかな?
383デフォルトの名無しさん
2009/10/26(月) 06:42:32384382
2009/10/26(月) 07:00:00 OpenMPはデフォだとうろうろするのは知ってたけど。
MPIも固定しないのか・・・知らんかった・・・。
MPIも固定しないのか・・・知らんかった・・・。
385デフォルトの名無しさん
2009/10/26(月) 09:46:19 windowsだとOSがウロウロさせるんだけど。
高負荷のシングルスレッドを実行させると全CPUが12%程度になるよ(8core)。
LinuxでもたまにCPUを乗り換えるけどwindowsほど頻繁じゃない。
高負荷のシングルスレッドを実行させると全CPUが12%程度になるよ(8core)。
LinuxでもたまにCPUを乗り換えるけどwindowsほど頻繁じゃない。
386381
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です。
実行したらどうなるんだろうと思った。
現在1〜8プロセスの全てのパターンをベンチ中。多分終わるのは明日。
> core i7か・・・いいな。このお金持ちめw いくらだった?
再利用などしたので、マザボとメモリとCPUしか買ってませんが、46,675円
> 1 thread あたりの作業量は 4つの時に比べて0.9*4/8=45%くらいの残念くんだった、って事?
そういう事です。
> CPU とプロセス(またはスレッド)のアフィニティはどうしてる?
そのあたり詳しくないのでほとんど設定変更せず使ってます。
ちなみにOpenMPI/CentOS5.4です。
387デフォルトの名無しさん
2009/10/27(火) 16:27:05 Pentium4ほどパイプラインがスカスカじゃないからHTの効能はあまりないんじゃないかな。
マルチ「スレッド」のプログラムならメモリ資源などの共用が多くHTの効果がでるかもしれないけど、
マルチ「プロセス」のMPIじゃ同一コアでキャッシュとメモリ帯域の争奪戦をするだけで効率低下すると思うけど。
マルチ「スレッド」のプログラムならメモリ資源などの共用が多くHTの効果がでるかもしれないけど、
マルチ「プロセス」のMPIじゃ同一コアでキャッシュとメモリ帯域の争奪戦をするだけで効率低下すると思うけど。
388デフォルトの名無しさん
2009/10/28(水) 02:43:34 Visual C++2008でMPIを使いたいのですが、何をインストールすればよいのでしょうか?
389デフォルトの名無しさん
2009/10/28(水) 02:57:18 HTは結局コアが4つしかないから、メモリ転送がネックになる場合だと、パフォーマンスが落ちるよ。
アフィニティで固定したとしても、論理コアが物理コアとリンクしているとは限らないだろうから、
コア間で依存性があった場合は注意が必要だと思う。
HTは簡単に言うと、あいているパイプラインを有効に使うことだから、2つの処理を同じコアで計算させていることだからね。
ただ、3次キャッシュが大きいので、コアが増えることでプリフェッチの恩恵は受けやすくなるかも。
アフィニティで固定したとしても、論理コアが物理コアとリンクしているとは限らないだろうから、
コア間で依存性があった場合は注意が必要だと思う。
HTは簡単に言うと、あいているパイプラインを有効に使うことだから、2つの処理を同じコアで計算させていることだからね。
ただ、3次キャッシュが大きいので、コアが増えることでプリフェッチの恩恵は受けやすくなるかも。
390デフォルトの名無しさん
2009/10/28(水) 02:59:50391デフォルトの名無しさん
2009/10/28(水) 03:24:38 いわれるとそりゃそうだわ、なんだけど
383のを見るまで気づかんかったw
OpenMPだと dplace や taskset で固定できるけど、
これはハードベンダが作った奴だしねぇ。MPIで固定するのはどうするの(特にWin機)?
383のを見るまで気づかんかったw
OpenMPだと dplace や taskset で固定できるけど、
これはハードベンダが作った奴だしねぇ。MPIで固定するのはどうするの(特にWin機)?
392381
2009/10/28(水) 21:52:47393デフォルトの名無しさん
2009/10/29(木) 01:33:12 >>392
それだとメモリアクセスが一番のボトルネックじゃない?
ちょうど5コアでいい感じでメモリ帯域を食ってくれて、それ以下だと使い切れなくて、
それ以上だといっぱいになってしまう。
という感じに思える。
それだとメモリアクセスが一番のボトルネックじゃない?
ちょうど5コアでいい感じでメモリ帯域を食ってくれて、それ以下だと使い切れなくて、
それ以上だといっぱいになってしまう。
という感じに思える。
394デフォルトの名無しさん
2009/10/29(木) 03:41:16 そんな感じっぽいね。381氏の実験に感謝。
最近はベクトル化を意識してループを短くして,(メモリでかくなったから)配列に中間結果を格納して・・・
というのがスパコンでは流行、というか推奨されるけど、HTでは
ループ内での処理が冗長なベクトル化をあまり意識してないw古いタイプの
コードが並列化では利得が大きいかも・・という事なのかな。
いまはCacheも大きいからたいがいループ内が長くても収まるし。
最近はベクトル化を意識してループを短くして,(メモリでかくなったから)配列に中間結果を格納して・・・
というのがスパコンでは流行、というか推奨されるけど、HTでは
ループ内での処理が冗長なベクトル化をあまり意識してないw古いタイプの
コードが並列化では利得が大きいかも・・という事なのかな。
いまはCacheも大きいからたいがいループ内が長くても収まるし。
395デフォルトの名無しさん
2009/12/04(金) 22:16:21 mpiの勉強を始めたばかりの者です。今、Bcastをやっていますが、どうにも解らなくなりました。ご指導ください。
使っているコンパイラー等はGfortran、open mpiです。解らなくなったのは、メインでBcastを使っても問題ないのですが、
サブルーチンでBcastを使うとエラーが発生してしまうんです。なんででしょうか?ちなみにプログラムは以下のとおりなんですが。
*
MPI 宣言文
*
IF(Nrank.EQ.0) NCP1=1000
CALL MPI_BCAST(NCP1,1,MPI_integer,0,MPI_COMM_WORLD,ierr)
*
KKK = 100
NNN = NCP1 + Nrank*KKK
PRINT *, NNN
これは問題なく動きますが、
IF(Nrank.eq.0) NCP1 = 1000
CALL MPI_BCAST(NCP1,1,MPI_integer,0,MPI_COMM_WORLD,ierr)
部分を IF(Nrank.EQ.0) CALL MAINSUBとし、サブルーチンを
SUBROUTINE MAINSUB
IMPLICIT REAL*8(A-H,O-Z)
COMMON /ACTIVE/ NCP1
*
NCP1 = 1000
CALL MPI_BCAST(NCP1,1,MPI_integer,0,MPI_COMM_WORLD,ierr)
*
RETURN
END
として、コンパイルし実行すると、 1000、 100、200、300と画面に出力され、notice thatjob rank 1 with PID 4737...の
メッセージが表示されますが、何故か原因が解らないのです。よろしくお願いします。
使っているコンパイラー等はGfortran、open mpiです。解らなくなったのは、メインでBcastを使っても問題ないのですが、
サブルーチンでBcastを使うとエラーが発生してしまうんです。なんででしょうか?ちなみにプログラムは以下のとおりなんですが。
*
MPI 宣言文
*
IF(Nrank.EQ.0) NCP1=1000
CALL MPI_BCAST(NCP1,1,MPI_integer,0,MPI_COMM_WORLD,ierr)
*
KKK = 100
NNN = NCP1 + Nrank*KKK
PRINT *, NNN
これは問題なく動きますが、
IF(Nrank.eq.0) NCP1 = 1000
CALL MPI_BCAST(NCP1,1,MPI_integer,0,MPI_COMM_WORLD,ierr)
部分を IF(Nrank.EQ.0) CALL MAINSUBとし、サブルーチンを
SUBROUTINE MAINSUB
IMPLICIT REAL*8(A-H,O-Z)
COMMON /ACTIVE/ NCP1
*
NCP1 = 1000
CALL MPI_BCAST(NCP1,1,MPI_integer,0,MPI_COMM_WORLD,ierr)
*
RETURN
END
として、コンパイルし実行すると、 1000、 100、200、300と画面に出力され、notice thatjob rank 1 with PID 4737...の
メッセージが表示されますが、何故か原因が解らないのです。よろしくお願いします。
396デフォルトの名無しさん
2009/12/04(金) 22:49:20 >>395
サブルーチンMAINSUBの中でmpif.hのインクルードしてる?
サブルーチンMAINSUBの中でmpif.hのインクルードしてる?
397デフォルトの名無しさん
2009/12/05(土) 07:53:23 395 ですがやっていません。やってみます。
398デフォルトの名無しさん
2009/12/05(土) 08:04:52 395 ですが、動きました。どうも有難うございます。
399デフォルトの名無しさん
2009/12/12(土) 13:25:37 WindowsでMPIをつこうたプログラムをコンパイルしたいのですが、
Windows XP+Vistal C++ 2008 Express以外に、どれをインストールすればよいのでしょうか?
Windows XP+Vistal C++ 2008 Express以外に、どれをインストールすればよいのでしょうか?
400デフォルトの名無しさん
2009/12/12(土) 23:30:24 MPICH
401デフォルトの名無しさん
2009/12/20(日) 02:28:58 MPIってユーザーグループの会とか友の会とかないんですかね??
もしなかったら作ってみたいなっと思いまして.2ヶ月に一度くらい勉強会とかライトニングトークしあう的な規模のもので.
もしなかったら作ってみたいなっと思いまして.2ヶ月に一度くらい勉強会とかライトニングトークしあう的な規模のもので.
402デフォルトの名無しさん
2009/12/20(日) 11:22:07 あんなもん、一旦意味がわかればマニュアル見るだけでOKなので
2ヶ月に一度とかタルいことしてたら、次の勉強会までにプログラムできるようになっている。
てか、それでできない人間だけ集まっても意味ないし、できる人間は参加してもタルいだけだろう。
2ヶ月に一度とかタルいことしてたら、次の勉強会までにプログラムできるようになっている。
てか、それでできない人間だけ集まっても意味ないし、できる人間は参加してもタルいだけだろう。
403デフォルトの名無しさん
2009/12/20(日) 11:52:25 プログラムのほとんどを1スレッドで走らせ、一部を並列計算させたい場合、
その一部以外を if(myrank==0) で囲えばいいの?
その一部以外を if(myrank==0) で囲えばいいの?
404デフォルトの名無しさん
2009/12/20(日) 13:09:48 うん、たいていそれでいいよ。
非並列処理部分の結果を並列部分で使いたい時だったら
ちゃんと伝達するのを忘れないように><
非並列処理部分の結果を並列部分で使いたい時だったら
ちゃんと伝達するのを忘れないように><
405デフォルトの名無しさん
2009/12/21(月) 05:10:55 ですよね
なんとなく「プログラムのほとんどが if 文」ってのが違和感なんだけど
他に書き方ないよね
なんとなく「プログラムのほとんどが if 文」ってのが違和感なんだけど
他に書き方ないよね
406デフォルトの名無しさん
2009/12/21(月) 09:37:58 そうそう、なんかif (myrank .....が冗長に出てくるのがなんかイヤw
並列の出入口でやることが決まっていれば関数に押し込めるけど、そういう事ってあまり多くないし
引数受渡し部分でちょんぼすることあるし・・・><
並列の出入口でやることが決まっていれば関数に押し込めるけど、そういう事ってあまり多くないし
引数受渡し部分でちょんぼすることあるし・・・><
407デフォルトの名無しさん
2009/12/23(水) 09:49:25 現在勉強中で、Send、Recvを使って簡単なプログラムを作って動かしていますが、送るデータの個数が
500以下だと問題なく送受でき、送受結果を画面に表示できるのですが、500個を超えると送受結果が
画面に表示できません。プログラムが暴走したような状態になってしまうんです。
データの型は倍精度浮動小数点なんですが、解決策は無いでしょうか?使用している
mpiは openmpiです。
500以下だと問題なく送受でき、送受結果を画面に表示できるのですが、500個を超えると送受結果が
画面に表示できません。プログラムが暴走したような状態になってしまうんです。
データの型は倍精度浮動小数点なんですが、解決策は無いでしょうか?使用している
mpiは openmpiです。
408デフォルトの名無しさん
2009/12/23(水) 10:52:26 受信側のメモリを確保しているのかと3秒問いつめたい
409デフォルトの名無しさん
2009/12/23(水) 12:40:54 407ですが、受け側でも送り側と同じ配列だけメモリーは設定しております。
当初は配列をアロケートしていましたが、疑問に思い、配列を設定して
再コンパイルして実行しても同じなんですが。
当初は配列をアロケートしていましたが、疑問に思い、配列を設定して
再コンパイルして実行しても同じなんですが。
410デフォルトの名無しさん
2009/12/23(水) 13:05:15 他人に自分の意志を伝えられない奴が
コンピュータに自分の意志を伝えるプログラミングができるわけがない。
ソースもなしに・・・エスパーも求もと書いとけ。
コンピュータに自分の意志を伝えるプログラミングができるわけがない。
ソースもなしに・・・エスパーも求もと書いとけ。
411デフォルトの名無しさん
2009/12/27(日) 20:24:15 openfabrics.orgがつながらない、、、
412デフォルトの名無しさん
2009/12/28(月) 22:57:30 先日、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でも同様なんですが、どうやった良いのか原因も何も解りません。どうかご指導ください
プログラムは
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でも同様なんですが、どうやった良いのか原因も何も解りません。どうかご指導ください
413デフォルトの名無しさん
2009/12/28(月) 23:06:52 失礼しました、
Scatterで...,b(1),20,の後にMPI_DOUBLE_Precision,を書き漏らしております。
質問時の記入ミスです。すみません。
Scatterで...,b(1),20,の後にMPI_DOUBLE_Precision,を書き漏らしております。
質問時の記入ミスです。すみません。
414デフォルトの名無しさん
2010/01/06(水) 09:09:27 これで出力が出ます。
それと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
それと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
415デフォルトの名無しさん
2010/02/08(月) 17:39:36 PCだと大丈夫なんですが、大規模な計算機にジョブを投げたとき、
あるプロセスからの出力だけ途中で止まることがあります。
PCはintel fortran+mpich、大規模計算機はPGIfortran+Voltaire MPIです。
例えばプロセスごとにoutput00,output01,output02,output03のように
別のファイルに出力させているんですが、何かの拍子にいくつかが出力
されなくなったりします。ループの途中にbcastやbarrier等の同期があるので、
出力がないプロセスも計算そのものが停止しているということはないと思うのですが、
別のファイルや標準出力への出力も停止するのでうまく調べきれず、定かではありません。
かなり情報が少なくて申し訳ないのですが、考えうる原因、調査法、解決法もしくは
それに至らなくとも何か思いついたことでもあれば教えて頂けませんか?
あるプロセスからの出力だけ途中で止まることがあります。
PCはintel fortran+mpich、大規模計算機はPGIfortran+Voltaire MPIです。
例えばプロセスごとにoutput00,output01,output02,output03のように
別のファイルに出力させているんですが、何かの拍子にいくつかが出力
されなくなったりします。ループの途中にbcastやbarrier等の同期があるので、
出力がないプロセスも計算そのものが停止しているということはないと思うのですが、
別のファイルや標準出力への出力も停止するのでうまく調べきれず、定かではありません。
かなり情報が少なくて申し訳ないのですが、考えうる原因、調査法、解決法もしくは
それに至らなくとも何か思いついたことでもあれば教えて頂けませんか?
416デフォルトの名無しさん
2010/02/08(月) 19:42:12 >>415
2桁のファイル名を決める整数が
違うプロセスで同じ整数になっちゃって・・・とか
とびとびになってしまって、とかは無いのかな?
PCとスパコンで違う並列数でやっておかしくなったのなら
同じ並列数(2とかw)でやってテストしてみては?
CPUが自分のプロセス番号(例題でよく変数名Myrankになるやつ)
を決める部分のチェックとかもやるといいかも。
とあるシステムでちゃんと動いてるので415さんのMPIの
(データ転送とかの)部分にミスがあるとは考えにくい、
という推定からすると他にはあまり思いつかないな。
2桁のファイル名を決める整数が
違うプロセスで同じ整数になっちゃって・・・とか
とびとびになってしまって、とかは無いのかな?
PCとスパコンで違う並列数でやっておかしくなったのなら
同じ並列数(2とかw)でやってテストしてみては?
CPUが自分のプロセス番号(例題でよく変数名Myrankになるやつ)
を決める部分のチェックとかもやるといいかも。
とあるシステムでちゃんと動いてるので415さんのMPIの
(データ転送とかの)部分にミスがあるとは考えにくい、
という推定からすると他にはあまり思いつかないな。
417デフォルトの名無しさん
2010/02/09(火) 00:30:15 >>415
ノードローカルのディスクに書いてるとかいうオチならブチキレ
ノードローカルのディスクに書いてるとかいうオチならブチキレ
418デフォルトの名無しさん
2010/02/09(火) 02:35:40 でもたいていのシステムではジョブ終了時に一箇所にまとめるから
少なくともジョブ終了後にユーザーがファイルを移動する操作を
する必要は無いような気もするけど・・・・
その可能性は大いにあるね。
少なくともジョブ終了後にユーザーがファイルを移動する操作を
する必要は無いような気もするけど・・・・
その可能性は大いにあるね。
419デフォルトの名無しさん
2010/02/10(水) 18:08:04 問題のプロセスはファイル出力はせずに計算はちゃんと終了してるの?
mpi_finalizeを実行せずに終了してるのでは?
mpi_finalizeを実行せずに終了してるのでは?
420デフォルトの名無しさん
2010/02/10(水) 20:33:47 MPI_Finalizeとファイル出力はなんも関係ない
421デフォルトの名無しさん
2010/02/11(木) 10:58:34 MPI_Finalizeとファイル出力はなんも関係ない
=> MPIとファイル出力はなんも関係ない
=> このスレとファイル出力はなんも関係ない
=> MPIとファイル出力はなんも関係ない
=> このスレとファイル出力はなんも関係ない
422デフォルトの名無しさん
2010/02/11(木) 12:03:48 アホかいな
MPI_Finalizeしなくても、ファイル出力していればファイルはできてるし、ジョブが死ぬときにファイルがクローズされるからそのときにフラッシュされるわけで
MPI_Finalizeしないことがファイルができないこととは無関係だっつってんだよ。
MPI_Finalizeしなくても、ファイル出力していればファイルはできてるし、ジョブが死ぬときにファイルがクローズされるからそのときにフラッシュされるわけで
MPI_Finalizeしないことがファイルができないこととは無関係だっつってんだよ。
423デフォルトの名無しさん
2010/02/11(木) 21:49:22 LAM/MPIか何かでMPI_Finalizeを呼ばずにプログラムの実行を終了すると
次回以降のプログラムの実行がおかしくなることがあった希ガス。
確かlambootし直すと正しく実行できるようになったから、裏方のプロセスが
狂ったんだろうな。そういう状況ではファイル入出力が一部おかしくなっても
不思議ではない。
次回以降のプログラムの実行がおかしくなることがあった希ガス。
確かlambootし直すと正しく実行できるようになったから、裏方のプロセスが
狂ったんだろうな。そういう状況ではファイル入出力が一部おかしくなっても
不思議ではない。
424デフォルトの名無しさん
2010/02/11(木) 23:16:52 標準入出力はともかく、ファイル入出力をリダイレクトなんかしてませんよ。
途中でプロセスを頃したらmpichでもおかしくなることがあるが、あくまで通信に失敗すると言う次元のおかしくなり方だから。
途中でプロセスを頃したらmpichでもおかしくなることがあるが、あくまで通信に失敗すると言う次元のおかしくなり方だから。
425デフォルトの名無しさん
2010/02/11(木) 23:37:48 Finalizeを指定しなかったために通信がおかしくなって、
それによってプログラムの動き(例えば通信結果によってif文の判定を行っている)が変り、
ファイルへの書き出し部分を通過しなくなったというのは?
それによってプログラムの動き(例えば通信結果によってif文の判定を行っている)が変り、
ファイルへの書き出し部分を通過しなくなったというのは?
426デフォルトの名無しさん
2010/02/12(金) 01:10:41 先に他のジョブが終わるってこと?
つーか、その程度のミスならPCでマトモに動くとは思えないけど。
つーか、その程度のミスならPCでマトモに動くとは思えないけど。
427デフォルトの名無しさん
2010/02/12(金) 15:46:16 他のジョブとは関係なく、
一つのジョブで、MPI_Finalizeを指定しないで終了するプロセスがあると
通信がおかしくなることがあったと思う。
一つのジョブで、MPI_Finalizeを指定しないで終了するプロセスがあると
通信がおかしくなることがあったと思う。
428デフォルトの名無しさん
2010/02/13(土) 20:26:46 >>29
ん?じゃぁ宛先はドコに置くん?
ん?じゃぁ宛先はドコに置くん?
429デフォルトの名無しさん
2010/02/13(土) 21:14:35430デフォルトの名無しさん
2010/02/19(金) 13:33:36 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って言われました
どうすればいいの?
N_local = N_global / numprocs;
double u_new[N_local + 2], u_old[N_local + 2];
こうやったら、Integer constant expression requiredって言われました
どうすればいいの?
431デフォルトの名無しさん
2010/02/19(金) 19:29:59432デフォルトの名無しさん
2010/03/20(土) 18:01:31 三次元空間での拡散方程式の解法でお薦めのものを教えてください。
格子は150x150x150で、線形の拡散方程式です。
格子は150x150x150で、線形の拡散方程式です。
433デフォルトの名無しさん
2010/03/24(水) 06:27:04 自分で作るw
・・・姫野ベンチって計算そのものはラプラスかポアッソンソルバーだったような気がする。
MPI版あったような・・・気がする。気がする、ばかりでなんだが。
それを元にして、というのも。
ライセンス的にアリなのかわからないけど理研(?)の人に聞いてみよう!
・・・姫野ベンチって計算そのものはラプラスかポアッソンソルバーだったような気がする。
MPI版あったような・・・気がする。気がする、ばかりでなんだが。
それを元にして、というのも。
ライセンス的にアリなのかわからないけど理研(?)の人に聞いてみよう!
434デフォルトの名無しさん
2010/03/24(水) 10:20:58 コンパイルオプションで倍精度を指定した場合ってmpiの関数が送受信する
データはどうなりますか?書き換えが必要ですか?
データはどうなりますか?書き換えが必要ですか?
435デフォルトの名無しさん
2010/03/24(水) 13:18:17 >>434
Intel Fortran では要った、というか回避策を見つけ切れなかった。しょうがないので、
自分は#if つかってMPI通信部分を単精度用と倍精度用の2種類作って
そのうちの一つだけを使うように、#define 一行いじれば済むようににしたけど
・・・・忘れたwときがイヤなのであまり満足していない。
プリプロセスもクレバーに使えばコンパイル時に
とあるオプションが使われたときにだけONになるように出来るハズだけど
使い方がいまいちわからんw
この部分はコンパイラのベンダ依存性もあるからあまり突き詰めても
しょうがないきがするので・・・・便乗だけど、賢者の人カモン!
Intel Fortran では要った、というか回避策を見つけ切れなかった。しょうがないので、
自分は#if つかってMPI通信部分を単精度用と倍精度用の2種類作って
そのうちの一つだけを使うように、#define 一行いじれば済むようににしたけど
・・・・忘れたwときがイヤなのであまり満足していない。
プリプロセスもクレバーに使えばコンパイル時に
とあるオプションが使われたときにだけONになるように出来るハズだけど
使い方がいまいちわからんw
この部分はコンパイラのベンダ依存性もあるからあまり突き詰めても
しょうがないきがするので・・・・便乗だけど、賢者の人カモン!
436デフォルトの名無しさん
2010/03/24(水) 21:28:25 面倒くさいのでMPI_BYTEで送ってる。
個数を配列の長さ*sizeof(TYPE)にして。
fortranでこんなことができるか知らんけど。
エンディアンがあってないと大変なことになるが気にしない。
個数を配列の長さ*sizeof(TYPE)にして。
fortranでこんなことができるか知らんけど。
エンディアンがあってないと大変なことになるが気にしない。
437435
2010/03/25(木) 03:25:12 賢者あらわる。なるほど。ためしに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 は単精度か倍精度かの判定用のダミー、のつもり。
値が空だとなんか気持ちがわるいのでてきとうな値を放りこんでみた。意味はない。
real r
r = 1.0
if sizeof(r) .eq. 8 then
call mpi_send(...,mpi_double,....)
else
call mpi_send(...,mpi_float,....)
endif
をつくってみたけど、コンパイル時のオプションで振舞がちゃんと変わった。
例では r は単精度か倍精度かの判定用のダミー、のつもり。
値が空だとなんか気持ちがわるいのでてきとうな値を放りこんでみた。意味はない。
438434
2010/03/26(金) 17:48:06 >>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)
ありがとうございます!出来るんですね。
>>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)
439436
2010/03/26(金) 19:38:08 俺がやってるのは
double a[N];
MPI_Send(... N, MPI_DOUBLE, ...)
の代わりに
MPI_Send(... N*sizeof(a[0]), MPI_BYTE ...)
なんだが。
これだとdoubleの代わりが単精度だろうが倍精度だろうが複素数だろうが構造体だろうが送れる。
>>437だと新しい型を増やす度に条件分岐が増える。
double a[N];
MPI_Send(... N, MPI_DOUBLE, ...)
の代わりに
MPI_Send(... N*sizeof(a[0]), MPI_BYTE ...)
なんだが。
これだとdoubleの代わりが単精度だろうが倍精度だろうが複素数だろうが構造体だろうが送れる。
>>437だと新しい型を増やす度に条件分岐が増える。
440デフォルトの名無しさん
2010/03/27(土) 02:01:35 > MPI_Send(... N*sizeof(a[0]), MPI_BYTE ...)
なるほど!
なるほど!
441デフォルトの名無しさん
2010/03/27(土) 12:13:43 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
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
442デフォルトの名無しさん
2010/04/04(日) 09:08:14 ダグ番号って例題だと0だけど、複数の通信がシステム全体で走ってるときも0でいいのかな?
・・・宛先番号とか別に指定してるから、とある2つのプロセス間で2つ以上の通信が発生しなければ、
同じタグ番号でも困らないような気はするけど。
・・・宛先番号とか別に指定してるから、とある2つのプロセス間で2つ以上の通信が発生しなければ、
同じタグ番号でも困らないような気はするけど。
443デフォルトの名無しさん
2010/04/14(水) 10:18:20 ubuntu9.10にOpenMPIをapt-getでインストールしました 。
インテルコンパイラを使うには、apt-getではなく、自らコンパイルしないといけないのでしょうか?
何か設定で切り替える方法があれば教えてください
インテルコンパイラを使うには、apt-getではなく、自らコンパイルしないといけないのでしょうか?
何か設定で切り替える方法があれば教えてください
444デフォルトの名無しさん
2010/04/21(水) 01:33:13 http://arkouji.cocolog-nifty.com/blog/mpich2/index.html
ここの通りにやってサンプルを使った
円周率の計算まではできたんですけど
自分で書いたC, C++を動かすことができません
とりあえずプロジェクトをいじってるんですがそれでいいんでしょうか?
何か留意点などありますか?
ここの通りにやってサンプルを使った
円周率の計算まではできたんですけど
自分で書いたC, C++を動かすことができません
とりあえずプロジェクトをいじってるんですがそれでいいんでしょうか?
何か留意点などありますか?
445デフォルトの名無しさん
2010/04/21(水) 01:39:49 windows版のmpichはmingw gccでもリンクできるからgccで作った方が早い。
mpi自体の設定もLinuxの方が簡単。
mpi自体の設定もLinuxの方が簡単。
446デフォルトの名無しさん
2010/04/21(水) 10:35:03 最近勉強を始めました。
並列クイックソートを実装しようとしているのですが、実行時にエラーが出てしまいます。
とりあえず2個のプロセッサでやってみてるのですが、いったいどこがいけないのでしょうか?
http://codepad.org/13tw3pKS
アドバイスお願いします。
並列クイックソートを実装しようとしているのですが、実行時にエラーが出てしまいます。
とりあえず2個のプロセッサでやってみてるのですが、いったいどこがいけないのでしょうか?
http://codepad.org/13tw3pKS
アドバイスお願いします。
447デフォルトの名無しさん
2010/04/22(木) 00:58:42 >>446
で、技術料はいくら払うんだ?
で、技術料はいくら払うんだ?
448デフォルトの名無しさん
2010/04/30(金) 06:33:21 $200
449デフォルトの名無しさん
2010/05/10(月) 05:36:11 OpenMPIとMPICH、どちらをインストールしたらよいのでしょうか
それぞれの利点欠点を教えてください
それぞれの利点欠点を教えてください
450デフォルトの名無しさん
2010/06/12(土) 19:14:06 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 &
>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 &
451デフォルトの名無しさん
2010/06/12(土) 23:35:54 >>450
メッセージに書かれている通りのことをやればいいだけ
メッセージに書かれている通りのことをやればいいだけ
452デフォルトの名無しさん
2010/06/13(日) 04:24:41 >>451
ありがとうございました。確かに入力用にこれを指定すると出なくなりました。
しかし普通に入力ファイルをしていた場合は入力ファイルが読めずに、エラーが出たので、
このようにしたのですが、それはマルチノードの設定の問題でしょうか。
ありがとうございました。確かに入力用にこれを指定すると出なくなりました。
しかし普通に入力ファイルをしていた場合は入力ファイルが読めずに、エラーが出たので、
このようにしたのですが、それはマルチノードの設定の問題でしょうか。
453デフォルトの名無しさん
2010/06/13(日) 10:55:37 何をやったらどんなエラーが出たのか書けよ
454デフォルトの名無しさん
2010/06/16(水) 22:05:53 PhenomII x6 1090Tを3.2GHzから4GHzにOCして、MPIでバカ並列の数値計算
プログラムを走らせて 使ってたのだが、速度が出ないので調べてみた。
殆どOn cacheで動くプログラム、キャッシュミスが無いようなプログラムなのに、
計算に使うコア数を減らすほど速くなる事に気がついた。3コアで最高速。
ふと、OCやめて定格に戻したら、まともな速度が出るようになった。
なんてこった。どうやらOCで逆に遅くなる事があるようだ。
OCする場合とOCしないときと速度比較してみる価値あるかもよ。
プログラムを走らせて 使ってたのだが、速度が出ないので調べてみた。
殆どOn cacheで動くプログラム、キャッシュミスが無いようなプログラムなのに、
計算に使うコア数を減らすほど速くなる事に気がついた。3コアで最高速。
ふと、OCやめて定格に戻したら、まともな速度が出るようになった。
なんてこった。どうやらOCで逆に遅くなる事があるようだ。
OCする場合とOCしないときと速度比較してみる価値あるかもよ。
455デフォルトの名無しさん
2010/06/16(水) 22:47:52 MPI使った計算なんて遊びじゃないんだからOCなんて普通しねーっての
456デフォルトの名無しさん
2010/06/16(水) 23:29:08 まぁそうだな。奇特な人向けの情報です。
457デフォルトの名無しさん
2010/06/17(木) 19:01:17 遊びじゃないのにOCするのってダメなのかな
通常のOCのリスク(熱・故障等)以外に、結果が狂うとかある?
通常のOCのリスク(熱・故障等)以外に、結果が狂うとかある?
458デフォルトの名無しさん
2010/06/18(金) 00:53:44 >>457
狂った事あるよ。
デカイファイルが出力されるプログラムを実行させてたときに
./a.out | gzip > out.txt.gz
とかやってたんだが、out.txt.gz をgzip -d で解凍させたら壊れて
ますとエラーが出たので気が付いた。OCでgzipがまともに動作し
なかった模様。多分計算結果も壊れてたんだろうな。
てかgzipで圧縮してなかったら計算結果が壊れてる事に気がついて
なかった罠。
狂った事あるよ。
デカイファイルが出力されるプログラムを実行させてたときに
./a.out | gzip > out.txt.gz
とかやってたんだが、out.txt.gz をgzip -d で解凍させたら壊れて
ますとエラーが出たので気が付いた。OCでgzipがまともに動作し
なかった模様。多分計算結果も壊れてたんだろうな。
てかgzipで圧縮してなかったら計算結果が壊れてる事に気がついて
なかった罠。
459デフォルトの名無しさん
2010/06/18(金) 01:00:23 いやしかし、そろそろMPIに厳しい時期になりましたなぁ。
そろそろ10月まで止めるかなぁ。電流計で測ると11A使っている
から1100Wの電熱器付けているようなもんだからなぁ。
そろそろ10月まで止めるかなぁ。電流計で測ると11A使っている
から1100Wの電熱器付けているようなもんだからなぁ。
2010/07/10(土) 14:37:03
>>459
台数を6台から1台に減らしたんだが、最適化に尽力したら、2倍速くなった(w
(一台あたりの話)
作業配列をunsignedからunsigned charにしただけで、1.2倍。
昔のCPUは1byteアクセスはペナルティ高かったような…
PentiumPro ぐらいの話だが。最近はペナルティ無いのか?
台数を6台から1台に減らしたんだが、最適化に尽力したら、2倍速くなった(w
(一台あたりの話)
作業配列をunsignedからunsigned charにしただけで、1.2倍。
昔のCPUは1byteアクセスはペナルティ高かったような…
PentiumPro ぐらいの話だが。最近はペナルティ無いのか?
2010/07/10(土) 19:12:52
コンパイラや最適化の影響があるかも知れない。
単純にはインテルコンパイラ使ってSSE吐いているならその部分は4倍速くなってるはず。
単純にはインテルコンパイラ使ってSSE吐いているならその部分は4倍速くなってるはず。
462460
2010/07/10(土) 23:39:18463460
2010/07/12(月) 23:52:31 最適化を推し進めていくと、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
コンパイラの最適化レベルを上げるとホットスポット内にある、めったに呼ばれない関数まで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
464デフォルトの名無しさん
2010/07/14(水) 03:12:44465デフォルトの名無しさん
2010/07/14(水) 16:19:27 MPIを使わずに馬鹿並列をする簡単なフレームワークないですかね?
MPIをインストールするのめどい。
やって欲しい事は、32coreのマシンと、数千個のファイルがある。
.a.outにこのファイルを一つづつ渡して実行してほしい。処理が終
わったら続いてファイルを渡して処理をして欲しい。同時に32個
のa.outを実行しつつ、処理が終わったa.outがあったら残りの
ファイルをa.outで処理してほしい。
MPIをインストールするのめどい。
やって欲しい事は、32coreのマシンと、数千個のファイルがある。
.a.outにこのファイルを一つづつ渡して実行してほしい。処理が終
わったら続いてファイルを渡して処理をして欲しい。同時に32個
のa.outを実行しつつ、処理が終わったa.outがあったら残りの
ファイルをa.outで処理してほしい。
466デフォルトの名無しさん
2010/07/14(水) 16:24:10 ↑ それぞれのa.outは処理時間が一定ではありません。
467デフォルトの名無しさん
2010/07/15(木) 00:26:56 妥当なところは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);
}
結構適当に書いたけど、こんな感じ?
#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);
}
結構適当に書いたけど、こんな感じ?
468デフォルトの名無しさん
2010/07/15(木) 22:00:42 ありがとうございます。OpenMPでそんな事ができるんですね。
gccも4系はサポートしているみたいですので、試してみます。
gccも4系はサポートしているみたいですので、試してみます。
469デフォルトの名無しさん
2010/08/07(土) 11:07:24 この辺でもみてくださいな。
一見正しく動いていても、OCで遅くなったり計算間違ったり
ttp://hibari.2ch.net/test/read.cgi/tech/1099819556/454
ttp://hibari.2ch.net/test/read.cgi/tech/1099819556/458
一見正しく動いていても、OCで遅くなったり計算間違ったり
ttp://hibari.2ch.net/test/read.cgi/tech/1099819556/454
ttp://hibari.2ch.net/test/read.cgi/tech/1099819556/458
470デフォルトの名無しさん
2010/09/12(日) 06:01:26 465-466 で処理量が一定でないとの事だから、
>>467 さんの schedule(dynamic,1)
は必須だね。これがなくてもちゃんと動くだろうけど、かなり能率は落ちるハズだ。
頑張ってね〜。
>>467 さんの schedule(dynamic,1)
は必須だね。これがなくてもちゃんと動くだろうけど、かなり能率は落ちるハズだ。
頑張ってね〜。
471デフォルトの名無しさん
2010/10/03(日) 18:04:08 MPI導入の話なのですが…
MPICH2のmpdbootを失敗した際に出る(handle_mpd_output ***)のまとめサイトのようなものを探しております。
日本語か英語のサイトで見たことあるという方、教えていただければ嬉しいです。
MPICH2のmpdbootを失敗した際に出る(handle_mpd_output ***)のまとめサイトのようなものを探しております。
日本語か英語のサイトで見たことあるという方、教えていただければ嬉しいです。
472デフォルトの名無しさん
2010/10/12(火) 03:47:24 MPIでコンパイルしているかどうかをコンパイル中に#ifdefで判別したいのですが、
どれがdefineされているかを調べれば良いのでしょうか?
どれがdefineされているかを調べれば良いのでしょうか?
473デフォルトの名無しさん
2010/10/22(金) 10:35:24 Ubuntuでintelコンパイラを使ってMPIプログラムをコンパイルしたいのですが、
apt-getでopenmpiをインストールした後、使用するコンパイラをgccからiccに変更する
方法がわかりません。
やり方を教えてください
apt-getでopenmpiをインストールした後、使用するコンパイラをgccからiccに変更する
方法がわかりません。
やり方を教えてください
474デフォルトの名無しさん
2010/10/24(日) 02:32:25475デフォルトの名無しさん
2010/10/24(日) 02:44:51 gcc -E -dM -xc /dev/null
定義済みマクロ
http://wikiwiki.jp/redstrange/?%C4%EA%B5%C1%BA%D1%A4%DF%A5%DE%A5%AF%A5%ED
__MPI
__OPENMP
定義済みマクロ
http://wikiwiki.jp/redstrange/?%C4%EA%B5%C1%BA%D1%A4%DF%A5%DE%A5%AF%A5%ED
__MPI
__OPENMP
476デフォルトの名無しさん
2010/11/11(木) 06:38:52 ご存知の方教えてください。
MPIの各ノードのコンパイラが違っても、コンパイラに依存したソースでなければ動作しますか?
よろしくお願いします。
MPIの各ノードのコンパイラが違っても、コンパイラに依存したソースでなければ動作しますか?
よろしくお願いします。
477デフォルトの名無しさん
2010/11/11(木) 10:15:27 なんか答えにくい質問だなぁ・・
たとえば x86 なCPU で linux 上で、とかなら
.o ファイルかき集めて最後にリンクできて・・なら、
たぶんだけど意図したとおりに動くんじゃないかな?
コードはあげないけど中間ファイルならあげるよ、という人たちから
いろいろもらって一まとめで使う、とかなの?
たとえば x86 なCPU で linux 上で、とかなら
.o ファイルかき集めて最後にリンクできて・・なら、
たぶんだけど意図したとおりに動くんじゃないかな?
コードはあげないけど中間ファイルならあげるよ、という人たちから
いろいろもらって一まとめで使う、とかなの?
478デフォルトの名無しさん
2010/11/12(金) 14:02:34 >>477
すみません質問がいい加減すぎました。
ノード1がCygwinでgcc_4.3.4を使っていて、
ノード2がUbuntuでgcc_4.4.4を使っています。
CPUはともにx86系です。
このようなときに、
MPIはコンパイラが異なることを気にせずにプログラムを動作させることができるかどうか知りたいです。
よろしくお願いします。
すみません質問がいい加減すぎました。
ノード1がCygwinでgcc_4.3.4を使っていて、
ノード2がUbuntuでgcc_4.4.4を使っています。
CPUはともにx86系です。
このようなときに、
MPIはコンパイラが異なることを気にせずにプログラムを動作させることができるかどうか知りたいです。
よろしくお願いします。
479デフォルトの名無しさん
2010/11/12(金) 15:38:08 mpirun mpiexec の気分次第w
まあ、動くかと。
gcc と intel は割と相性イイから
インテルも混ぜてあげよう
まあ、動くかと。
gcc と intel は割と相性イイから
インテルも混ぜてあげよう
480デフォルトの名無しさん
2010/11/15(月) 18:12:22 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
を入れました。
のですが、どうすればよいでしょうか。
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
を入れました。
481デフォルトの名無しさん
2011/01/13(木) 13:07:41 >>480
bashrcに書けばいいんじゃない?
bashrcに書けばいいんじゃない?
482デフォルトの名無しさん
2011/01/26(水) 19:07:42 行列行列積のやり方が全くわかりません
A×B=Cで各プロセスがAとBのブロック行(ブロック行の行数は行列全体の行数/プロセス数)を保持している。
Bをプロセス間で循環させ、計算結果のCを更新していくことでA×Bを計算せよ。
行列は正方行列で1024×1024とし、プロセス数は行数の約数とする。値は乱数で決める。
誰がやり方教えて下さい。プログラムの流れとかでも良いです。お願いします。
A×B=Cで各プロセスがAとBのブロック行(ブロック行の行数は行列全体の行数/プロセス数)を保持している。
Bをプロセス間で循環させ、計算結果のCを更新していくことでA×Bを計算せよ。
行列は正方行列で1024×1024とし、プロセス数は行数の約数とする。値は乱数で決める。
誰がやり方教えて下さい。プログラムの流れとかでも良いです。お願いします。
483デフォルトの名無しさん
2011/02/09(水) 18:08:03 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 ---
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 ---
484デフォルトの名無しさん
2011/05/21(土) 13:51:12.10 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
とエラーが出てしまい実行出来ません。検索しても有効な解決策が見つかりませんでした。
どなたか解決策を教えていただけないでしょうか?
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
とエラーが出てしまい実行出来ません。検索しても有効な解決策が見つかりませんでした。
どなたか解決策を教えていただけないでしょうか?
485デフォルトの名無しさん
2011/05/31(火) 04:09:40.08 Intel mpi(impi)使ってる人います?
自分でコンパイルしたのより速い?
自分でコンパイルしたのより速い?
486デフォルトの名無しさん
2011/05/31(火) 23:53:44.81 そりゃ人間がコンパイルするより速いだろ
487デフォルトの名無しさん
2011/06/01(水) 02:31:39.53 機械語直打ちw
やだな・・・罰ゲームだ
やだな・・・罰ゲームだ
488デフォルトの名無しさん
2011/06/07(火) 02:57:07.11489デフォルトの名無しさん
2011/06/07(火) 03:03:11.95490デフォルトの名無しさん
2011/06/08(水) 00:50:57.29 >>488
「自分でコンパイル」に該当する環境をきちんと定義しないからさ。
コンパイラは?gcc?icc?それ以外?
mpiライブラリは?計算内容は?
まぁどれにしてもmpiコンパイラって基本的に適当なライブラリをくっつけて
ビルドするスクリプトだから、実際やってる内容を出力するオプションあるし
それで1つ1つ確認すればいいんじゃない?
「自分でコンパイル」に該当する環境をきちんと定義しないからさ。
コンパイラは?gcc?icc?それ以外?
mpiライブラリは?計算内容は?
まぁどれにしてもmpiコンパイラって基本的に適当なライブラリをくっつけて
ビルドするスクリプトだから、実際やってる内容を出力するオプションあるし
それで1つ1つ確認すればいいんじゃない?
491デフォルトの名無しさん
2011/06/08(水) 01:47:18.76 >>490
回答ありがとう.たしかにあやふやな質問だったと思う.
偏見かもしれんが,まともなwindowsクラスタってあるの?
数値計算を32bitで行うのは論外でしょ.
でIntel Compilerを入れる時点で,アーキテクチャほぼ決まると思いますが.
impiのデフォルトコンパイラはgcc&gfortranです.
mpiライブラリの意味がわからん.
impiの前はmpichを使ってた.(これで回答になっている?)
計算内容は有限差分とモンテカルロ.
続く
回答ありがとう.たしかにあやふやな質問だったと思う.
偏見かもしれんが,まともなwindowsクラスタってあるの?
数値計算を32bitで行うのは論外でしょ.
でIntel Compilerを入れる時点で,アーキテクチャほぼ決まると思いますが.
impiのデフォルトコンパイラはgcc&gfortranです.
mpiライブラリの意味がわからん.
impiの前はmpichを使ってた.(これで回答になっている?)
計算内容は有限差分とモンテカルロ.
続く
492デフォルトの名無しさん
2011/06/08(水) 01:48:27.26 >>490
続き
適当なライブラリが-lmpi -lpthread -lmとかを言っているなら,
libmpiをコンパイルする必要があると思いますが.
このライブラリをIntelがチューニングしてくれたら,
自分でコンパイルするより早いでしょうし.
デフォルトのgccとかでやられてたら,
自分でコンパイルしたほうが速そうじゃない?
実際やってる内容ってのは,mpiccやmpifcのスクリプトの中身のこと?
それとも別の何かを指しているの?
続き
適当なライブラリが-lmpi -lpthread -lmとかを言っているなら,
libmpiをコンパイルする必要があると思いますが.
このライブラリをIntelがチューニングしてくれたら,
自分でコンパイルするより早いでしょうし.
デフォルトのgccとかでやられてたら,
自分でコンパイルしたほうが速そうじゃない?
実際やってる内容ってのは,mpiccやmpifcのスクリプトの中身のこと?
それとも別の何かを指しているの?
493デフォルトの名無しさん
2011/08/28(日) 05:28:03.47 ブロードキャストってネットワークの送受信量を減らすことができるのですか?
それとも単に便利なだけというだけなのでしょうか?
それとも単に便利なだけというだけなのでしょうか?
494デフォルトの名無しさん
2011/09/01(木) 19:37:51.69 MPIってテキストからデータ読み込んだ時に、
MPI_SendやMPI_Recvを使って送受信可能にするためには変換が必要だったりしますか?
double型のデータなんですが。
MPI_SendやMPI_Recvを使って送受信可能にするためには変換が必要だったりしますか?
double型のデータなんですが。
495デフォルトの名無しさん
2011/09/02(金) 11:09:03.84 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
エラーが
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
496デフォルトの名無しさん
2011/09/03(土) 10:38:26.00 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次元座標的には読みにくい入力データが必要。
とあるので全うな終了をしてないプロセスがあるんでしょう。
return 0以外で終了するっぽいコードは inputn() です。何故か EOF に達すると exit(1) しているので
inputq() のように break にすれば直る・・・・・・とは思いませんが。
とりあえず他の点でも突っ込み。
・座標入力でy,zがEOFになってもbreakで抜けて処理しているけどいいの?というかそういう表示を出さないとバグがわからないと思う。
・mainのループ関係がおかしい。わかりやすいところではifとelseが対応してない。
・getdouble() は1行から1つの数値しか読み込まないっぽいので 3次元座標的には読みにくい入力データが必要。
497495
2011/09/04(日) 09:45:19.22 >>496さんの言った通り直しても通りませんでした…。
正直自分の知識じゃ限界を感じているので
代わりにやってくれる方がいれば報酬払ってもいいです。
最大2万円までしか出せませんが…。メール待ってます。
正直自分の知識じゃ限界を感じているので
代わりにやってくれる方がいれば報酬払ってもいいです。
最大2万円までしか出せませんが…。メール待ってます。
498デフォルトの名無しさん
2011/11/15(火) 11:36:05.43 openmpi使ってるんだがnohupが効かねぇ・・・
端末PC落とすと計算やめちゃうんだが
端末PC落とすと計算やめちゃうんだが
499デフォルトの名無しさん
2011/11/19(土) 16:31:12.60 へえ
500デフォルトの名無しさん
2011/11/24(木) 19:56:37.29 MPIの勉強始めようと思うんだけどMPI3ってのはまだ出てないの?
501デフォルトの名無しさん
2012/05/16(水) 14:34:19.07 OpemMPとの違いを教えてください
502デフォルトの名無しさん
2012/05/16(水) 15:20:09.38 MPI
妖精がいっぱい同時に働く。
拍子を合わせそこなうと、ぐだぐだ。
プログラムは最初から並列前提で書く方が
いいかもしてない。非並列からの移行は面倒臭い。
OpenMP
手がいっぱいある妖精が独りで頑張る。
並列化はかなり楽。
混在できるけどね。
gfortran とか無料コンパイラがOpenMPに
対応しているし、マルチコアCPUが
普通になってきた今日、
小規模から中規模ならOpenMPがオススメ。
大規模スパコン使う可能性があるなら、
MPI で最初から組むべし。
妖精がいっぱい同時に働く。
拍子を合わせそこなうと、ぐだぐだ。
プログラムは最初から並列前提で書く方が
いいかもしてない。非並列からの移行は面倒臭い。
OpenMP
手がいっぱいある妖精が独りで頑張る。
並列化はかなり楽。
混在できるけどね。
gfortran とか無料コンパイラがOpenMPに
対応しているし、マルチコアCPUが
普通になってきた今日、
小規模から中規模ならOpenMPがオススメ。
大規模スパコン使う可能性があるなら、
MPI で最初から組むべし。
503デフォルトの名無しさん
2012/06/21(木) 09:40:29.85 MPIにおすすめのスイッチングハブを教えてください
504デフォルトの名無しさん
2012/08/03(金) 08:01:03.03 >>503
バカハブこれ最強
バカハブこれ最強
505デフォルトの名無しさん
2012/10/31(水) 13:14:04.95 LANポートにあきがあるならノードでリングベース組むのが勉強になるで
俺は混在は結構ありだとおもうで
クラスタとかなら通信時間削減が期待できる
俺は混在は結構ありだとおもうで
クラスタとかなら通信時間削減が期待できる
506デフォルトの名無しさん
2012/11/23(金) 18:27:19.04 gigabit ethernetからInfiniBandに変えた場合のベンチマーク結果とかありますか?
アプリケーションにも依るとは思うのですが、ある程度、どのくらい向上するのか知りたいのですが
♪∧,,∧
♪∧,,∧・ ω・)
∧,,∧・ ω・) )っ
(・ ω・) )っ__フ
(っ )っ__フ(_/彡
( __フ(_/彡
(_/彡♪
アプリケーションにも依るとは思うのですが、ある程度、どのくらい向上するのか知りたいのですが
♪∧,,∧
♪∧,,∧・ ω・)
∧,,∧・ ω・) )っ
(・ ω・) )っ__フ
(っ )っ__フ(_/彡
( __フ(_/彡
(_/彡♪
507デフォルトの名無しさん
2013/04/01(月) 12:31:36.78 www.science-academy.jp/showcase/11/pdf/P-108_showcase2012.pdf
↑こいつとか、国泰寺高校もそうだけど、学生でもこういうMPIのシステムを構築できる時代なんだな。
ただ、それゆえに性能測定しかしていない。
テーマを持たないと意味ないよな。
それに関して指導できる教師が高校にいるものだろうか?
↑こいつとか、国泰寺高校もそうだけど、学生でもこういうMPIのシステムを構築できる時代なんだな。
ただ、それゆえに性能測定しかしていない。
テーマを持たないと意味ないよな。
それに関して指導できる教師が高校にいるものだろうか?
508デフォルトの名無しさん
2013/04/21(日) 05:09:09.55 動的に確保する要素を含む構造体のデータタイプを作るにはどうしたらいいのでしょうか。
int MPI_Type_struct(int count,
int blocklens[],
MPI_Aint indices[],
MPI_Datatype old_types[],
MPI_Datatype *newtype)
のMPI_Aint indices[]のアドレス計算部分で構造体の動的に確保した要素のせいで
アドレスが一部分に固まってないのでよくわかりません。
int MPI_Type_struct(int count,
int blocklens[],
MPI_Aint indices[],
MPI_Datatype old_types[],
MPI_Datatype *newtype)
のMPI_Aint indices[]のアドレス計算部分で構造体の動的に確保した要素のせいで
アドレスが一部分に固まってないのでよくわかりません。
509デフォルトの名無しさん
2013/06/22(土) 16:11:03.36 >>508
要素を一つずつ配布するしかないんじゃないか
要素を一つずつ配布するしかないんじゃないか
510デフォルトの名無しさん
2013/07/28(日) NY:AN:NY.AN 多体問題とか計算させて可視化とか
ありきたりだけどインパクトはあるよね
そんなに難しくないし
ありきたりだけどインパクトはあるよね
そんなに難しくないし
511デフォルトの名無しさん
2013/08/28(水) NY:AN:NY.AN みなさんI/O(特に出力)はどうしてますか?
netCDFとかやんないといけないんですかね
netCDFとかやんないといけないんですかね
512デフォルトの名無しさん
2013/10/20(日) 20:32:46.52 初めてMPIプログラムをしたのですが、しばらく動いた後に何回も通っている MPI::COMM_WORLD.Isend で
Segmentation fault が出てしまいます。
Debian(wheezy)の OpenMPI 1.4.5 を使っています。どのような時にこのエラーが出るのでしょうか?
テストプログラムを組んで第1引数をポインタのみで実態が無いように組んでみましたが、一発でエラーが出て
出方が違っていました。この時のエラーは次のように出ます。
[hostname:7247] *** An error occurred in MPI_Isend
[hostname:7247] *** on communicator MPI_COMM_WORLD
[hostname:7247] *** MPI_ERR_BUFFER: invalid buffer pointer
[hostname:7247] *** MPI_ERRORS_ARE_FATAL (your MPI job will now abort)
もし宜しければアドバイスお願いします
Segmentation fault が出てしまいます。
Debian(wheezy)の OpenMPI 1.4.5 を使っています。どのような時にこのエラーが出るのでしょうか?
テストプログラムを組んで第1引数をポインタのみで実態が無いように組んでみましたが、一発でエラーが出て
出方が違っていました。この時のエラーは次のように出ます。
[hostname:7247] *** An error occurred in MPI_Isend
[hostname:7247] *** on communicator MPI_COMM_WORLD
[hostname:7247] *** MPI_ERR_BUFFER: invalid buffer pointer
[hostname:7247] *** MPI_ERRORS_ARE_FATAL (your MPI job will now abort)
もし宜しければアドバイスお願いします
513デフォルトの名無しさん
2013/10/21(月) 18:46:01.68 mpi_err_buffer invalid buffer pointer でググると、
Stackoverflows上のQ&Aなどの情報が見つけられるね
Stackoverflows上のQ&Aなどの情報が見つけられるね
514512
2013/10/22(火) 20:15:27.18 >>513
レス有難うございます。
ググってみましたが、英語が堪能でないため理解できていない状態です orz
ですがテストプログラムで起きる条件を見つけることが出来ました。
スレッドでRecvで待ち受けている状態で同じランク内でIsend, Irecvで
色々送受信する時にエラーが発生するようです。
RecvをIrecvに変更してタグを分ければエラーが発生しないようですが、
まだ良く見ていないのでなんとも言えない状態です。
コミュニケータとかタグをよく理解していなくてよく分からないのですが、
何となく通信を分けれればいいな程度ならタグで分けるでOKです?
レス有難うございます。
ググってみましたが、英語が堪能でないため理解できていない状態です orz
ですがテストプログラムで起きる条件を見つけることが出来ました。
スレッドでRecvで待ち受けている状態で同じランク内でIsend, Irecvで
色々送受信する時にエラーが発生するようです。
RecvをIrecvに変更してタグを分ければエラーが発生しないようですが、
まだ良く見ていないのでなんとも言えない状態です。
コミュニケータとかタグをよく理解していなくてよく分からないのですが、
何となく通信を分けれればいいな程度ならタグで分けるでOKです?
515デフォルトの名無しさん
2013/11/10(日) 22:41:16.90 ランクを指定してfinalizeに到達したか調べる方法はないですか?
516デフォルトの名無しさん
2013/12/04(水) 11:39:20.69 MPI の勉強のために、コードの主要部分は C で書かれていて、
具体的な計算部分は fortran77 で書かれたサブルーチンを
呼んでいる混在コードを MPI 並列化したいと思っています。
当面の目標は、MPI の初期化・終了部分などを C の部分で書いて、
fortran で書かれている部分に具体的な指示行を入れて並列化を
することなのですが、私の勉強不足で、最初からつまづいている
状態です。
C の部分に
MPI_Init(&argc, &argv);
MPI_Finalize();
を入れて、
具体的な計算部分は fortran77 で書かれたサブルーチンを
呼んでいる混在コードを MPI 並列化したいと思っています。
当面の目標は、MPI の初期化・終了部分などを C の部分で書いて、
fortran で書かれている部分に具体的な指示行を入れて並列化を
することなのですが、私の勉強不足で、最初からつまづいている
状態です。
C の部分に
MPI_Init(&argc, &argv);
MPI_Finalize();
を入れて、
517デフォルトの名無しさん
2013/12/04(水) 11:41:00.26 fortran のサブルーチンに MPI のヘッダや変数定義、MPI 関数
#include <mpi.h>
integer nprocs, myrank, ierr
call MPI_Comm_size( MPI_COMM_WORLD, nprocs, ierr )
call MPI_Comm_rank( MPI_COMM_WORLD, myrank, ierr )
write(*, *) nprocs, myrank
を入れてコンパイルし、4並列の MPI 計算をしてみたところ、
全てのプロセスで nprocs と myrank が 0 と表示されて
しまいました。fortran 部分で新規に nprocs と myrank を
定義しているのが原因なのではないかと思っていますが、
C から正しく fortran 側に情報を伝えて、正しく表示させる
(nprocs = 4 など)には、どのようにすればよろしいでしょうか。
MPI の基礎が分かっておらず、全くの素人質問で申し訳ありませんが、
ご助言など頂けますと助かります。
#include <mpi.h>
integer nprocs, myrank, ierr
call MPI_Comm_size( MPI_COMM_WORLD, nprocs, ierr )
call MPI_Comm_rank( MPI_COMM_WORLD, myrank, ierr )
write(*, *) nprocs, myrank
を入れてコンパイルし、4並列の MPI 計算をしてみたところ、
全てのプロセスで nprocs と myrank が 0 と表示されて
しまいました。fortran 部分で新規に nprocs と myrank を
定義しているのが原因なのではないかと思っていますが、
C から正しく fortran 側に情報を伝えて、正しく表示させる
(nprocs = 4 など)には、どのようにすればよろしいでしょうか。
MPI の基礎が分かっておらず、全くの素人質問で申し訳ありませんが、
ご助言など頂けますと助かります。
518デフォルトの名無しさん
2013/12/04(水) 13:06:04.90 FORTRANはしばらく触っていないけど、includeは正しいの?
私もMPIプログラムは素人だけど疑問は何点か有るよ
疑問1、MPIを含まないCとFORTRANの混成は問題なく作れるのか?
疑問2、C又はFORTRAN単独言語の時にMPIのプログラムは作れるのか?
疑問3、C、FORTRAN、MPIのバージョンはいくつ?また実装系は何ですか?
で話は少し変わってくるんじゃないかな
私もMPIプログラムは素人だけど疑問は何点か有るよ
疑問1、MPIを含まないCとFORTRANの混成は問題なく作れるのか?
疑問2、C又はFORTRAN単独言語の時にMPIのプログラムは作れるのか?
疑問3、C、FORTRAN、MPIのバージョンはいくつ?また実装系は何ですか?
で話は少し変わってくるんじゃないかな
519デフォルトの名無しさん
2013/12/04(水) 13:35:33.96 アドバイス頂きありがとうございます。
1 についてですが、MPI を含まない C と FORTRAN の混成で
作られたコードは問題なく動いていまして、そのコードを
これから MPI 化したいと思っています。
2 についてですが、現在の C と FORTRAN の混成で作られた
コードの規模が割と大きいため、C 又は FORTRAN 単独言語に
書き換えるのが容易ではありませんが、仮にできたとすると
単独言語用の一般的な方法で MPI 化できると思っています。
3 についてですが、C と FORTRAN、MPI のバージョンはそれぞれ
icc (ICC) 12.1.4 20120410
mpiifort (IFORT) 12.1.4 20120410
Intel MPI 4.0.3
です。 また、実装系は intel のワークステーションです。
現時点では FORTRAN 側での include ファイルは mpi.h
だけですが、それが正しいかどうかは自信がありません。
何かご助言などありましたらお教え頂けるとありがたいです。
1 についてですが、MPI を含まない C と FORTRAN の混成で
作られたコードは問題なく動いていまして、そのコードを
これから MPI 化したいと思っています。
2 についてですが、現在の C と FORTRAN の混成で作られた
コードの規模が割と大きいため、C 又は FORTRAN 単独言語に
書き換えるのが容易ではありませんが、仮にできたとすると
単独言語用の一般的な方法で MPI 化できると思っています。
3 についてですが、C と FORTRAN、MPI のバージョンはそれぞれ
icc (ICC) 12.1.4 20120410
mpiifort (IFORT) 12.1.4 20120410
Intel MPI 4.0.3
です。 また、実装系は intel のワークステーションです。
現時点では FORTRAN 側での include ファイルは mpi.h
だけですが、それが正しいかどうかは自信がありません。
何かご助言などありましたらお教え頂けるとありがたいです。
520デフォルトの名無しさん
2013/12/04(水) 14:02:42.00 includeはC言語の書き方に見えたんで書いたんだけど・・・
include 'mpif.h' とか書くんじゃない?
intelのコンパイラは使ったこと無いからわからないけどね
疑問2については簡単なプログラムを(rankを表示する)書いてみたらいいんじゃないと言う意味で書きました
include 'mpif.h' とか書くんじゃない?
intelのコンパイラは使ったこと無いからわからないけどね
疑問2については簡単なプログラムを(rankを表示する)書いてみたらいいんじゃないと言う意味で書きました
521デフォルトの名無しさん
2013/12/04(水) 16:27:50.33 説明不足ですみませんが、先の include は FORTRAN の部分に挿入した
ものです。別途 C の部分には、既に #include "mpi.h" と書いていますが、
もしかして、include 文は C の部分に書いておけば、あらためて
FORTRAN の部分には書く必要はないのでしょうか???
2 については、C も FORTRAN も簡単なプログラムを書くことで、
MPI が動作する(rank が表示される)ことを確認しています。
ただ、今回のような C の中に FORTRAN が入れ子になっている状態での
MPI の書き方がわからず(FORTRAN の subroutine を呼んでいる箇所の
前後で MPI の指示文を書いてもダメなのでしょうね?)、困っています。
ものです。別途 C の部分には、既に #include "mpi.h" と書いていますが、
もしかして、include 文は C の部分に書いておけば、あらためて
FORTRAN の部分には書く必要はないのでしょうか???
2 については、C も FORTRAN も簡単なプログラムを書くことで、
MPI が動作する(rank が表示される)ことを確認しています。
ただ、今回のような C の中に FORTRAN が入れ子になっている状態での
MPI の書き方がわからず(FORTRAN の subroutine を呼んでいる箇所の
前後で MPI の指示文を書いてもダメなのでしょうね?)、困っています。
522デフォルトの名無しさん
2013/12/04(水) 17:19:45.26 テストしていないので話半分で聞いて下さい。
まずFORTRANに書くincludeの書き方が間違っている
includeはファイルが分割されているとそれ毎に書く必要がある
なので
----- main.c -----
#include <mpi.h>
int main( int argc, char *argv[] ) {
MPI_Init( &argc, &argv );
fortran_subroutine();
MPI_Finalize();
return 0;
}
----- fortran_subroutine.f -----
include 'mpif.h'
sobroutine fortran_subroutine()
integer nprocs, myrank, ierr
call MPI_Comm_size( MPI_COMM_WORLD, nprocs, ierr )
call MPI_Comm_rank( MPI_COMM_WORLD, myrank, ierr )
write(*, *) nprocs, myrank
end subroutine fortran_subroutine
こんな書き方になると思います(FORTRAN忘れましたw)
小さなプログラムで書き方をテストしてからやった方がいいのでは?
まずFORTRANに書くincludeの書き方が間違っている
includeはファイルが分割されているとそれ毎に書く必要がある
なので
----- main.c -----
#include <mpi.h>
int main( int argc, char *argv[] ) {
MPI_Init( &argc, &argv );
fortran_subroutine();
MPI_Finalize();
return 0;
}
----- fortran_subroutine.f -----
include 'mpif.h'
sobroutine fortran_subroutine()
integer nprocs, myrank, ierr
call MPI_Comm_size( MPI_COMM_WORLD, nprocs, ierr )
call MPI_Comm_rank( MPI_COMM_WORLD, myrank, ierr )
write(*, *) nprocs, myrank
end subroutine fortran_subroutine
こんな書き方になると思います(FORTRAN忘れましたw)
小さなプログラムで書き方をテストしてからやった方がいいのでは?
523522
2013/12/04(水) 21:43:48.10 Linux 環境でOpenMPI 1.4.5 gcc 4.7.2 でコンパイルすると実行時にエラーが出てしまうね。
この環境で混在できるのだろうか? ここ人が少なくで答えてくれる人居ないだろうな
>>521さんも環境に依存する部分なので上手く行くと良いですね
前のプログラムにタイポと抜けがあったので修正しました
% mpif77 -c rank.f
% mpicc -o test02 main.c rank.o -l:/usr/lib/gcc/i486-linux-gnu/4.7/libgfortran.a -lmpi_f77
でコンパイルしました
----- main.c -----
#include <mpi.h>
void rank_();
int main( int argc, char *argv[] ) {
MPI_Init( &argc, &argv );
rank_();
MPI_Finalize();
return 0;
}
----- rank.f -----
C include 'mpif.h'
subroutine rank
integer nprocs, myrank, ierr
call MPI_Comm_size( MPI_COMM_WORLD, nprocs, ierr )
call MPI_Comm_rank( MPI_COMM_WORLD, myrank, ierr )
write(*, *) nprocs, myrank
end subroutine rank
この環境で混在できるのだろうか? ここ人が少なくで答えてくれる人居ないだろうな
>>521さんも環境に依存する部分なので上手く行くと良いですね
前のプログラムにタイポと抜けがあったので修正しました
% mpif77 -c rank.f
% mpicc -o test02 main.c rank.o -l:/usr/lib/gcc/i486-linux-gnu/4.7/libgfortran.a -lmpi_f77
でコンパイルしました
----- main.c -----
#include <mpi.h>
void rank_();
int main( int argc, char *argv[] ) {
MPI_Init( &argc, &argv );
rank_();
MPI_Finalize();
return 0;
}
----- rank.f -----
C include 'mpif.h'
subroutine rank
integer nprocs, myrank, ierr
call MPI_Comm_size( MPI_COMM_WORLD, nprocs, ierr )
call MPI_Comm_rank( MPI_COMM_WORLD, myrank, ierr )
write(*, *) nprocs, myrank
end subroutine rank
524522
2013/12/04(水) 22:18:07.46 includeをsubroutineの後に持ってきたら実行も上手く行きました orz...
----- rank.f -----
subroutine rank
include 'mpif.h'
integer nprocs, myrank, ierr
call MPI_Comm_size( MPI_COMM_WORLD, nprocs, ierr )
call MPI_Comm_rank( MPI_COMM_WORLD, myrank, ierr )
write(*, *) nprocs, myrank
end subroutine rank
----- rank.f -----
subroutine rank
include 'mpif.h'
integer nprocs, myrank, ierr
call MPI_Comm_size( MPI_COMM_WORLD, nprocs, ierr )
call MPI_Comm_rank( MPI_COMM_WORLD, myrank, ierr )
write(*, *) nprocs, myrank
end subroutine rank
525デフォルトの名無しさん
2013/12/06(金) 01:28:12.82 >> 522 さん
ご返信が遅くなり大変申し訳ありませんでした。
この度はコードのご指導まで頂き、本当にありがとうございました!
私の環境は intel 環境で、不勉強もありなかなか上手くいきません
でしたが、参考にさせて頂きつつ、なんとか
mpiifort -c rank.f
mpiicc -o a.out main.c rank.o -lifcore -limf
mpirun -np 4 a.out
で動きました!嬉しいです!!
この度は、ご助言頂き本当にありがとうございました!!
ご返信が遅くなり大変申し訳ありませんでした。
この度はコードのご指導まで頂き、本当にありがとうございました!
私の環境は intel 環境で、不勉強もありなかなか上手くいきません
でしたが、参考にさせて頂きつつ、なんとか
mpiifort -c rank.f
mpiicc -o a.out main.c rank.o -lifcore -limf
mpirun -np 4 a.out
で動きました!嬉しいです!!
この度は、ご助言頂き本当にありがとうございました!!
526デフォルトの名無しさん
2014/08/15(金) 22:14:35.07ID:wwFL1PPV 過疎っているな・・・おるか?
527デフォルトの名無しさん
2014/08/27(水) 03:15:26.43ID:SX33fbF3 おるでw
最近はMPIのインストール方法とか使用方法とかを説明する記事やドキュメントが多いから、わざわざ2ちゃんのスレにカキコするまでもないのではないかな…
最近はMPIのインストール方法とか使用方法とかを説明する記事やドキュメントが多いから、わざわざ2ちゃんのスレにカキコするまでもないのではないかな…
528デフォルトの名無しさん
2014/09/25(木) 20:37:56.94ID:77m4KJC/ プログラミング初心者ですが質問させてください。
フリーウェアだけでfortranのmpiを用いた並列計算環境って用意できますか?
OSはwindowsです。色々解説サイトを回ったのですが、OSがwinで
フリーウェアという条件に一致するものがありません。
解説サイトか、フリーウェアを紹介していただけたら幸いです。
フリーウェアだけでfortranのmpiを用いた並列計算環境って用意できますか?
OSはwindowsです。色々解説サイトを回ったのですが、OSがwinで
フリーウェアという条件に一致するものがありません。
解説サイトか、フリーウェアを紹介していただけたら幸いです。
529デフォルトの名無しさん
2014/09/25(木) 20:55:19.71ID:1qsw9PIQ WindowsにVirtualboxをインストール
VirtualboxにLinuxをインストール
ゲストOSでmpi環境構築
以上
VirtualboxにLinuxをインストール
ゲストOSでmpi環境構築
以上
530デフォルトの名無しさん
2014/09/25(木) 23:09:57.41ID:77m4KJC/ >>529さん回答ありがとうございます。
早速試してきます。
早速試してきます。
531デフォルトの名無しさん
2014/09/26(金) 00:43:22.36ID:w0XQeQM8 すみません。再度質問します。
とりあえず、並列計算を行える環境にはなったのですが、
8コアで計算させていたら全てのコアで使用率が100%となりました。
計算速度は犠牲にしてよいので、使用率を50%程に低下させつつ動作させることは
可能でしょうか?
とりあえず、並列計算を行える環境にはなったのですが、
8コアで計算させていたら全てのコアで使用率が100%となりました。
計算速度は犠牲にしてよいので、使用率を50%程に低下させつつ動作させることは
可能でしょうか?
532デフォルトの名無しさん
2014/09/26(金) 06:29:58.28ID:IA039Vji ゲストOSが使用するCPU数を4コアに設定
4/8でCPU使用率50%
以上
4/8でCPU使用率50%
以上
533デフォルトの名無しさん
2015/02/21(土) 12:06:37.62ID:FlDtTMp/ うんこ
534デフォルトの名無しさん
2016/03/29(火) 09:26:01.42ID:/c8bAcK4 サッカーブッシュ日本代表日程ぷあたん(しゅっちょうまいくろ教育長交代)春文執行40代売上差額シュガーチョコ
https://www.youtube.com/watch?v=NDq1QoJY0nY宇ドナルドアナリストパワーストーンコーチングとしまえん
サッカーブッシュ日本代表日程古本屋よしたけしゅっちょうちょこしゅがー
ディーラー税務署天才開発者死亡詰みヨミドクターマイクロサービス不足
サッカーブッシュ日本代表日程ぷあたんシフト光金さかい強制バイト人権侵害問題
春分資源執行ニューヨーク低原価ぼったステーキソルトレイク福岡横浜新橋奴隷課金パチシフト強制バイト問題新潟米センター生残
コスメ24チャリティー隠れ40代生活保護プレイボーイバイトレードいたりあん接待問題
マスコミKARDローンケーオーサービス不足婚活パーティー寄付金執行原発ビジネス
FBIチャイニーズタイホテル売上事務所ガチャ決算ガチャキャンペーン(販売報道陣過激派組織向携帯最新情報提供終了
校長発言細心注意ノートン産廃エラー(著作権クレーム中国反応融資高額教育費)(中国捕鯨団体40代社員サッカーコメント
高額入学金ヤフウ新橋大学ヤフウ新橋理事長FX経費 おじや50代資産ガリバズフィード40代エリート
https://www.youtube.com/watch?v=NDq1QoJY0nY宇ドナルドアナリストパワーストーンコーチングとしまえん
サッカーブッシュ日本代表日程古本屋よしたけしゅっちょうちょこしゅがー
ディーラー税務署天才開発者死亡詰みヨミドクターマイクロサービス不足
サッカーブッシュ日本代表日程ぷあたんシフト光金さかい強制バイト人権侵害問題
春分資源執行ニューヨーク低原価ぼったステーキソルトレイク福岡横浜新橋奴隷課金パチシフト強制バイト問題新潟米センター生残
コスメ24チャリティー隠れ40代生活保護プレイボーイバイトレードいたりあん接待問題
マスコミKARDローンケーオーサービス不足婚活パーティー寄付金執行原発ビジネス
FBIチャイニーズタイホテル売上事務所ガチャ決算ガチャキャンペーン(販売報道陣過激派組織向携帯最新情報提供終了
校長発言細心注意ノートン産廃エラー(著作権クレーム中国反応融資高額教育費)(中国捕鯨団体40代社員サッカーコメント
高額入学金ヤフウ新橋大学ヤフウ新橋理事長FX経費 おじや50代資産ガリバズフィード40代エリート
535デフォルトの名無しさん
2016/08/19(金) 15:54:40.93ID:hNG+d2Rp windows10を2台とMSMPIで通信したいんだが
error 1825のセキュリティパッケージ固有のエラーとやらが出て通信できないんだ
firewallはオフにしてもだめ
OSはwindows HPC clusterとかじゃないとできなかったりする?
error 1825のセキュリティパッケージ固有のエラーとやらが出て通信できないんだ
firewallはオフにしてもだめ
OSはwindows HPC clusterとかじゃないとできなかったりする?
536デフォルトの名無しさん
2016/10/13(木) 07:16:32.67ID:aU3BNmFk SMPマシン数台のMPICH2環境を構築しようとしています。
とりあえず8コアマシンで1ノード1CPUでの環境は作り、ベンチマークなどをとってテストしている最中です。
さて、ここからSMP+MPICH2混在環境に移行しようとしてるんですが、SMP環境をアクティブにする方法が判りません。
どうしたらいいのでしょうか??
環境は
centos6.8
mpich1.21p1
です。
よろしくお願いします。
とりあえず8コアマシンで1ノード1CPUでの環境は作り、ベンチマークなどをとってテストしている最中です。
さて、ここからSMP+MPICH2混在環境に移行しようとしてるんですが、SMP環境をアクティブにする方法が判りません。
どうしたらいいのでしょうか??
環境は
centos6.8
mpich1.21p1
です。
よろしくお願いします。
537デフォルトの名無しさん
2017/01/09(月) 17:58:00.69ID:nq81pkaz SMPをアクティブにするってどういうことだろうか?
単純にOpenMPを使えば良いだろうに。
単純にOpenMPを使えば良いだろうに。
538デフォルトの名無しさん
2017/02/27(月) 23:58:25.54ID:UI1UeTdZ 初めてInfiniBand使ったけど爆速だなこりゃ。
539デフォルトの名無しさん
2017/08/25(金) 02:38:12.16ID:LiutTzVc OpenMPIを使うコードがinfinibandがある環境がない環境に比べ滅茶苦茶遅くて困った。
プロファイルとって調べたらopal_memory_ptmalloc2_int_mallocが一番時間食っていた。
コミュニケータは作るものの通信を一切しないテストコードなのにOpenMPIのmalloc系の関数が
何故に出てくんのかと思ったら、これglibcのmallocをフックしちゃうやつなのね。
mpirunに「--mca mpi_leave_pinned 0」を付けると無効化できて速度が元に戻ったけど、
このmpi_leave_pinnedはinfinibandのようなRDMA対応ネットワークのための設定なのに
有効化すると逆に遅くなるのが解せない・・・。
プロファイルとって調べたらopal_memory_ptmalloc2_int_mallocが一番時間食っていた。
コミュニケータは作るものの通信を一切しないテストコードなのにOpenMPIのmalloc系の関数が
何故に出てくんのかと思ったら、これglibcのmallocをフックしちゃうやつなのね。
mpirunに「--mca mpi_leave_pinned 0」を付けると無効化できて速度が元に戻ったけど、
このmpi_leave_pinnedはinfinibandのようなRDMA対応ネットワークのための設定なのに
有効化すると逆に遅くなるのが解せない・・・。
540デフォルトの名無しさん
2017/08/25(金) 03:05:28.93ID:LiutTzVc ググって見つけた論文「HPCクラウドの実現に向けた仮想化クラスタの性能評価」には
Infiniband使用時にMPI集団通信を向上させるために、実行時オプションとして
「--mca mpi_leave_pinned 0」を付加した
って記述があるが、OpenMPIのFAQによればそれだとメモリをpinできないので遅くなるはず。
結局Infinibandを正しく使うにはどう設定するべきなんだろうか・・・。
Infiniband使用時にMPI集団通信を向上させるために、実行時オプションとして
「--mca mpi_leave_pinned 0」を付加した
って記述があるが、OpenMPIのFAQによればそれだとメモリをpinできないので遅くなるはず。
結局Infinibandを正しく使うにはどう設定するべきなんだろうか・・・。
541デフォルトの名無しさん
2017/08/31(木) 00:38:03.64ID:CbVYdpce >>540だけど、OpenMPIのFAQを見たらメモリのpinningをデフォルトで有効にする仕様については
開発者で反対意見もあったらしい。そりゃそうだろう・・・。
そんなん必要なのはMPIで参照するデータだけなのに、システムのmallocごと差し替えるというのは
やりすぎではないか・・・。
開発者で反対意見もあったらしい。そりゃそうだろう・・・。
そんなん必要なのはMPIで参照するデータだけなのに、システムのmallocごと差し替えるというのは
やりすぎではないか・・・。
542デフォルトの名無しさん
2018/05/23(水) 21:50:25.15ID:Au5e7VGg 僕の知り合いの知り合いができたパソコン一台でお金持ちになれるやり方
役に立つかもしれません
グーグルで検索するといいかも『ネットで稼ぐ方法 モニアレフヌノ』
12MI6
役に立つかもしれません
グーグルで検索するといいかも『ネットで稼ぐ方法 モニアレフヌノ』
12MI6
543デフォルトの名無しさん
2018/07/05(木) 00:11:39.46ID:RfoszcD2 ES4
544デフォルトの名無しさん
2019/05/30(木) 23:53:17.14ID:Stoh1y6z お手軽にクリティカルセクション作る方法がないのはクソ
545「Microsoft Power Fx」登場
2021/03/03(水) 16:13:39.50ID:TcsaJvTP Excel関数ベースのプログラミング言語「Microsoft Power Fx」登場 オープンソースで公開予定:Microsoft Ignite 2021
https://asahi.5ch.net/test/read.cgi/newsplus/1614745763/l50
https://asahi.5ch.net/test/read.cgi/newsplus/1614745763/l50
546デフォルトの名無しさん
2022/01/01(土) 22:23:23.80ID:TCOZEf7v 新打法がいいね
547デフォルトの名無しさん
2023/09/10(日) 05:05:23.97ID:EXF1G7CS ホンマにそれがええんか?
■ このスレッドは過去ログ倉庫に格納されています
ニュース
- 江藤農相釈明「消費者への配慮足りなかった」 実際には定期的にコメは買っていると説明 ★4 [少考さん★]
- 石破首相、日本の財政はギリシャより「良くない」-減税をけん制 ★2 [少考さん★]
- 【芸能】永野芽郁、レギュラーラジオも出演辞退 ニッポン放送「ANNX」19日放送から 番組も終了 ★2 [Ailuropoda melanoleuca★]
- 車が子どもの列に突っ込んだか 小学生含む5人搬送 福岡 筑紫野 [香味焙煎★]
- 関西万博で「写真を見て絶句」 大屋根リング周辺に大量の虫が発生…ネットで話題に「不快すぎた」 [バイト歴50年★]
- 大阪万博のフランス館の美術品に虫が大量発生、元宝塚女優が苦言「フランスに謝りたい」 [muffin★]
- 🍏Mrs.GREEN APPLEファンスレ🏡
- 【安倍悲報】トランプ、移民が米市民権かけて争うリアリティー番組を検討🥺 [359965264]
- 🌝tuki.ファンスレ🏡
- 【悲報】万博2億円トイレ、またバチーン!と全面閉鎖🚽【定期】 [359965264]
- 農水大臣、『米を買ったことがない』発言を謝罪「米を買ったことがないような誤解を与えてしまい申し訳ない」 [918862327]
- 【画像】fc2ppvのオッパイモンスター、稼いだ金で大学に行ってしまうww [159091185]