Message Passing Interface (MPI) 統合スレ
■ このスレッドは過去ログ倉庫に格納されています
MPIによる並列プログラミングについて話し合う統合スレッドです。
とりあえず本家
http://www-unix.mcs.anl.gov/mpi/
>>496さんの言った通り直しても通りませんでした…。
正直自分の知識じゃ限界を感じているので
代わりにやってくれる方がいれば報酬払ってもいいです。
最大2万円までしか出せませんが…。メール待ってます。 openmpi使ってるんだがnohupが効かねぇ・・・
端末PC落とすと計算やめちゃうんだが MPIの勉強始めようと思うんだけどMPI3ってのはまだ出てないの? MPI
妖精がいっぱい同時に働く。
拍子を合わせそこなうと、ぐだぐだ。
プログラムは最初から並列前提で書く方が
いいかもしてない。非並列からの移行は面倒臭い。
OpenMP
手がいっぱいある妖精が独りで頑張る。
並列化はかなり楽。
混在できるけどね。
gfortran とか無料コンパイラがOpenMPに
対応しているし、マルチコアCPUが
普通になってきた今日、
小規模から中規模ならOpenMPがオススメ。
大規模スパコン使う可能性があるなら、
MPI で最初から組むべし。 MPIにおすすめのスイッチングハブを教えてください LANポートにあきがあるならノードでリングベース組むのが勉強になるで
俺は混在は結構ありだとおもうで
クラスタとかなら通信時間削減が期待できる gigabit ethernetからInfiniBandに変えた場合のベンチマーク結果とかありますか?
アプリケーションにも依るとは思うのですが、ある程度、どのくらい向上するのか知りたいのですが
♪∧,,∧
♪∧,,∧・ ω・)
∧,,∧・ ω・) )っ
(・ ω・) )っ__フ
(っ )っ__フ(_/彡
( __フ(_/彡
(_/彡♪ www.science-academy.jp/showcase/11/pdf/P-108_showcase2012.pdf
↑こいつとか、国泰寺高校もそうだけど、学生でもこういうMPIのシステムを構築できる時代なんだな。
ただ、それゆえに性能測定しかしていない。
テーマを持たないと意味ないよな。
それに関して指導できる教師が高校にいるものだろうか? 動的に確保する要素を含む構造体のデータタイプを作るにはどうしたらいいのでしょうか。
int MPI_Type_struct(int count,
int blocklens[],
MPI_Aint indices[],
MPI_Datatype old_types[],
MPI_Datatype *newtype)
のMPI_Aint indices[]のアドレス計算部分で構造体の動的に確保した要素のせいで
アドレスが一部分に固まってないのでよくわかりません。 >>508
要素を一つずつ配布するしかないんじゃないか 多体問題とか計算させて可視化とか
ありきたりだけどインパクトはあるよね
そんなに難しくないし みなさんI/O(特に出力)はどうしてますか?
netCDFとかやんないといけないんですかね 初めて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)
もし宜しければアドバイスお願いします mpi_err_buffer invalid buffer pointer でググると、
Stackoverflows上のQ&Aなどの情報が見つけられるね >>513
レス有難うございます。
ググってみましたが、英語が堪能でないため理解できていない状態です orz
ですがテストプログラムで起きる条件を見つけることが出来ました。
スレッドでRecvで待ち受けている状態で同じランク内でIsend, Irecvで
色々送受信する時にエラーが発生するようです。
RecvをIrecvに変更してタグを分ければエラーが発生しないようですが、
まだ良く見ていないのでなんとも言えない状態です。
コミュニケータとかタグをよく理解していなくてよく分からないのですが、
何となく通信を分けれればいいな程度ならタグで分けるでOKです? ランクを指定してfinalizeに到達したか調べる方法はないですか? MPI の勉強のために、コードの主要部分は C で書かれていて、
具体的な計算部分は fortran77 で書かれたサブルーチンを
呼んでいる混在コードを MPI 並列化したいと思っています。
当面の目標は、MPI の初期化・終了部分などを C の部分で書いて、
fortran で書かれている部分に具体的な指示行を入れて並列化を
することなのですが、私の勉強不足で、最初からつまづいている
状態です。
C の部分に
MPI_Init(&argc, &argv);
MPI_Finalize();
を入れて、 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 の基礎が分かっておらず、全くの素人質問で申し訳ありませんが、
ご助言など頂けますと助かります。 FORTRANはしばらく触っていないけど、includeは正しいの?
私もMPIプログラムは素人だけど疑問は何点か有るよ
疑問1、MPIを含まないCとFORTRANの混成は問題なく作れるのか?
疑問2、C又はFORTRAN単独言語の時にMPIのプログラムは作れるのか?
疑問3、C、FORTRAN、MPIのバージョンはいくつ?また実装系は何ですか?
で話は少し変わってくるんじゃないかな アドバイス頂きありがとうございます。
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
だけですが、それが正しいかどうかは自信がありません。
何かご助言などありましたらお教え頂けるとありがたいです。 includeはC言語の書き方に見えたんで書いたんだけど・・・
include 'mpif.h' とか書くんじゃない?
intelのコンパイラは使ったこと無いからわからないけどね
疑問2については簡単なプログラムを(rankを表示する)書いてみたらいいんじゃないと言う意味で書きました 説明不足ですみませんが、先の include は FORTRAN の部分に挿入した
ものです。別途 C の部分には、既に #include "mpi.h" と書いていますが、
もしかして、include 文は C の部分に書いておけば、あらためて
FORTRAN の部分には書く必要はないのでしょうか???
2 については、C も FORTRAN も簡単なプログラムを書くことで、
MPI が動作する(rank が表示される)ことを確認しています。
ただ、今回のような C の中に FORTRAN が入れ子になっている状態での
MPI の書き方がわからず(FORTRAN の subroutine を呼んでいる箇所の
前後で MPI の指示文を書いてもダメなのでしょうね?)、困っています。 テストしていないので話半分で聞いて下さい。
まず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)
小さなプログラムで書き方をテストしてからやった方がいいのでは? 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 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 >> 522 さん
ご返信が遅くなり大変申し訳ありませんでした。
この度はコードのご指導まで頂き、本当にありがとうございました!
私の環境は intel 環境で、不勉強もありなかなか上手くいきません
でしたが、参考にさせて頂きつつ、なんとか
mpiifort -c rank.f
mpiicc -o a.out main.c rank.o -lifcore -limf
mpirun -np 4 a.out
で動きました!嬉しいです!!
この度は、ご助言頂き本当にありがとうございました!! おるでw
最近はMPIのインストール方法とか使用方法とかを説明する記事やドキュメントが多いから、わざわざ2ちゃんのスレにカキコするまでもないのではないかな… プログラミング初心者ですが質問させてください。
フリーウェアだけでfortranのmpiを用いた並列計算環境って用意できますか?
OSはwindowsです。色々解説サイトを回ったのですが、OSがwinで
フリーウェアという条件に一致するものがありません。
解説サイトか、フリーウェアを紹介していただけたら幸いです。 WindowsにVirtualboxをインストール
VirtualboxにLinuxをインストール
ゲストOSでmpi環境構築
以上 >>529さん回答ありがとうございます。
早速試してきます。 すみません。再度質問します。
とりあえず、並列計算を行える環境にはなったのですが、
8コアで計算させていたら全てのコアで使用率が100%となりました。
計算速度は犠牲にしてよいので、使用率を50%程に低下させつつ動作させることは
可能でしょうか? ゲストOSが使用するCPU数を4コアに設定
4/8でCPU使用率50%
以上 サッカーブッシュ日本代表日程ぷあたん(しゅっちょうまいくろ教育長交代)春文執行40代売上差額シュガーチョコ
https://www.youtube.com/watch?v=NDq1QoJY0nY宇ドナルドアナリストパワーストーンコーチングとしまえん
サッカーブッシュ日本代表日程古本屋よしたけしゅっちょうちょこしゅがー
ディーラー税務署天才開発者死亡詰みヨミドクターマイクロサービス不足
サッカーブッシュ日本代表日程ぷあたんシフト光金さかい強制バイト人権侵害問題
春分資源執行ニューヨーク低原価ぼったステーキソルトレイク福岡横浜新橋奴隷課金パチシフト強制バイト問題新潟米センター生残
コスメ24チャリティー隠れ40代生活保護プレイボーイバイトレードいたりあん接待問題
マスコミKARDローンケーオーサービス不足婚活パーティー寄付金執行原発ビジネス
FBIチャイニーズタイホテル売上事務所ガチャ決算ガチャキャンペーン(販売報道陣過激派組織向携帯最新情報提供終了
校長発言細心注意ノートン産廃エラー(著作権クレーム中国反応融資高額教育費)(中国捕鯨団体40代社員サッカーコメント
高額入学金ヤフウ新橋大学ヤフウ新橋理事長FX経費 おじや50代資産ガリバズフィード40代エリート windows10を2台とMSMPIで通信したいんだが
error 1825のセキュリティパッケージ固有のエラーとやらが出て通信できないんだ
firewallはオフにしてもだめ
OSはwindows HPC clusterとかじゃないとできなかったりする? SMPマシン数台のMPICH2環境を構築しようとしています。
とりあえず8コアマシンで1ノード1CPUでの環境は作り、ベンチマークなどをとってテストしている最中です。
さて、ここからSMP+MPICH2混在環境に移行しようとしてるんですが、SMP環境をアクティブにする方法が判りません。
どうしたらいいのでしょうか??
環境は
centos6.8
mpich1.21p1
です。
よろしくお願いします。 SMPをアクティブにするってどういうことだろうか?
単純にOpenMPを使えば良いだろうに。 初めてInfiniBand使ったけど爆速だなこりゃ。 OpenMPIを使うコードがinfinibandがある環境がない環境に比べ滅茶苦茶遅くて困った。
プロファイルとって調べたらopal_memory_ptmalloc2_int_mallocが一番時間食っていた。
コミュニケータは作るものの通信を一切しないテストコードなのにOpenMPIのmalloc系の関数が
何故に出てくんのかと思ったら、これglibcのmallocをフックしちゃうやつなのね。
mpirunに「--mca mpi_leave_pinned 0」を付けると無効化できて速度が元に戻ったけど、
このmpi_leave_pinnedはinfinibandのようなRDMA対応ネットワークのための設定なのに
有効化すると逆に遅くなるのが解せない・・・。 ググって見つけた論文「HPCクラウドの実現に向けた仮想化クラスタの性能評価」には
Infiniband使用時にMPI集団通信を向上させるために、実行時オプションとして
「--mca mpi_leave_pinned 0」を付加した
って記述があるが、OpenMPIのFAQによればそれだとメモリをpinできないので遅くなるはず。
結局Infinibandを正しく使うにはどう設定するべきなんだろうか・・・。 >>540だけど、OpenMPIのFAQを見たらメモリのpinningをデフォルトで有効にする仕様については
開発者で反対意見もあったらしい。そりゃそうだろう・・・。
そんなん必要なのはMPIで参照するデータだけなのに、システムのmallocごと差し替えるというのは
やりすぎではないか・・・。 僕の知り合いの知り合いができたパソコン一台でお金持ちになれるやり方
役に立つかもしれません
グーグルで検索するといいかも『ネットで稼ぐ方法 モニアレフヌノ』
12MI6 お手軽にクリティカルセクション作る方法がないのはクソ Excel関数ベースのプログラミング言語「Microsoft Power Fx」登場 オープンソースで公開予定:Microsoft Ignite 2021
https://asahi.5ch.net/test/read.cgi/newsplus/1614745763/l50 ■ このスレッドは過去ログ倉庫に格納されています