NUMAの構成

Similar documents
スライド 1

Microsoft PowerPoint - KHPCSS pptx

WinHPC ppt

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

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

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

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

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

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

コードのチューニング

目 目 用方 用 用 方

para02-2.dvi

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

Microsoft PowerPoint _MPI-01.pptx

演習準備

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

chap2.ppt

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

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

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

情報処理演習 II

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

スライド 1

並列計算導入.pptx

スライド 1

Microsoft PowerPoint _MPI-03.pptx

コードのチューニング

Microsoft PowerPoint - 演習1:並列化と評価.pptx

スライド 1

about MPI

MPI コミュニケータ操作

スライド 1


86

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

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

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

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

PowerPoint プレゼンテーション

MPI usage

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

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

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

MPI MPI MPI.NET C# MPI Version2

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

MPI

Microsoft PowerPoint - scls_biogrid_lecture_v2.pptx

1.overview

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

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

Microsoft PowerPoint - GPGPU実践基礎工学(web).pptx

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

120802_MPI.ppt

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

NUMAの構成

XcalableMP入門

untitled

PowerPoint プレゼンテーション

Microsoft PowerPoint - ishikawa.ppt

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

CS

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

Microsoft PowerPoint ppt

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

02: 変数と標準入出力

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

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

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

untitled

XACC講習会

演算増幅器

内容に関するご質問は まで お願いします [Oakforest-PACS(OFP) 編 ] 第 85 回お試しアカウント付き並列プログラミング講習会 ライブラリ利用 : 科学技術計算の効率化入門 スパコンへのログイン テストプログラム起動 東京大学情報基盤セ

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

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

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

Microsoft PowerPoint - 第10回講義(2015年12月22日)-1 .pptx

program7app.ppt

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

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

コマンドラインから受け取った文字列の大文字と小文字を変換するプログラムを作成せよ 入力は 1 バイトの表示文字とし アルファベット文字以外は変換しない 1. #include <stdio.h> 2. #include <ctype.h> /*troupper,islower,isupper,tol

05-opt-system.ppt

Microsoft PowerPoint - sps14_kogi6.pptx

Microsoft Word - Cプログラミング演習(12)

Microsoft PowerPoint - 阪大CMSI pptx

02: 変数と標準入出力

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

Microsoft PowerPoint - OpenMP入門.pptx

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

nakao

memo

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

Microsoft PowerPoint - kougi9.ppt

Cプログラミング1(再) 第2回

Microsoft Word - 3new.doc

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

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

Microsoft PowerPoint - compsys2-06.ppt

PowerPoint プレゼンテーション

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

PowerPoint プレゼンテーション

Transcription:

メッセージパッシング プログラミング 天野

共有メモリ対メッセージパッシング 共有メモリモデル 共有変数を用いた単純な記述自動並列化コンパイラ簡単なディレクティブによる並列化 :OpenMP メッセージパッシング 形式検証が可能 ( ブロッキング ) 副作用がない ( 共有変数は副作用そのもの ) コストが小さい

メッセージパッシングモデル 共有変数は使わない 共有メモリがないマシンでも実装可能 クラスタ 大規模マシンで利用可能 ここではMPIを紹介する

ブロッキング通信 (Blocking: ランデブ ) Send Receive Send Receive

バッファ付き通信 Send Receive Send Receive

ノンブロッキングのメッセージ通信 Send Other Receive Job

PVM (Parallel Virtual Machine) 送り側にはバッファが一つ存在 受信側にはブロッキング ノンブロッキングの両方が可能 バリア同期を利用

MPI (Message Passing Interface) 1 対 1の通信ではPVMのスーパーセット グループ通信 多様な通信をサポート Communication tagでエラーチェック

MPI のプログラミングモデル 基本的には SPMD (Single Program Multiple Data Streams) 同じプログラムが複数プロセスで実行 プロセス番号を識別すれば個別のプログラムが走る MPI を用いたプログラム 指定した数のプロセスが生成される NORA マシンまたは PC クラスタの各ノードに分散される

交信の種類 1 対 1 転送 送信側と受信側が対応する関数を実行きちんと対応していないとダメ 集合的な通信 複数のプロセス間での通信共通の関数を実行 1 対 1 転送で置き換え可能だが 効率がやや向上する場合がある

基本的な MPI 関数 この 6 つが使えれば多くのプログラムが書ける! MPI_Init() MPI Initialization MPI_Comm_rank() Get the process # MPI_Comm_size() Get the total process # MPI_Send() Message send MPI_Recv() Message receive MPI_Finalize() MPI termination

その他の MPI 関数 同期 計測用 MPI_Barrier() バリア同期 MPI_Wtime() 時刻を持ってくる ノンブロッキング転送 転送要求とチェックにより構成される 待ち時間中に別の関数を実行可能

