OpenMPプログラミング
|
|
|
- しほこ ののした
- 6 years ago
- Views:
Transcription
1 OpenMP 基礎 岩下武史 ( 学術情報メディアセンター ) /9/13
2 並列処理とは 逐次処理 CPU1 並列処理 CPU1 CPU2 CPU3 CPU4 処理 1 処理 1 処理 2 処理 3 処理 4 処理 2 処理 3 処理 4 時間 2
3 2 種類の並列処理方法 プロセス並列 スレッド並列 並列プログラム 並列プログラム プロセス プロセス 0 プロセス 1 プロセス間通信 スレッド 0 スレッド 1 CPU0 CPU1 CPU0 CPU1 分散メモリ型並列計算機向け ( 例 :PC クラスタ ) ( 共有メモリ型でも使用可能 ) メッセージパッシングライブラリ (MPI など ) を用いる 共有メモリ型並列計算機向け ( 例 :XE6 ノード内 ) OpenMP を用いる コンパイラによる自動並列化もある 3
4 プロセス並列とスレッド並列 CPU( コア ) CPU( コア ) プスプロセスロセCPU( コア ) CPU( コア ) スドスレッドレッメモリ プロセス並列 メモリ スレッド並列 4
5 サブシステム A, B, C における並列処理 サブシステムはいずれも SMP クラスタ型の構成 複数のプロセッサによる計算ノードをネットワークにより結合したもの ノード内での並列処理 プロセス並列 スレッド並列のいずれも可能 複数ノードでの並列処理 プロセス並列の利用が必須 プロセス並列のみを利用 Flat-MPI プロセス / スレッド併用並列処理 ハイブリッド並列処理 MPI& 自動並列,MPI & OpenMP 5
6 OpenMP とは 共有メモリ型並列計算機における並列プログラミングの統一規格 並列実行単位は スレッド プログラミング 並列化を指示する指示行をプログラムに挿入 規格 ( 参照 ) OpenMP Fortran Application Program Interface Version2.0 ( ) OpenMP C/C++ Program Interface Version2.0 (2002.3) OpenMP Application Program Interface Version 2.5 (2005.5) C, C++, FORTRAN の全てを含む OpenMP Application Program Interface Version 3.0 (2008.5) OpenMP Application Program Interface Version 3.1 (2011.7) 6
7 OpenMP プログラミングの解説 指示文 ( ディレクティブ ) の形式 マルチスレッドでの並列実行 Work-Sharing 構造 変数の属性 同期 まとめ 7
8 ディレクティブの形式 特別なコメント 8 形式 OpenMPコンパイラが解釈 Fortranコンパイラではただのコメント 固定形式 :!$OMP,C$OMP, *$OMP 自由形式 :!$OMP 例 :!$OMP PARALLEL 継続行!$OMP PARALLEL DO REDUCTION(+:x) を2 行に継続 固定形式!$OMP PARALLEL DO!$OMP+REDUCTION(+:x) 自由形式!$OMP PARALLEL DO &!$OMP REDUCTION(+:x)
9 ディレクティブの形式 (C 言語 ) 形式 #pragma omp 指示子構造ブロック 例 : #pragma omp parallel { } 例 2 : #pragma omp for 9
10 コンパイラによるディレクティブの解釈 コンパイルオプションにより指定 指定 ON -> OpenMPのディレクティブとして解釈 指定 OFF -> コメントとして無視する 指定 (ON) 例 : サブシステムA 上 Crayコンパイラ ftn h omp ***.f90 サブシステムB 上 Intel コンパイラ ifort openmp ***.f90 生成された実行バイナリ 環境変数 (OMP_NUM_THREADS) により指定されたスレッド数での並列実行が行われる プログラム内で指定する方法もある omp_set_num_threads() 関数を利用 10
11 マルチスレッドでの実行イメージ プログラム実行開始時はマスタースレッドのみ PARALLELディレクティブによりスレーブスレッドを生成 スレッドID: マスタースレッドは0 スレーブスレッドは1~ チーム : 並列実行を行うスレッドの集団 スレッド生成後 全てのスレッドで冗長実行 END PARALLEL ディレクティブによりスレーブスレッドが消滅 program main : マスタースレッド ID 0 スレーブスレッド ID 1 スレーブスレッド ID 2 スレーブスレッド ID 3!$OMP PARALLEL : スレッド数 4 を指定した場合 11!$OMP END PARALLEL : end program main
12 OpenMP による並列化プログラムの基本構成例 (Fortran90 プログラム ) program main integer :: i,j double precision :: a,b!$omp PARALLEL!$OMP END PARALLEL end 複数のスレッドにより並列実行される部分 12
13 OpenMP による並列化プログラムの基本構成例 (C プログラム ) int main(){ int i,j; double a,b; #pragma omp parallel { } } 複数のスレッドにより並列実行される部分 13
14 複数スレッドによる冗長実行 program main integer :: i,j double precision :: a,b!$omp PARALLEL a=b!$omp END PARALLEL end OpenMPによる並列化プログラムでは特に何も指示しないと パラレルリージョン ( 並列実行される部分 ) での実行文は冗長実行される共有メモリなので 複数のスレッドから見て変数 aのメモリ上の物理的な番地 ( 実体 ) は同じ a=bがスレッドの数だけ行われる 14
15 複数スレッドによる冗長実行に関するクイズ program main integer :: i=0!$omp PARALLEL i=i+1!$omp END PARALLEL Write(6,*) i end このプログラムをスレッド数 4 を指定して実行する 標準出力に出力される値はなんで しょうか? a) 1 b) 0 c) 4 d) 不定 15
16 計算の並列化 (Work-Sharing 構造 ) チーム内のスレッドに仕事 (Work) を分割 (Share) する Work-Sharing 構造の種類 DO ループを各スレッドで分割 (!$OMP DO,!$OMP END DO) 別々の処理を各スレッドが分担 (!$OMP SECTIONS,!$OMP END SECTIONS) 1スレッドのみ実行 (!$OMP SINGLE,!$OMP END SINGLE) Work-sharing 構造ではないが マスタスレッドでのみ実行 (!$OMP MASTER,!$OMP END MASTER) 16
17 OMP DO (1) Integer :: i double precision :: a(100), b(100)!$omp PARALLEL!$OMP DO do i=1,100 b(i)=a(i) enddo!$omp END DO!$OMP END PARALLEL end 17 直後の do ループを複数のスレッドで分割して実行せよという指示 2 スレッドの場合 : スレッド 0 do i=1,50 b(i)=a(i) enddo スレッド 1 do j=51,100 b(j)=a(j) enddo
18 OMP DO (2) 注意 )!$OMP DO は do ループの中身が並列実行可能かどうかは関知せず 必ず分割してしまう Integer :: i double precision :: a(100), b(0:100)!$omp PARALLEL!$OMP DO do i=1,100 b(i)=a(i)+b(i-1) enddo!$omp END DO!$OMP END PARALLEL end 2 スレッドの場合 : スレッド 0 do i=1,50 b(i)=a(i)+b(i-1) enddo スレッド 1 do j=51,100 b(j)=a(j)+b(j-1) enddo b(50) の結果がないと本来実行できない 18
19 OMP DO (3) 分割を規定する Integer :: i double precision :: a(100), b(0:100)!$omp PARALLEL!$OMP DO SCHEDULE(STATIC,4) do i=1,100 b(i)=a(i) enddo!$omp END DO!$OMP END PARALLEL end 1~100 を 4 つづつの chunk にわけて それをサイクリックに各スレッドに割り当てる 4 スレッド実行時マスタスレッド担当行 : 1,2,3,4,17,18,19,20, 19
20 OMP Sections!$OMP Sections!$OMP Section 計算 1 ( スレッド 0)!$OMP Section 計算 2 ( スレッド 1)!$OMP Section 計算 3 ( スレッド 2)!$OMP END Sections Section 毎にスレッドに仕事が割り当てられる Section の数よりもスレッド数が多い場合には仕事をしないスレッドが発生する 20
21 OMP Single!$OMP Parallel 並列処理!$OMP Single 逐次処理!$OMP END Single 一つのスレッドのみが処理を行う ( 冗長実行を防ぐ ) 並列処理!$OMP END Parallel 21
22 Work Sharing 実行イメージ program main :!$OMP PARALLEL!$OMP DO do i=1,100 a(i)=i end do!$omp END DO!$OMP SECTIONS!$OMP SECTION call sub1!$omp SECTION call sub2!$omp END SECTIONS!$OMP SINGLE call sub_s!$omp END SINGLE b(1)=a(1)!$omp END PARALLEL : end program main スレッドID 0 スレッドID 1 スレッドID 2 スレッドID 3 逐次実行 do i=1,25 do i=26,50 do i=51,75 do i=76,100 call sub1 call sub2 call sub_s 冗長実行 冗長実行 冗長実行 冗長実行 逐次実行 barrier barrier barrier barrier 22 PARALLEL REGION Work Sharing
23 複合パラレル Work-Sharing 構造 記述方法のひとつ 例!$OMP PARALLEL!$OMP DO do i=1,n : end do!$omp END DO!$OMP END PARALLEL!$OMP PARALLEL DO do i=1,n : end do!$omp END PARALLEL DO (!$OMP END PARALLEL DOは省略可 ) 同様に以下も記述できる!$OMP PARALLEL SECTIONS 23
24 C 言語による Work-Sharing 構造の記述 int i; double a[100], b[100]; #pragma omp parallel { #pragma omp for for(i=0; i<100; i++){ b[i]=a[i]; } } 24 int i, j, k; #pragma omp parallel { #pragma omp sections { #pragma omp section { j=i; } #pragma omp section { k=i; } } }
25 変数の属性 変数属性は大きくわけて次の 2 つ SHARED 属性 プログラムで 1 つの領域 どのスレッドからでも参照 更新可能 PRIVATE 属性 スレッド毎に独立した領域 各スレッドからだけ参照 更新可能 スレッド0 スレッド1 変数 a スレッド0 スレッド1 変数 a 変数 a デフォルトは基本的に SHARED 属性 OMP PARALLEL や OMP DO,OMP SECTIONS で private 変数を指定可能 それぞれ並列リージョンや Work-sharing 構造内でプライベート化 ( 範囲外では不定の値 ) 25
26 PRIVATE 属性であるべき変数 プログラム例!$OMP PARALLEL DO do i=1,n t = i + 1 a(i) = t + n end do!$omp END PARALLEL DO 変数 t が shared 属性だと スレッド0 スレッド 変数 t 4 スレッド0 スレッド 変数 t タイミングによって結果が異なる 変数 t は PRIVATE 属性でなくてはならない 26
27 属性の宣言と有効範囲 DO ループの制御変数 i はデフォルトで PRIVATE 属性!$OMP PARALLEL DO PRIVATE(t) do i=1,n t = i + 1 a(i) = t + n end do!$omp END PARALLEL DO write(*,*) t! 不定 この範囲で t はPRIVATE 属性 PRIVATE 属性の変数は 有効範囲の外では不定 27
28 LASTPRIVATE 属性 (OMP DO, OMP SECTIONS) 最終の繰り返しの値を保存!$OMP PARALLEL DO LASTPRIVATE(t) do i=1,n t = i + 1 a(i) = t + n end do!$omp END PARALLEL DO write(*,*) t! n+1 この範囲で t は PRIVATE 属性 しかし この範囲から抜けたときに 最後の繰り返しを担当したスレッドが持つ t の値が保持される n 回目の繰り返しを担当したスレッドが持つ t の値 逐次実行時と同じ値を保証 28
29 FIRSTPRIVATE 属性 (OMP PARALLEL, OMP DO, OMP SECTIONS) PRIVATE 変数を直前の値で初期化する t=1!$omp PARALLEL FIRSTPRIVATE(t)!$OMP DO do i=1,n if (a(i)>0) then t=t+1 endif enddo!$omp END DO!$OMP END PARALLEL Parallelリージョン内でPRIVATE 変数!$OMP PARALLEL t=1!$omp DO FIRSTPRIVATE(t) do i=1,n if (a(i)>0) then t=t+1 endif enddo!$omp END DO!$OMP END PARALLEL Work-sharing 構造内で PRIVATE 変数構造外で t は不定 29
30 REDUCTION 属性 s = 0!$OMP PARALLEL DO REDUCTION(+:s) do i = 1, 100 s = s + i end do!$omp END PARALLEL DO write(*,*) s! 5050 各スレッドで部分和を求めて 最後に加算 a(1) a(25) a(26) a(50) a(51) a(75) a(76) a(100) 使用可能な演算子 (operator) と組み込み関数 (intrinsic) operator : +, -, *,.and.,.or. intrinsic : max, min, iand, ior, ieor 形式 REDUCTION({ operator intrinsic} : 変数名 ) s 30
31 具体的なプログラム例 ( 行列 行列積 ) program matmul integer :: i,j,k integer,parameter :: n=1000 real :: a(n,n),b(n,n),c(n,n) call init(a,b,c)! 逐次実行!$OMP PARALLEL DO PRIVATE(k,i) do j=1,n! jループを分割して並列実行 do k=1,n! do i=1,n! c(i,j)=c(i,j)+a(i,k)*b(k,j)! end do! end do! end do!!$omp END PARALLEL DO write(*,*) c(1,1)=,c(1,1)! 逐次実行 end program matmul!$omp DO の直後のループの制御変数は自動的にプライベート化される 31
32 具体的なプログラム例 ( 円周率の計算 ) program calculate_pi integer :: i, n real(8) :: w, gsum, pi, v n= ! 逐次実行 w = 1.0d0 / n! 逐次実行 gsum = 0.0d0! 逐次実行!$OMP PARALLEL DO PRIVATE(v) REDUCTION(+:gsum) do i = 1, n! iループを分割して並列実行 v = (real(i,8) - 0.5d0 ) * w! 総和演算 v = 4.0d0 / (1.0d0 + v * v)! gsum = gsum + v! end do!!$omp END PARALLEL DO pi = gsum * w write(*,*) PI is, pi end program calculate_pi 32
33 サブルーチンでの変数の属性 program main integer,parameter ::n =100 integer ::i real :: a(n),x a=1.0!$omp PARALLEL DO PRIVATE(x) REDUCTION(+:y) do i=1,n call sub0(a,i,x) y=y+x end do!$omp END PARALLEL DO write(*,*) y end program main 33 subroutine sub0(a,i,x) integer,parameter ::n=100 integer ::i real :: a(n),x real :: tmp tmp=a(i)+1 x=tmp return end subroutine sub0 (1) 引数の変数の属性は受け継がれる (2) サブルーチン内で定義された変数は PRIVATE 属性 (3) 大域変数はSHARED 属性 (4)SAVE 属性をもつ変数は SHARED 属性なお (3),(4) はthreadprivate 指示文により PRIVATE 属性にすることもできる
34 同期と制御 バリア同期 チーム内のスレッドの到達を待つ暗黙のバリア同期!$OMP END PARALLEL,Work-Sharing 構文の後ろ 陽に指定!$OMP BARRIER バグを作らないために積極的に活用する 複数スレッド間で shared 変数のアクセス制御!$OMP CRITICAL,!$OMP END CRITICAL CRITICAL セクションにはひとつのスレッドしか入れない!$OMP ATOMIC 直後の実行文の左辺の変数に対するアクセスが逐次化 並列性能がでないのでなるべく使わないことが望ましい 34
35 OMP Barrier integer,parameter :: num=10 integer :: a(num)!$omp PARALLEL do i=1,num a(i)=0.0 enddo!$omp BARRIER!$OMP DO do i=1,num a(i)=a(i)+1.0 end do!$omp DO の前に暗黙の同期はとられない 明示的にバリア同期を指示!$OMP END DO!$OMP END PARALLEL 35
36 CRITICAL 配列の最大値とその位置および最小値とその位置を求める例 integer,parameter ::n=10 integer :: i,imax,imax_index,imin,imin_index,ia(n) : imax=ia(1); imax_index=1 imin=ia(1); imin_index=1!$omp PARALLEL DO do i=2,n!$omp CRITICAL (maxlock) if ( ia(i) > imax ) then imax=ia(i) imax_index=i end if!$omp END CRITICAL (maxlock)!$omp CRITICAL (minlock) if ( ia(i) < imin ) then imin=ia(i) imin_index=i end if!$omp END CRITICAL (minlock) end do!$omp END PARALLEL DO 2つのクリティカルセクション (maxlock,minlock) を生成 各クリティカルセクションには 同時に1スレッドのみが入れる 36 write(*,*) "max index=",imax_index,"max value=",imax,& "min index=",imin_index,"min value=",imin
37 ATOMIC ヒストグラムを生成するプログラム例 integer,parameter :: num=10 integer :: i,a(num),histgram(0:10)! 生徒数は num 人! 配列 a には各生徒のテストの点数が入っている! ヒストグラムの初期化!$OMP PARALLEL DO do i=1,10 histgram(i)=0 end do!$omp END PARALLEL DO! ヒストグラム作成!$OMP PARALLEL DO do i=1,num!$omp ATOMIC histgram(a(i))=histgram(a(i))+1 end do!$omp END PARALLEL DO z 配列 histgram の各要素に対し 同時に 1 スレッドのみが更新可能 37
38 より高度な並列処理 (MPI 的なプログラム ) omp_get_num_threads 関数総使用スレッド数を得る omp_get_thread_num 関数スレッド ID を得る integer :: omp_get_thread_num,omp_get_num_threadsnum external omp_get_thread_num,omp_get_num_threadsnum!$omp PARALLEL numprocs=omp_get_num_threads() myid=omp_get_thread_num()!$omp END PARALLEL!$OMP PARALLEL if (myid.eq.0) then elseif (myid.eq.1) then elseif (myid.eq.2) then!$omp END PARALLEL end 38
39 並列化のポイントまとめ どの部分が並列化できるのか 変数属性の変更は必要か 同期が必要か 39
40 その他 自動並列化機能の利用 コンパイル 実行方法など 参考資料 40
41 コンパイルと実行方法 ( サブシステム B) コンパイル openmp オプションをつける % ifort openmp samp-omp.f (Fortran) % icc -openmp samp-omp.c (C) % icpc -openmp samp-omp.cpp (C++) 実行 次の環境変数を指定する OMP_NUM_THREADS : スレッド数を指定する 41
42 サブシステム B における実行例 会話型 % setenv OMP_NUM_THREADS 4 スレッド数を 4 に指定する % tssrun./a.out NQS バッチ型サンプルスクリプト 42 #!/bin/bash #============ LSF Options ============ #QSUB -q eb #QSUB W 1:00 #QSUB -A p=1:t=16:c=16:m=4g #============ Shel Script ============ set x. /usr/modules/3.2.9/init/bash # for intel compiler module load intel/12.1 # automatically # export OMP_NUM_THREADS=$LSB_THREADS./a.out
43 実行例 ( 続き ) NQS バッチ型 ( 続き ) ジョブの投入 % qsub < sample.sh ジョブの確認 % qjobs ジョブのキャンセル % qkill <job ID> ( job IDはqjobsコマンドで確認できる ) 結果ファイル Bxxxxxx.xxxxx 43
44 参考資料など Parallel Programming in OpenMP MORGAN KAUFMANN PUBLISHERS ISBN OpenMP ホームページ 言語仕様書 サンプルプログラムなど オンラインマニュアル Fortran 使用手引書 C 言語使用手引書 C++ 言語使用手引書 44
コードのチューニング
OpenMP による並列化実装 八木学 ( 理化学研究所計算科学研究センター ) KOBE HPC Spring School 2019 2019 年 3 月 14 日 スレッド並列とプロセス並列 スレッド並列 OpenMP 自動並列化 プロセス並列 MPI プロセス プロセス プロセス スレッドスレッドスレッドスレッド メモリ メモリ プロセス間通信 Private Private Private
演習1: 演習準備
演習 1: 演習準備 2013 年 8 月 6 日神戸大学大学院システム情報学研究科森下浩二 1 演習 1 の内容 神戸大 X10(π-omputer) について システム概要 ログイン方法 コンパイルとジョブ実行方法 OpenMP の演習 ( 入門編 ) 1. parallel 構文 実行時ライブラリ関数 2. ループ構文 3. shared 節 private 節 4. reduction 節
OpenMP¤òÍѤ¤¤¿ÊÂÎó·×»»¡Ê£±¡Ë
2011 5 26 scalar Open MP Hello World Do (omp do) (omp workshare) (shared, private) π (reduction) scalar magny-cours, 48 scalar scalar 1 % scp. ssh / authorized keys 133. 30. 112. 246 2 48 % ssh 133.30.112.246
OpenMP¤òÍѤ¤¤¿ÊÂÎó·×»»¡Ê£±¡Ë
2012 5 24 scalar Open MP Hello World Do (omp do) (omp workshare) (shared, private) π (reduction) PU PU PU 2 16 OpenMP FORTRAN/C/C++ MPI OpenMP 1997 FORTRAN Ver. 1.0 API 1998 C/C++ Ver. 1.0 API 2000 FORTRAN
(Microsoft PowerPoint \215u\213`4\201i\221\272\210\344\201j.pptx)
AICS 村井均 RIKEN AICS HPC Summer School 2012 8/7/2012 1 背景 OpenMP とは OpenMP の基本 OpenMP プログラミングにおける注意点 やや高度な話題 2 共有メモリマルチプロセッサシステムの普及 共有メモリマルチプロセッサシステムのための並列化指示文を共通化する必要性 各社で仕様が異なり 移植性がない そして いまやマルチコア プロセッサが主流となり
openmp1_Yaguchi_version_170530
並列計算とは /OpenMP の初歩 (1) 今 の内容 なぜ並列計算が必要か? スーパーコンピュータの性能動向 1ExaFLOPS 次世代スハ コン 京 1PFLOPS 性能 1TFLOPS 1GFLOPS スカラー機ベクトル機ベクトル並列機並列機 X-MP ncube2 CRAY-1 S-810 SR8000 VPP500 CM-5 ASCI-5 ASCI-4 S3800 T3E-900 SR2201
OpenMP¤òÍѤ¤¤¿ÊÂÎó·×»»¡Ê£²¡Ë
2013 5 30 (schedule) (omp sections) (omp single, omp master) (barrier, critical, atomic) program pi i m p l i c i t none integer, parameter : : SP = kind ( 1. 0 ) integer, parameter : : DP = selected real
01_OpenMP_osx.indd
OpenMP* / 1 1... 2 2... 3 3... 5 4... 7 5... 9 5.1... 9 5.2 OpenMP* API... 13 6... 17 7... 19 / 4 1 2 C/C++ OpenMP* 3 Fortran OpenMP* 4 PC 1 1 9.0 Linux* Windows* Xeon Itanium OS 1 2 2 WEB OS OS OS 1 OS
Microsoft Word - 計算科学演習第1回3.doc
スーパーコンピュータの基本的操作方法 2009 年 9 月 10 日高橋康人 1. スーパーコンピュータへのログイン方法 本演習では,X 端末ソフト Exceed on Demand を使用するが, 必要に応じて SSH クライアント putty,ftp クライアント WinSCP や FileZilla を使用して構わない Exceed on Demand を起動し, 以下のとおり設定 ( 各自のユーザ
OpenMP (1) 1, 12 1 UNIX (FUJITSU GP7000F model 900), 13 1 (COMPAQ GS320) FUJITSU VPP5000/64 1 (a) (b) 1: ( 1(a))
OpenMP (1) 1, 12 1 UNIX (FUJITSU GP7000F model 900), 13 1 (COMPAQ GS320) FUJITSU VPP5000/64 1 (a) (b) 1: ( 1(a)) E-mail: {nanri,amano}@cc.kyushu-u.ac.jp 1 ( ) 1. VPP Fortran[6] HPF[3] VPP Fortran 2. MPI[5]
並列プログラミング入門(OpenMP編)
登録施設利用促進機関 / 文科省委託事業 HPCI の運営 代表機関一般財団法人高度情報科学技術研究機構 (RIST) 1 並列プログラミング入門 (OpenMP 編 ) 2019 年 1 月 17 日 高度情報科学技術研究機構 (RIST) 山本秀喜 RIST 主催の講習会等 2 HPC プログラミングセミナー 一般 初心者向け : チューニング 並列化 (OpenMP MPI) 京 初中級者向け講習会
2. OpenMP OpenMP OpenMP OpenMP #pragma#pragma omp #pragma omp parallel #pragma omp single #pragma omp master #pragma omp for #pragma omp critica
C OpenMP 1. OpenMP OpenMP Architecture Review BoardARB OpenMP OpenMP OpenMP OpenMP OpenMP Version 2.0 Version 2.0 OpenMP Fortran C/C++ C C++ 1997 10 OpenMP Fortran API 1.0 1998 10 OpenMP C/C++ API 1.0
<4D F736F F F696E74202D D F95C097F D834F E F93FC96E5284D F96E291E85F8DE391E52E >
SX-ACE 並列プログラミング入門 (MPI) ( 演習補足資料 ) 大阪大学サイバーメディアセンター日本電気株式会社 演習問題の構成 ディレクトリ構成 MPI/ -- practice_1 演習問題 1 -- practice_2 演習問題 2 -- practice_3 演習問題 3 -- practice_4 演習問題 4 -- practice_5 演習問題 5 -- practice_6
03_Fortran_osx.indd
Fortran OpenMP* Fortran OpenMP* OpenMP* 9.0 1...2 2... 3 3 OpenMP*... 4 3.1... 4 3.2 OpenMP*... 5 3.3 OpenMP*... 8 4 OpenMP*... 9 4.1... 9 4.2... 10 4.3 OpenMP*... 10 4.4 OpenMP*... 11 4.5... 12 5 OpenMP*...
I I / 47
1 2013.07.18 1 I 2013 3 I 2013.07.18 1 / 47 A Flat MPI B 1 2 C: 2 I 2013.07.18 2 / 47 I 2013.07.18 3 / 47 #PJM -L "rscgrp=small" π-computer small: 12 large: 84 school: 24 84 16 = 1344 small school small
研究背景 大規模な演算を行うためには 分散メモリ型システムの利用が必須 Message Passing Interface MPI 並列プログラムの大半はMPIを利用 様々な実装 OpenMPI, MPICH, MVAPICH, MPI.NET プログラミングコストが高いため 生産性が悪い 新しい並
XcalableMPによる NAS Parallel Benchmarksの実装と評価 中尾 昌広 李 珍泌 朴 泰祐 佐藤 三久 筑波大学 計算科学研究センター 筑波大学大学院 システム情報工学研究科 研究背景 大規模な演算を行うためには 分散メモリ型システムの利用が必須 Message Passing Interface MPI 並列プログラムの大半はMPIを利用 様々な実装 OpenMPI,
Microsoft PowerPoint - 演習1:並列化と評価.pptx
講義 2& 演習 1 プログラム並列化と性能評価 神戸大学大学院システム情報学研究科横川三津夫 [email protected] 2014/3/5 RIKEN AICS HPC Spring School 2014: プログラム並列化と性能評価 1 2014/3/5 RIKEN AICS HPC Spring School 2014: プログラム並列化と性能評価 2 2 次元温度分布の計算
スライド 1
High Performance and Productivity 並列プログラミング課題と挑戦 HPC システムの利用の拡大の背景 シュミレーションへの要求 より複雑な問題をより精度良くシュミレーションすることが求められている HPC システムでの並列処理の要求の拡大 1. モデル アルゴリズム 解析対象は何れもより複雑で 規模の大きなものになっている 2. マイクロプロセッサのマルチコア化 3.
ÊÂÎó·×»»¤È¤Ï/OpenMP¤Î½éÊâ¡Ê£±¡Ë
2015 5 21 OpenMP Hello World Do (omp do) Fortran (omp workshare) CPU Richardson s Forecast Factory 64,000 L.F. Richardson, Weather Prediction by Numerical Process, Cambridge, University Press (1922) Drawing
演習準備
演習準備 2014 年 3 月 5 日神戸大学大学院システム情報学研究科森下浩二 1 演習準備の内容 神戸大 FX10(π-Computer) 利用準備 システム概要 ログイン方法 コンパイルとジョブ実行方法 MPI 復習 1. MPIプログラムの基本構成 2. 並列実行 3. 1 対 1 通信 集団通信 4. データ 処理分割 5. 計算時間計測 2 神戸大 FX10(π-Computer) 利用準備
memo
数理情報工学演習第一 C プログラミング演習 ( 第 5 回 ) 2015/05/11 DEPARTMENT OF MATHEMATICAL INFORMATICS 1 今日の内容 : プロトタイプ宣言 ヘッダーファイル, プログラムの分割 課題 : 疎行列 2 プロトタイプ宣言 3 C 言語では, 関数や変数は使用する前 ( ソースの上のほう ) に定義されている必要がある. double sub(int
OpenMP の概要
OpenMP プログラミング ワークショップ 平成 13 年 3 月 22 日 日本 SGI 株式会社製品技術本部スケーラブルシステムテクノロジーセンター芦澤芳夫 OpenMP の概要 共有メモリ型並列化 API の必要性 標準化による利点 利用者 異機種間の移行が容易 ソフトウェアベンダ 移植性 保守性 品質向上 API の標準化が遅れた理由 各ベンダが独自の API を提案 同様の機能を各社各様の指示行で実現
MPI usage
MPI (Version 0.99 2006 11 8 ) 1 1 MPI ( Message Passing Interface ) 1 1.1 MPI................................. 1 1.2............................... 2 1.2.1 MPI GATHER.......................... 2 1.2.2
Fortran 勉強会 第 5 回 辻野智紀
Fortran 勉強会 第 5 回 辻野智紀 今回のお品書き サブルーチンの分割コンパイル ライブラリ 静的ライブラリ 動的ライブラリ モジュール その前に 以下の URL から STPK ライブラリをインストールしておいて下さい. http://www.gfd-dennou.org/library/davis/stpk 前回参加された方はインストール済みのはず. サブルーチンの分割コンパイル サブルーチンの独立化
RX ファミリ用 C/C++ コンパイラ V.1.00 Release 02 ご使用上のお願い RX ファミリ用 C/C++ コンパイラの使用上の注意事項 4 件を連絡します #pragma option 使用時の 1 または 2 バイトの整数型の関数戻り値に関する注意事項 (RXC#012) 共用
RX ファミリ用 C/C++ コンパイラ V.1.00 Release 02 ご使用上のお願い RX ファミリ用 C/C++ コンパイラの使用上の注意事項 4 件を連絡します #pragma option 使用時の 1 または 2 バイトの整数型の関数戻り値に関する注意事項 (RXC#012) 共用体型のローカル変数を文字列操作関数で操作する場合の注意事項 (RXC#013) 配列型構造体または共用体の配列型メンバから読み出した値を動的初期化に用いる場合の注意事項
インテル(R) Visual Fortran Composer XE 2013 Windows版 入門ガイド
Visual Fortran Composer XE 2013 Windows* エクセルソフト株式会社 www.xlsoft.com Rev. 1.1 (2012/12/10) Copyright 1998-2013 XLsoft Corporation. All Rights Reserved. 1 / 53 ... 3... 4... 4... 5 Visual Studio... 9...
11042 計算機言語7回目 サポートページ:
11042 7 :https://goo.gl/678wgm November 27, 2017 10/2 1(print, ) 10/16 2(2, ) 10/23 (3 ) 10/31( ),11/6 (4 ) 11/13,, 1 (5 6 ) 11/20,, 2 (5 6 ) 11/27 (7 12/4 (9 ) 12/11 1 (10 ) 12/18 2 (10 ) 12/25 3 (11
プログラミングI第10回
プログラミング 1 第 10 回 構造体 (3) 応用 リスト操作 この資料にあるサンプルプログラムは /home/course/prog1/public_html/2007/hw/lec/sources/ 下に置いてありますから 各自自分のディレクトリにコピーして コンパイル 実行してみてください Prog1 2007 Lec 101 Programming1 Group 19992007 データ構造
目次 LS-DYNA 利用の手引き 1 1. はじめに 利用できるバージョン 概要 1 2. TSUBAME での利用方法 使用可能な LS-DYNA の実行 4 (1) TSUBAMEにログイン 4 (2) バージョンの切り替え 4 (3) インタラ
LS-DYNA 利用の手引 東京工業大学学術国際情報センター 2016.04 version 1.10 目次 LS-DYNA 利用の手引き 1 1. はじめに 1 1.1 利用できるバージョン 1 1.2 概要 1 2. TSUBAME での利用方法 1 2.1 使用可能な 1 2.2 LS-DYNA の実行 4 (1) TSUBAMEにログイン 4 (2) バージョンの切り替え 4 (3) インタラクティブ実行
GPU チュートリアル :OpenACC 篇 Himeno benchmark を例題として 高エネルギー加速器研究機構 (KEK) 松古栄夫 (Hideo Matsufuru) 1 December 2018 HPC-Phys 理化学研究所 共通コードプロジェクト
GPU チュートリアル :OpenACC 篇 Himeno benchmark を例題として 高エネルギー加速器研究機構 (KEK) 松古栄夫 (Hideo Matsufuru) 1 December 2018 HPC-Phys 勉強会 @ 理化学研究所 共通コードプロジェクト Contents Hands On 環境について Introduction to GPU computing Introduction
OpenMPプログラミング
OpenMP プログラミング入門 (Part 2) 講習の内容 :Part 2 OpenMP の概要について OpenMP API のご紹介 1. 並列実行領域 (Parallel Regions) 構文 2. ワークシェアリング (Worksharing) 構文 3. データ環境 (Data Environment) 構文 4. 同期 (Synchronization) 構文 5. 実行時関数 /
並列計算導入.pptx
並列計算の基礎 MPI を用いた並列計算 並列計算の環境 並列計算 複数の計算ユニット(PU, ore, Pなど を使用して 一つの問題 計算 を行わせる 近年 並列計算を手軽に使用できる環境が急速に整いつつある >通常のP PU(entral Processing Unit)上に計算装置であるoreが 複数含まれている Intel ore i7 シリーズ: 4つの計算装置(ore) 通常のプログラム
プログラミング基礎
C プログラミング Ⅰ 授業ガイダンス C 言語の概要プログラム作成 実行方法 授業内容について 授業目的 C 言語によるプログラミングの基礎を学ぶこと 学習内容 C 言語の基礎的な文法 入出力, 変数, 演算, 条件分岐, 繰り返し, 配列,( 関数 ) C 言語による簡単な計算処理プログラムの開発 到達目標 C 言語の基礎的な文法を理解する 簡単な計算処理プログラムを作成できるようにする 授業ガイダンス
演習2
神戸市立工業高等専門学校電気工学科 / 電子工学科専門科目 数値解析 2017.6.2 演習 2 山浦剛 ([email protected]) 講義資料ページ h t t p://clim ate.aic s. riken. jp/m embers/yamaura/num erical_analysis. html 曲線の推定 N 次多項式ラグランジュ補間 y = p N x = σ N x x
Microsoft PowerPoint - 09.pptx
情報処理 Ⅱ 第 9 回 2014 年 12 月 22 日 ( 月 ) 関数とは なぜ関数 関数の分類 自作関数 : 自分で定義する. ユーザ関数 ユーザ定義関数 などともいう. 本日のテーマ ライブラリ関数 : 出来合いのもの.printf など. なぜ関数を定義するのか? 処理を共通化 ( 一般化 ) する プログラムの見通しをよくする 機能分割 ( モジュール化, 再利用 ) 責任 ( あるいは不具合の発生源
FORTRAN文法の基礎
FORTRAN 文法の基礎 ( 初級編 ) 2009-04-16 泉聡志 1 はじめに FORTRAN は数あるプログラム言語の中で最も数値計算に適した言語であり かつ最もかんたんである 加えて FORTRAN を使って数値計算プログラムを作成する工学者は 最小限のことを知っていれば良く 高度な知識は要求されない また 多くのプログラミングは scratch から作らず ベースとなるものを真似て改造して使う場合が多い
内容に関するご質問は まで お願いします [Oakforest-PACS(OFP) 編 ] 第 85 回お試しアカウント付き並列プログラミング講習会 ライブラリ利用 : 科学技術計算の効率化入門 スパコンへのログイン テストプログラム起動 東京大学情報基盤セ
内容に関するご質問は [email protected] まで お願いします [Oakforest-PACS(OFP) 編 ] 第 85 回お試しアカウント付き並列プログラミング講習会 ライブラリ利用 : 科学技術計算の効率化入門 スパコンへのログイン テストプログラム起動 東京大学情報基盤センター特任准教授伊田明弘 1 講習会 : ライブラリ利用 [FX10] スパコンへのログイン ファイル転送
2012年度HPCサマーセミナー_多田野.pptx
! CCS HPC! I " [email protected]" " 1 " " " " " " " 2 3 " " Ax = b" " " 4 Ax = b" A = a 11 a 12... a 1n a 21 a 22... a 2n...... a n1 a n2... a nn, x = x 1 x 2. x n, b = b 1 b 2. b n " " 5 Gauss LU
XcalableMP入門
XcalableMP 1 HPC-Phys@, 2018 8 22 XcalableMP XMP XMP Lattice QCD!2 XMP MPI MPI!3 XMP 1/2 PCXMP MPI Fortran CCoarray C++ MPIMPI XMP OpenMP http://xcalablemp.org!4 XMP 2/2 SPMD (Single Program Multiple Data)
CUDA 連携とライブラリの活用 2
1 09:30-10:00 受付 10:00-12:00 Reedbush-H ログイン GPU 入門 13:30-15:00 OpenACC 入門 15:15-16:45 OpenACC 最適化入門と演習 17:00-18:00 OpenACC の活用 (CUDA 連携とライブラリの活用 ) CUDA 連携とライブラリの活用 2 3 OpenACC 簡単にGPUプログラムが作成できる それなりの性能が得られる
情報処理概論(第二日目)
情報処理概論 工学部物質科学工学科応用化学コース機能物質化学クラス 第 8 回 2005 年 6 月 9 日 前回の演習の解答例 多項式の計算 ( 前半 ): program poly implicit none integer, parameter :: number = 5 real(8), dimension(0:number) :: a real(8) :: x, total integer
2. OpenMP におけるキーワード一覧 OpenMP の全体像を理解するために 指示文 指示節 実行時ライブラリ関数 環境変数にそれぞれどうようなものがあるのかを最初に示します 各詳細については第 4 章以降で説明します 2.1 OpenMP の指示文 OpenMPの指示文は プログラム内で並列
C 言語による OpenMP 入門 東京大学情報基盤センタープログラミング講習会資料 担当黒田久泰 1. はじめに OpenMP は非営利団体 OpenMP Architecture Review Board(ARB) によって規定されている業界標準規格です 共有メモリ型並列計算機用のプログラムの並列化を記述するための指示文 ライブラリ関数 環境変数などが規定されています OpenMP を利用するには
Microsoft PowerPoint - CproNt02.ppt [互換モード]
第 2 章 C プログラムの書き方 CPro:02-01 概要 C プログラムの構成要素は関数 ( プログラム = 関数の集まり ) 関数は, ヘッダと本体からなる 使用する関数は, プログラムの先頭 ( 厳密には, 使用場所より前 ) で型宣言 ( プロトタイプ宣言 ) する 関数は仮引数を用いることができる ( なくてもよい ) 関数には戻り値がある ( なくてもよい void 型 ) コメント
LS-DYNA 利用の手引 第 1 版 東京工業大学学術国際情報センター 2017 年 9 月 25 日
LS-DYNA 利用の手引 第 1 版 東京工業大学学術国際情報センター 2017 年 9 月 25 日 目次 1. はじめに 1 1.1. 利用できるバージョン 1 1.2. 概要 1 1.3. マニュアル 1 2. TSUBAME3 での利用方法 2 2.1. LS-DYNA の実行 2 2.1.1. TSUBAME3 にログイン 2 2.1.2. バージョンの切り替え 2 2.1.3. インタラクティブノードでの
OpenMP 3.0 C/C++ 構文の概要
OpenMP 3.0 C/C++ 構文の概要 OpenMP API 仕様については www.openmp.org でダウンロードしてください OpenMP 実行宣言子は 後続の構造化ブロックや OpenMP 構文に適用されます 構造化ブロック () とは 単文または先頭に入口が 1 つ 末尾に出口が 1 つの複合文です parallel 構文はスレッドのチームを形成し 並列実行を開始します #pragma
情報処理 Ⅱ 2007 年 11 月 26 日 ( 月 )
情報処理 Ⅱ 2007 年 11 月 26 日 ( 月 ) 本日学ぶこと 関数と変数 目的 関数を自分で定義し, 変数の利用方法 範囲を明示的に制限することで, 適切な機能分割 ( モジュール化, 再利用 ) を図る. してはいけないこと main 関数のみで 100 行以上のプログラム グローバル変数を駆使するプログラム プログラムを読みやすくする 保守性向上 入 p.109 2 関数 (Function)
C プログラミング演習 1( 再 ) 2 講義では C プログラミングの基本を学び 演習では やや実践的なプログラミングを通して学ぶ
C プログラミング演習 1( 再 ) 2 講義では C プログラミングの基本を学び 演習では やや実践的なプログラミングを通して学ぶ 今回のプログラミングの課題 次のステップによって 徐々に難易度の高いプログラムを作成する ( 参照用の番号は よくわかる C 言語 のページ番号 ) 1. キーボード入力された整数 10 個の中から最大のものを答える 2. 整数を要素とする配列 (p.57-59) に初期値を与えておき
Microsoft Word - VBA基礎(6).docx
あるクラスの算数の平均点と理科の平均点を読み込み 総点を計算するプログラムを考えてみましょう 一クラスだけ読み込む場合は test50 のようなプログラムになります プログラムの流れとしては非常に簡単です Sub test50() a = InputBox(" バナナ組の算数の平均点を入力してください ") b = InputBox(" バナナ組の理科の平均点を入力してください ") MsgBox
Intel® Compilers Professional Editions
2007 6 10.0 * 10.0 6 5 Software &Solutions group 10.0 (SV) C++ Fortran OpenMP* OpenMP API / : 200 C/C++ Fortran : OpenMP : : : $ cat -n main.cpp 1 #include 2 int foo(const char *); 3 int main()
Microsoft PowerPoint - 演習2:MPI初歩.pptx
演習 2:MPI 初歩 - 並列に計算する - 2013 年 8 月 6 日 神戸大学大学院システム情報学研究科計算科学専攻横川三津夫 MPI( メッセージ パッシング インターフェース ) を使おう! [ 演習 2 の内容 ] はじめの一歩課題 1: Hello, world を並列に出力する. 課題 2: プロセス 0 からのメッセージを受け取る (1 対 1 通信 ). 部分に分けて計算しよう課題
PowerPoint プレゼンテーション
vsmp Foundation スケーラブル SMP システム スケーラブル SMP システム 製品コンセプト 2U サイズの 8 ソケット SMP サーバ コンパクトな筐体に多くのコアとメモリを実装し SMP システムとして利用可能 スイッチなし構成でのシステム構築によりラックスペースを無駄にしない構成 将来的な拡張性を保証 8 ソケット以上への拡張も可能 2 システム構成例 ベースシステム 2U
統計数理研究所とスーパーコンピュータ
スーパーコンピュータと統計数理研究所 統計数理研究所 統計科学技術センターセンター長 中野純司 目次 スーパーコンピュータとは いったい何? 本当に スーパー?: ノートパソコンとの比較 どのように使う?: 仕組みとソフトウェア 統計数理研究所の ( スーパー ) コンピュータ 必要性 導入の歴史 現在の統数研スパコン : A, I, C 2/44 目次 スーパーコンピュータとは いったい何? 本当に
プログラム言語及び演習Ⅲ
平成 28 年度後期データ構造とアルゴリズム期末テスト 各問題中のアルゴリズムを表すプログラムは, 変数の宣言が省略されているなど, 完全なものではありませんが, 適宜, 常識的な解釈をしてください. 疑問があれば, 挙手をして質問してください. 時間計算量をオーダ記法で表せという問題では, 入力サイズ n を無限大に近づけた場合の漸近的な時間計算量を表せということだと考えてください. 問題 1 入力サイズが
Microsoft Word - matlab-coder-code-generation-quick-start-guide-japanese-r2016a
MATLAB コードを使用した C コードの生成クイックスタートガイド (R2016a) 最初のスタンドアロン C コードの生成 スタンドアロン C コードを生成するには [ ビルド ] を [ ソースコード ] [ スタティックライブラリ ] [ ダイナミックライブラリ ] または [ 実行ファイル ] のいずれかに切り替えます MATLAB Coder を使用することで MATLAB コードから
Microsoft Word ●IntelクアッドコアCPUでのベンチマーク_吉岡_ _更新__ doc
2.3. アプリ性能 2.3.1. Intel クアッドコア CPU でのベンチマーク 東京海洋大学吉岡諭 1. はじめにこの数年でマルチコア CPU の普及が進んできた x86 系の CPU でも Intel と AD がデュアルコア クアッドコアの CPU を次々と市場に送り出していて それらが PC クラスタの CPU として採用され HPC に活用されている ここでは Intel クアッドコア
