忍者ブログ
日々の研究生活のメモ書きなど
計算に11時間かかるッスって言ったら並列化すればいいじゃん
なんならコードの並列化をやってあげる
という優しい言葉を受けて初めての並列化に手を出してしまった・・・・
わからないことだらけなのでメモしておく



まずはMPIのインストール
省略




■ 参考 : MPI Hello World

上記のサイトを参考にしてテストコードを書いてみる
途中まで読んで英語だったからめんどくなった・・・


■ 参考 : MPI「超」入門(C言語編) - 東京大学
↑難しいすぎる、猿の私には上っ面しかわからんかった

■ 参考 : MPIを用いた並列プログラミングの概要


こっちに日本語の文章があったのでこっちを見て行く

大事なのは「各プロセスは同じことをやるがデータがそれぞれ異なる、大規模なデータを分割し、各部分について各プロセスが計算をする」ということだと思う
並列のためにでかいデータを分割する、というのは初めてなので工夫しないといけないなぁ〜
スライドの中盤にも、「領域分割」としてそのことが書いてあった

・PE : Processing Elementの略、ここではプロセスという意味で使っているらしい

・MPIのプロセス番号は0から始まる、なので8プロセス走らせる場合は0~7が割り当てられる

・MPIのコードのコンパイラはgccではなくて、mpiccというのを使う

・MPIに関連した変数名はMPIで始まっている
 なので、ユーザー独自の変数としてMPIなんとかは使わない方がいい
#include <mpi.h>
まぁ、こういうヘッダーファイルがいるんだろう
インストールがうまくいってPATHがきちんと通っていれば問題ないはず
MPI_Init(&argc,&argv);

MPI_Finalize();
すべての並列化処理は MPI_Init から MPI_finalize の間で書かれなければならない
MPI_Comm_size(MPI_COMM_WORLD,&numprocs);
必須ではないらしい
これで総プロセス数の取得をしているらしい
numprocsがプロセス数
MPI_Comm_rank(MPI_COMM_WORLD,&myid);
起動した各プロセスにはそれぞれ「ランク」と呼ばれる値が割り当てられ、それを取得する関数
ランク値は他のプロセスを指定して通信するときとかに使うらしい


便利そうなのは
MPI_Barrier
すべてのプロセスの同期を取ってくれる関数
すべてのプロセスがこのサブルーチンを通らない限り、次のステップには進まない

と思ったけど「主にデバッグに使う、オーバーヘッドが大きいので実用計算には使わない方が無難」と書いてあるわ・・・・
sprintf(FileName, "%d.txt", MyRank);
のように各プロセスの通し番号を使うこともできる


MPIはCPU core毎にMPIプロセスを実行する
Rank数はコアの数に等しい

hostfileのフォーマットは
node01 slots=4
node02 slots=4
node03 slots=4
node04 slots=4
node05 slots=4
みたいな感じらしい
slotsには各ノードのCPU数を指定する


プロセスごとに通信(送信/受信)とかもできるらしいが、そんな難しいのはまだいらないと思うので・・・
今やりたいのは、単純に1つのコードを複数のプロセスに分担させて並列で走らせたいだけ





(2016/10/1 追記)

■ 参考 : 技術コラム

この記事の第50回〜58回あたりはMPIの並列化について説明されていて、わかりやすかった














PR
この記事にコメントする
Name
Title
Color
E-Mail
URL
Comment
Password   Vodafone絵文字 i-mode絵文字 Ezweb絵文字
プロフィール
HN:coffee
職業:物理屋(自称)
趣味:映画鑑賞、登山
出身:大阪府の南の田舎
自己紹介:
#include <stdio.h>
#include "MyProfile.h"

#define TWITTER coffee_pote

#ifdef RICH_FLAG
// ↑いつも支援いただきありがとうございます m(_ _)m
#define WISH_LIST
amazonのほしい物リスト
#endif


int main(void){

printf("\n");
printf("あけましておめでとうございます\n");
printf("今年もどうぞよろしくお願いします\n");
printf("\n");
printf("猿でもわかるgnuplot を執筆中\\
少し追記しました\n");
/* 最終更新 2018/01/01 */
return 0;

}
カウンター
ブログ内検索
ツイートするボタン
Flickr

Template "simple02" by Emile*Emilie
忍者ブログ [PR]