例題 1: #include <stdio.h> 2: #include <mpi.h> 3: 4: #define MSIZE 64 5: 6: int main(int argc, char **argv) 7: { 8: char msg[msize]; 9: int pid, nprocs, i; 10: MPI_Status status; 11: 12: MPI_Init(&argc, &argv); 13: MPI_Comm_rank(MPI_COMM_WORLD, &pid); 14: MPI_Comm_size(MPI_COMM_WORLD, &nprocs); 15: 16: if (pid == 0) { 17: for (i = 1; i < nprocs; i++) { 18: MPI_Recv(msg, MSIZE, MPI_CHAR, i, 0, MPI_COMM_WORLD, &status); 19: fputs(msg, stdout); 20: } 21: } 22: else { 23: sprintf(msg, "Hello, world! (from process #%d) n", pid); 24: MPI_Send(msg, MSIZE, MPI_CHAR, 0, 0, MPI_COMM_WORLD); 25: } 26: 27: MPI_Finalize(); 28: 29: return 0; 30: }

初期化と終結 int MPI_Init( int *argc, /* pointer to argc */ char ***argv /* pointer to argv */ ); argc と argvはコマンドラインからの引数. int MPI_Finalize(); 例 MPI_Init (&argc, &argv); MPI_Finalize();

コミュニケータ制御用の関数コミュニケータは通信用の空間 MPI_COMM_WORLD は 全プロセス用のコミュニケーター > 今回はこれを使う int MPI_Comm_rank( MPI_Comm comm, /* communicator */ int *rank /* process ID (output) */ ); int MPI_Comm_size( MPI_Comm comm, /* communicator */ int *size /* number of process (output) */ ); プロセス ID( ランク ) を返す 全プロセス数を返す 例 : int pid, nproc; MPI_Comm_rank(MPI_COMM_WORLD, &pid); 自分のプロセスID MPI_Comm_rank(MPI_COMM_WORLD,&nproc); 全プロセス数

MPI_Send 1 対 1 のメッセージ送信 int MPI_Send( void *buf, /* send buffer */ int count, /* # of elements to send */ MPI_Datatype datatype, /* datatype of elements */ int dest, /* destination (receiver) process ID */ int tag, /* tag */ MPI_Comm comm /* communicator */ ); MPI_Send(msg, MSIZE, MPI_CHAR, 0,0, MPI_COMM_WORLD); メッセージ用文字列配列 msg の中の文字を MSIZE 分プロセス 0( タグも 0) で送る タグが一致した MPI_Recv でのみ受け取ることが可能

MPI_Recv 1 対 1 のメッセージ受信 int MPI_Recv( void *buf, /* receiver buffer */ int count, /* # of elements to receive */ MPI_Datatype datatype, /* datatype of elements */ int source, /* source (sender) process ID */ int tag, /* tag */ MPI_Comm comm, /* communicator */ MPI_Status /* status (output) */ ); char msg[msize] MPI_Status status; MPI_Recv(msg, MSIZE, MPI_CHAR, 1, 0, MPI_COMM_WORLD, &status); fputs(msg, stdout); プロセス 1 からのタグ 0 で送って来たサイズ MSIZE の文字列を受信し msg に入れる status は受信したメッセージの状態を示す

MPI_Bcast 全プロセスに対してメッセージを転送 int MPI_Bcast( void *buf, /* send buffer */ int count, /* # of elements to send */ MPI_Datatype datatype, /* datatype of elements */ int root, /* Root processor number */ MPI_Comm comm /* communicator */ ); if (pid ==0) a=1.0; MPI_Bcast(&a,1,MPI_DOUBLE, 0, MPI_COMM_WORLD); pid 0 が他の全てに対して a=1.0 を転送する

メッセージのデータタイプ 通常のデータサイズに対応する MPI のデータサイズを指定 MPI_CHAR char MPI_INT int MPI_FLOAT float MPI_DOUBLE double etc.

コンパイルと実行 Web から mpiex.tar をダウンロード tar xvf mpiex.tar cd mpiex % mpicc o hello hello.c % mpirun np 4./hello Hello, world! (from process #1) Hello, world! (from process #2) Hello, world! (from process #3)

演習問題 配列 x[4096] がある. この 2 乗和を取る計算を MPI ライブラリで並列化せよ sum = 0.0; for (i=0; i<n; i++) for(j=0; j<n; j++) sum += (x[i]-x[j])*(x[i]-x[j]);

解説 reduct.cを元にする xを全プロセスに転送 各プロセスでは部分和を計算 sum=0.0; for (i=n/nproc*pid; i<n/nproc*(pid+1); i++) for(j=0; j<n; j++) sum += (x[i]-x[j])*(x[i]-x[j]); 部分和を 0 に転送 0 で総和を取る 1-4プロセスで実行してみて 実行時間を測定せよ あんまり早くならないと思う 結果が微妙に違うかも ( 加算の順番が狂うので )