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

Similar documents
untitled

Microsoft PowerPoint _MPI-03.pptx

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

演習準備

(Microsoft PowerPoint \211\211\217K3_4\201i\216R\226{_\211\272\215\342\201j.ppt [\214\335\212\267\203\202\201[\203h])

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

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

コードのチューニング

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

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

MPI usage

並列計算導入.pptx

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

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

PowerPoint プレゼンテーション

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

演習1: 演習準備

目 目 用方 用 用 方

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

WinHPC ppt

untitled

コードのチューニング

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

86


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

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

研究背景 大規模な演算を行うためには 分散メモリ型システムの利用が必須 Message Passing Interface MPI 並列プログラムの大半はMPIを利用 様々な実装 OpenMPI, MPICH, MVAPICH, MPI.NET プログラミングコストが高いため 生産性が悪い 新しい並

120802_MPI.ppt

I I / 47

(Microsoft PowerPoint \215u\213`4\201i\221\272\210\344\201j.pptx)

Microsoft PowerPoint - 09.pptx


Microsoft Word ●IntelクアッドコアCPUでのベンチマーク_吉岡_ _更新__ doc

Page 2 本資料は, 東北大学サイバーサイエンスセンターと NEC の共同により作成され, 大阪大学サイバーメディアセンターの環境で実行確認を行い, 修正を加えたものです. 無断転載等は, ご遠慮下さい.

GeoFEM開発の経験から

openmp1_Yaguchi_version_170530

2012年度HPCサマーセミナー_多田野.pptx

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

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

PowerPoint Presentation

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

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

Microsoft PowerPoint - 5Chap15.ppt

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

Microsoft PowerPoint - lec10.ppt

Sae x Sae x 1: 1. {x (i) 0 0 }N i=1 (x (i) 0 0 p(x 0) ) 2. = 1,, T a d (a) i (i = 1,, N) I, II I. v (i) II. x (i) 1 = f (x (i) 1 1, v(i) (b) i (i = 1,

Transcription:

講義 2& 演習 1 プログラム並列化と性能評価 神戸大学大学院システム情報学研究科横川三津夫 yokokawa@port.kobe-u.ac.jp 2014/3/5 RIKEN AICS HPC Spring School 2014: プログラム並列化と性能評価 1

2014/3/5 RIKEN AICS HPC Spring School 2014: プログラム並列化と性能評価 2 2 次元温度分布の計算 ( 定常問題 ) 問題 2 次元正方形領域 [0,1] [0,1] での熱伝導問題 0 境界条件 u(0, y) = 0 u(1, y) = 0 u(x, 0) = 0 u(x, 1) = sin(πx) 十分な時間が経った後での温度分布はどうなるか? 演習用のプログラムファイルは, 以下のディレクトリに置いてありますので, 利用して下さい. Fortran 言語版 /tmp/school/ex1/heat2d.f90 c 言語版 /tmp/school/ex1/heat2d.c

2014/3/5 RIKEN AICS HPC Spring School 2014: プログラム並列化と性能評価 3 演習 : ヤコビ法の並列化と性能評価 OpenMPによる並列化 弱スケーリング 実行時間計測 強スケーリング 実行時間計測 MPI による並列化 mpi_sendrecv 関数強スケーリング, 弱スケーリング 実行時間計測 Hybrid(MPI+OpenMP) による並列化強スケーリング, 弱スケーリング 実行時間計測 強スケーリング並列化では反復回数が変わらないことを確認すること

2014/3/5 RIKEN AICS HPC Spring School 2014: プログラム並列化と性能評価 4 OpenMP による並列化 緩和ループ内部のループに,OpenMP 指示行を挿入して並列化する.!$omp parallel do, または #pragma omp parallel for reduction 変数があることに注意!! 緩和ループ部分の実行時間を計測する. omp_get_wtime() 関数 強スケーリングの評価環境変数 OMP_NUM_THREADS を 1,2,4,8,16 と変化させて実行時間を計測し, 実行時間が短縮されていることを確認する. 弱スケーリングの評価一つのスレッドの担当するデータの大きさを同じにして, スレッド数を 1, 2,4,8,16 と変化させて実行時間を計測する. 緩和ループの回数が変化することに注意!!

2014/3/5 RIKEN AICS HPC Spring School 2014: プログラム並列化と性能評価 5 MPI による並列化 領域分割により MPI 並列化 ( プロセス並列化 ) を行う. 各プロセスは, 部分の計算を担当する. 境界は条件として与えられているので, 計算しないことに注意

2014/3/5 RIKEN AICS HPC Spring School 2014: プログラム並列化と性能評価 6 MPI による並列化 各プロセスでの計算には, 上下の部分の値あることに注意. 上下部分の値は,mpi_sendrecv 関数で転送する. が必要で

2014/3/5 RIKEN AICS HPC Spring School 2014: プログラム並列化と性能評価 7 mpi_sendrecv 関数の使い方 (1/3) 2 次元配列がブロック分割されているとする. このとき, 自分の要素に隣接する隣プロセスの要素を持ってくるようなプログラムを作る. 2 次元配列 プロセス 0 プロセス 1 プロセス 2 プロセス 3 ブロック分割 両隣のプロセスから 1 列を受信 ( 受信用の領域を確保しておく )

2014/3/5 RIKEN AICS HPC Spring School 2014: プログラム並列化と性能評価 8 mpi_sendrecv 関数の使い方 (2/3) 配列の確保自プロセスの担当範囲は jstart ~ jend 列受信領域を考慮し,jstart-1 ~ jend+1 列の領域を確保 mpi_sendrecv による送受信まず, 上隣に jend 列を送り, 下隣から jstart-1 列に受信次に, 下隣に jstart 列を送り, 上隣から jend+1 列に受信両端のプロセスは, ダミープロセス (MPI_PROC_NULL) と送受信するようにする. MPI_sendrecv で同じように記述できる. 第 1 の sendrecv 第 2 の sendrecv

2014/3/5 RIKEN AICS HPC Spring School 2014: プログラム並列化と性能評価 9 mpi_sendrecv 関数の使い方 (3/3) 上下のプロセスのプロセス番号を計算 ( 存在しない場合は MPI_PROC_NULL とする ) bottom = myrank 1 if( myrank == 0) bottom = MPI_PROC_NULL top = myrank+1 if( myrank == nprocs 1) top = MPI_PROC_NULL call mpi_sendrecv( sendbuf, count, MPI_type, bottom, tag, & & redvbuf, count, MPI_type, top, tag, & & MPI_COMM_WORLD, istat, ierr) call mpi_sendrecv( sendbuf, count, MPI_type, top, tag, & & redvbuf, count, MPI_type, bottom, tag, & & MPI_COMM_WORLD, istat, ierr)

2013/8/6 RIKEN AICS HPC Summer School 2013:MPI 初歩 10 Fortran mpi_sendrecv 関数 mpi_sendrecv( sendbuf, sendcount, sendtype, dest, sendtag, & recvbuf, recvcount, recvtype, source, recvtag, & comm, status, ierr ) sendbuf: 送信するデータのための変数名 ( 先頭アドレス ) sendcount: 送信するデータの数 ( 整数型 ) sendtype: 送信するデータの型 MPI_INTEGER, MPI_REAL8, MPI_CHARACTER など dest: 送信する相手のプロセス番号 sendtag: メッセージ識別番号. 送られて来たデータを区別するための番号 recvbuf: 受信するデータのための変数名 ( 先頭アドレス ) recvcount: 受信するデータの数 ( 整数型 ) recvtype: 受信するデータの型 source: 送信してくる相手のプロセス番号 recvtag: メッセージ識別番号. 送られて来たデータを区別するための番号 comm: コミュニケータ ( 例えば,MPI_COMM_WORLD) status: 受信の状態を格納するサイズMPI_STATUS_SIZEの配列 ( 整数型 ) ierr: 戻りコード ( 整数型 )

2013/8/6 RIKEN AICS HPC Summer School 2013:MPI 初歩 11 c MPI_Sendrecv 関数 int MPI_Sendrecv(const void *sendbuf, int sendcount, MPI_Datatype sendtype, int dest, int sendtag, void *recvbuf, int recvcount, MPI_Datatype recvtype, int source, int recvtag, MPI_Comm comm, MPI_Status *status) sendbuf: 送信するデータのための変数名 ( 先頭アドレス ) sendcount: 送信するデータの数 ( 整数型 ) sendtype: 送信するデータの型 MPI_INTEGER, MPI_REAL8, MPI_CHARACTER など dest: 送信する相手のプロセス番号 sendtag: メッセージ識別番号. 送られて来たデータを区別するための番号 recvbuf: 受信するデータのための変数名 ( 先頭アドレス ) recvcount: 受信するデータの数 ( 整数型 ) recvtype: 受信するデータの型 source: 送信してくる相手のプロセス番号 recvtag: メッセージ識別番号. 送られて来たデータを区別するための番号 comm: コミュニケータ ( 例えば,MPI_COMM_WORLD) status: 受信の状態を格納するサイズMPI_STATUS_SIZEの配列 ( 整数型 )

2014/3/5 RIKEN AICS HPC Spring School 2014: プログラム並列化と性能評価 12 MPI による並列化 ( 続き ) 強スケーリングの評価プロセス数 2,4,8 (,16) と変化させて, 実行時間を計測し, 実行時間が短縮されていることを確認する. mpi_wtime() 関数 弱スケーリングの評価一つのプロセスが担当するデータサイズを同じにして, プロセス数を 2,4,8(,16) と変化させて実行時間を計測する. 緩和ループの回数が変化することに注意!!

2014/3/5 RIKEN AICS HPC Spring School 2014: プログラム並列化と性能評価 13 Hybrid(MPI+OpenMP) による並列化 MPI 化したプログラムに対し, 緩和ループ内部のループに OpenMP 指示行を挿入して並列化する. OpenMP の評価と同じことをする.