スライド 1

Similar documents
Microsoft PowerPoint - KHPCSS pptx

NUMAの構成


86

Microsoft PowerPoint MPI.v...O...~...O.e.L.X.g(...Q..)

Microsoft PowerPoint - 演習2:MPI初歩.pptx

演習準備 2014 年 3 月 5 日神戸大学大学院システム情報学研究科森下浩二 1 RIKEN AICS HPC Spring School /3/5

Microsoft PowerPoint - 講義:片方向通信.pptx

Microsoft PowerPoint 並列アルゴリズム04.ppt

WinHPC ppt

演習 II 2 つの講義の演習 奇数回 : 連続系アルゴリズム 部分 偶数回 : 計算量理論 部分 連続系アルゴリズム部分は全 8 回を予定 前半 2 回 高性能計算 後半 6 回 数値計算 4 回以上の課題提出 ( プログラム + 考察レポート ) で単位

<4D F736F F F696E74202D C097F B A E B93C782DD8EE682E890EA97705D>

2 T 1 N n T n α = T 1 nt n (1) α = 1 100% OpenMP MPI OpenMP OpenMP MPI (Message Passing Interface) MPI MPICH OpenMPI 1 OpenMP MPI MPI (trivial p

Microsoft PowerPoint _MPI-01.pptx

情報処理演習 II

目 目 用方 用 用 方

MPI コミュニケータ操作

Microsoft PowerPoint - 講義:コミュニケータ.pptx

スライド 1

スライド 1

para02-2.dvi

かし, 異なったプロセス間でデータを共有するためには, プロセス間通信や特殊な共有メモリ領域を 利用する必要がある. このためマルチプロセッサマシンの利点を最大に引き出すことができない. こ の問題はマルチスレッドを用いることで解決できる. マルチスレッドとは,1 つのプロセスの中に複 数のスレッド

44 6 MPI 4 : #LIB=-lmpich -lm 5 : LIB=-lmpi -lm 7 : mpi1: mpi1.c 8 : $(CC) -o mpi1 mpi1.c $(LIB) 9 : 10 : clean: 11 : -$(DEL) mpi1 make mpi1 1 % mpiru

<4D F736F F F696E74202D C097F B A E B93C782DD8EE682E890EA97705D>

課題 S1 解説 C 言語編 中島研吾 東京大学情報基盤センター

演習準備

C/C++ FORTRAN FORTRAN MPI MPI MPI UNIX Windows (SIMD Single Instruction Multipule Data) SMP(Symmetric Multi Processor) MPI (thread) OpenMP[5]

Microsoft PowerPoint - scls_biogrid_lecture_v2.pptx


58 7 MPI 7 : main(int argc, char *argv[]) 8 : { 9 : int num_procs, myrank; 10 : double a, b; 11 : int tag = 0; 12 : MPI_Status status; 13 : 1 MPI_Init

講義の流れ 並列プログラムの概要 通常のプログラムと並列プログラムの違い 並列プログラム作成手段と並列計算機の構造 OpenMP による並列プログラム作成 処理を複数コアに分割して並列実行する方法 MPI による並列プログラム作成 ( 午後 ) プロセス間通信による並列処理 処理の分割 + データの

並列計算導入.pptx

コードのチューニング

MPI usage

DKA ( 1) 1 n i=1 α i c n 1 = 0 ( 1) 2 n i 1 <i 2 α i1 α i2 c n 2 = 0 ( 1) 3 n i 1 <i 2 <i 3 α i1 α i2 α i3 c n 3 = 0. ( 1) n 1 n i 1 <i 2 < <i

課題 S1 解説 Fortran 編 中島研吾 東京大学情報基盤センター

about MPI

2007年度 計算機システム演習 第3回

120802_MPI.ppt

Microsoft PowerPoint - ishikawa.ppt

115 9 MPIBNCpack 9.1 BNCpack 1CPU X = , B =

Microsoft PowerPoint - S1-ref-F.ppt [互換モード]

chap2.ppt

スライド 1

第8回講義(2016年12月6日)

Microsoft PowerPoint - 講習 _kido.pptx[読み取り専用]

プログラミング基礎

MPI () MPIMessage Passing Interface MPI MPI OpenMP 7 ( ) 1

Microsoft PowerPoint _MPI-03.pptx

MPI

Microsoft Word - 3new.doc

Microsoft PowerPoint - CproNt02.ppt [互換モード]

Fundamental MPI 1 概要 MPI とは MPI の基礎 :Hello World 全体データと局所データ グループ通信 (Collective Communication) 1 対 1 通信 (Point-to-Point Communication)

Microsoft PowerPoint - 阪大CMSI pptx

kiso2-09.key

Fundamental MPI 1 概要 MPI とは MPI の基礎 :Hello World 全体データと局所データタ グループ通信 (Collective Communication) 1 対 1 通信 (Point-to-Point Communication)

1.overview

Fundamental MPI 1 概要 MPI とは MPI の基礎 :Hello World 全体データと局所データタ グループ通信 (Collective Communication) 1 対 1 通信 (Point-to-Point Communication)

PowerPoint プレゼンテーション

Microsoft PowerPoint - MPIprog-F1.ppt [互換モード]

コードのチューニング

MPI MPI MPI.NET C# MPI Version2

Microsoft PowerPoint - MPIprog-C1.ppt [互換モード]

MPI 超 入門 (FORTRAN 編 ) 東京大学情報基盤センター C 言語編は以下 /ohshima/seminars/t2k201111/ (MPI による並列アプリケーション開発入門 2)

Gfarm/MPI-IOの 概要と使い方

Prog1_6th

スライド 1

Microsoft PowerPoint - MPIprog-C1.ppt [互換モード]

Microsoft PowerPoint - kougi7.ppt

slide5.pptx

XcalableMP入門

インテル® Xeon Phi™ コプロセッサー・システムにおけるインテル® MPI ライブラリーの使用

Taro-ビット処理(公開版).jtd

±é½¬£²¡§£Í£Ð£É½éÊâ

Microsoft PowerPoint - MPIprog-F1.ppt [互換モード]

02: 変数と標準入出力

Microsoft PowerPoint - MPIprog-C [互換モード]

Microsoft Word - C.....u.K...doc

char int float double の変数型はそれぞれ 文字あるいは小さな整数 整数 実数 より精度の高い ( 数値のより大きい より小さい ) 実数 を扱う時に用いる 備考 : 基本型の説明に示した 浮動小数点 とは数値を指数表現で表す方法である 例えば は指数表現で 3 書く

MPI によるプログラミング概要 C 言語編 中島研吾 東京大学情報基盤センター

XACC講習会

<4D F736F F F696E74202D D F95C097F D834F E F93FC96E5284D F96E291E85F8DE391E52E >

¥Ñ¥Ã¥±¡¼¥¸ Rhpc ¤Î¾õ¶·

第1回 プログラミング演習3 センサーアプリケーション

のプログラムはそのままでは 人間は理解できても コンピュータは理解できません 皆さんが作るプログラムはソースプログラム ( ソースファイル ) と呼ばれます C 言語では *.c という形式にファイルで作成します そのソースプログラムをコンピュータが理解できるようなデータ形式に変換することをコンパイ

PowerPoint プレゼンテーション

86 8 MPIBNCpack 15 : int n, myid, numprocs, i; 16 : double pi, start_x, end_x; 17 : double startwtime = 0.0, endwtime; 18 : int namelen; 19 : char pro

£Ã¥×¥í¥°¥é¥ß¥ó¥°(2018) - Âè11²ó – ½ÉÂꣲ¤Î²òÀ⡤±é½¬£² –

情報処理概論(第二日目)

gengo1-2

プログラミング基礎

PowerPoint プレゼンテーション

PowerPoint Presentation

PowerPoint Presentation

untitled

MPI によるプログラミング概要 Fortran 編 中島研吾 東京大学情報基盤センター

C 言語の式と文 C 言語の文 ( 関数の呼び出し ) printf("hello, n"); 式 a a+4 a++ a = 7 関数名関数の引数セミコロン 3 < a "hello" printf("hello") 関数の引数は () で囲み, 中に式を書く. 文 ( 式文 ) は

program7app.ppt

並列計算プログラミング超入門

£Ã¥×¥í¥°¥é¥ß¥ó¥°ÆþÌç (2018) - Â裵²ó ¨¡ À©¸æ¹½Â¤¡§¾ò·ïʬ´ô ¨¡

Transcription:

目次 2.MPI プログラミング入門 この資料は, スーパーコン 10 で使用したものである. ごく基本的な内容なので, 現在でも十分利用できると思われるものなので, ここに紹介させて頂く. ただし, 古い情報も含まれているので注意が必要である. 今年度版の解説は, 本選の初日に配布する予定である. 1/20

2.MPI プログラミング入門 (1) 基本 説明 MPI (message passing interface) とは並列計算を記述するための基本命令を書く方法.MPI により並列プログラムを記述することができる. といっても, そう多くの命令は必要なく, ほとんどの場合,MPI のごく基本的な命令を知っていれば並列プログラムを書くことはできる. 今回は C 言語の上で使う MPI の基本命令を紹介する. MPI により実現されるのは, 同一のプログラムを複数のプロセスが実行する形の並列計算である. 各プロセスは 名前 に相当するランク (rank) という番号を持っている. とくにルートプロセスのランクは 0 である. このランクを使って区別すれば, 同じプログラムでも, 異なる計算を実行することも可能. プロセス間でメッセージを送り合うことで, 情報を交換する. メッセージは一般には 1 つの配列 ( 文字や数の ) として受け渡す. send receive 2/20

(1) 基本 実例プログラム : hello.c send 注 ) 黒太字は おまじない receive #include "mpi.h int main(int argc, char *argv) { rank 1 rank 0 char msg[20]; int myrank; MPI_Status status; 状態を知るための変数 status の定義 MPI_Init( &argc, &argv ); 初期化 MPI_Comm_rank( MPI_COMM_WORLD, &myrank ); if (myrank == 0) { strcpy(msg, "Hello, there"); MPI_Send( msg, strlen(msg)+1, MPI_CHAR, 1, 99, MPI_COMM_WORLD); printf( message %s sent to rank %d n", msg, myrank); else { MPI_Recv(msg, 20, MPI_CHAR, 0, 99, MPI_COMM_WORLD, &status); printf("rank %d received: %s n", myrank, msg); MPI_Finalize(); 終了 return 0; 3/20

(1) 基本 実行例 % mpicc hello.c プログラム hello.c のコンパイル % mpirun -np 2./a.out 実行 ( プロセス数 2) 補足説明 命令 MPI_Comm_rank( MPI_COMM_WORLD, & 整数変数 ); MPI_Send( 変数 or 配列, データ長, 型, 送信先, 99, MPI_COMM_WORLD); MPI_Recv( 変数 or 配列, データ長, 型, 送信元, 99, MPI_COMM_WORLD, &status); MPI_ANY_SOURCE で任意の送信元を指定 MPIデータ型 MPI_CHAR char MPI_SHORT short MPI_INT int MPI_LONG long MPI_UNSIGNED_CHAR unsigned char MPI_UNSIGNED_SHORT unsinged short MPI_UNSIGNED unsinged int MPI_UNSIGNED_LONG unsinged long MPI_FLOAT float MPI_DOUBLE double MPI_LONG_DOUBLE long double 4/20

(1) 基本 #include "mpi.h int main(int argc, char *argv) { int myrank, p, sum, v, i; MPI_Status status; MPI_Init( &argc, &argv ); MPI_Comm_rank( MPI_COMM_WORLD, &myrank ); MPI_Comm_size( MPI_COMM_WORLD, &p ); if (myrank == 0) { sum = 0; for (i=1; i<p; i++) { 実例プログラム : sum.c 並列和 rank 1 以下でも お決まり rank 2 rank 3 MPI_Recv(&v, 1, MPI_INT, i, 99, MPI_COMM_WORLD, &status); sum = sum + v; else { MPI_Send(&myrank, 1, MPI_INT, 0, 99, MPI_COMM_WORLD); if (myrank == 0) printf("sum of all ranks = %d n", sum); MPI_Finalize(); return 0; rank p receive rank 0 5/20

(1) 基本 実行例 % mpicc sum.c プログラム sum.c のコンパイル % mpirun -np 4./a.out 実行 ( プロセス数 4) 補足説明 命令 MPI_Comm_size( MPI_COMM_WORLD, & 整数変数 ); 実行しているプロセスの個数を得る (2) 主従関係プログラム ( 次のページの例 ) 補足説明 命令 MPI_Recv( & 変数, 1, MPI_INT, MPI_ANY_SOURCE, 88, MPI_COMM_WORLD, &status ); status.mpi_source で送信元のランクを得る MPI_Comm_rank( MPI_COMM_WORLD, -1 ); すべてのプロセスを強制終了させる 6/20

~ プログラミング ガイド (2) 主従関係プログラム #include "mpi.h int main(int argc, char *argv) { int myrank, p, n = 1; 実例プログラム : master-worker.c rank 1 rank 2 rank 3 お決まり の 4 行 while(1) { if (myrank == 0) { MPI_Recv( &p, 1, MPI_INT, MPI_ANY_SOURCE, 88, MPI_COMM_WORLD, &status ); printf("message from rank %d (= %d) n", p, status.mpi_source); n++; if( n > 11 ) { MPI_Abort( MPI_COMM_WORLD, -1 ); break; else { sleep(myrank); MPI_Send( &myrank, 1, MPI_INT, 0, 88, MPI_COMM_WORLD ); MPI_Finalize(); return 0; rank p receive & abort rank 0 7/20

~ プログラミング ガイド (3) 集合通信系プログラム 実例プログラム : bcast.c #include "mpi.h rank 0 int main(int argc, char *argv) { rank 1 int myrank, p, sum, u, v, i; お決まり の4 行 rank 3 if(myrank == 2) v = 7; MPI_Bcast (&v, 1, MPI_INT, 2, MPI_COMM_WORLD); if (myrank == 0){ sum = 0; for (i=1; i<p; i++){ MPI_Recv(&u, 1, MPI_INT, i, 99, MPI_COMM_WORLD, &status); sum = sum + u; else { u = v * myrank; MPI_Send(&u, 1, MPI_INT, 0, 99, MPI_COMM_WORLD); if (myrank == 0) printf("sum of all ranks*v = %d n", sum); MPI_Finalize(); return 0; bcast rank p rank 2 8/20

~ プログラミング ガイド (3) 集合通信系プログラム 実例プログラム : reduce.c #include "mpi.h int main(int argc, char *argv) { int myrank, p, sum, v; お決まり の4 行 v = myrank; MPI_Reduce(&v, &sum, 1, MPI_INT, MPI_SUM, 0, MPI_COMM_WORLD); if (myrank == 0) printf("sum of all ranks = %d n", sum); MPI_Finalize(); return 0; reduce rank 1 rank 2 rank 3 rank 0 rank p 9/20

(3) 集合通信系 補足説明 命令 MPI_Bcast ( 変数など, データ長, 型, ルート, MPI_COMM_WORLD); ルートとして指定されたプロセスから全プロセスの対応する変数にデータを送る MPI_Reduce ( 変数, 答え用変数, データ長, 型, 演算, ルート, MPI_COMM_WORLD); ルートとして指定されたプロセスに対し全プロセスの変数の値を元に 演算 した 答え を送る演算の種類 MPI_MAX( 最大 ),MPI_MIN( 最小 ), MPI_SUM( 合計 ),MPI_PROD( 積 ), MPI_LAND( 論理 AND), MPI_BAND( ビットAND), MPI_LOR( 論理 OR), MPI_BOR( ビットOR), MPI_MAXLOC( 最大と位置 ), MPI_MINLOC( 最小と位置 ) 注 ) 通常にプログラミングするより速い場合が多い 10/20