コードのチューニング
|
|
|
- ありさ しもかさ
- 6 years ago
- Views:
Transcription
1 OpenMP による並列化実装 八木学 ( 理化学研究所計算科学研究センター ) KOBE HPC Spring School 年 3 月 14 日
2 スレッド並列とプロセス並列 スレッド並列 OpenMP 自動並列化 プロセス並列 MPI プロセス プロセス プロセス スレッドスレッドスレッドスレッド メモリ メモリ プロセス間通信 Private Private Private Private プロセス プロセス Global メモリ空間 メモリ メモリ
3 並列計算について CPU を N 個使って並列計算した時 計算速度が N 倍になるのが理想だが - 並列化率の問題 ( アムダールの法則 ) - 通信時間ボトルネック 京のような大型計算機を有効利用するためには 如何に計算速度を N 倍に近づけられるかが重要
4 アムダールの法則 プログラムの並列化できる割合を P とし プロセッサ数を n とすると 並列計算した時の性能向上率は 1 で与えられる 1 P + P n 9 割並列化できるが 1 割逐次処理が残ってしまうような場合 どれだけプロセッサを投入しても計算速度は 10 倍以上にはならない
5 OpenMP とは 共有メモリ型計算機用の並列計算 API ノード内の並列 ( ノード間は不可 ) ユーザーが明示的に並列のための指示を与える コンパイラの自動並列とは異なる 標準化された規格であり 広く使われている 指示行の挿入で並列化できるため 比較的手軽
6 OpenMP によるスレッド並列 Fork-Join モデル スレッド 0 Fork スレッド 0 スレッド 1 スレッド 2 スレッド 3 並列リージョン Join スレッド 0... 非並列!$omp parallel... 並列リージョン!$omp end parallel... 非並列 Fork Join... 非並列 #pragma omp parallel {... 並列リージョン Join... 非並列処理 Fork
7 スレッド数の指定 シェルの環境変数で与える ( 推奨 ) export OMP_NUM_THREADS=16 (bash の場合 ) setenv OMP_NUM_THREADS 16 (tcsh の場合 ) プログラム内部で設定することも可能 #include <omp.h> omp_set_num_threads(16);
8 スレッド数の指定 シェルの環境変数で与える ( 推奨 ) export OMP_NUM_THREADS=16 (bash の場合 ) setenv OMP_NUM_THREADS 16 (tcsh の場合 ) プログラム内部で設定することも可能!$use omp_lib call omp_set_num_threads(16)
9 コンパイル コンパイルオプションで OpenMP を有効にする gcc -fopenmp test.f90 icc -qopenmp test.f90 オプションを指定しない場合は OpenMP の指示行は無視される #pragma omp parallel for for (i=0; i<100; i++) { a[i] = b[i] + c; 指示行は Fortran の場合!$OMP から始まる 行頭の! は通常はコメントを意味する C の場合は #pragma omp という形になるが オプションを入れない場合 通常処理されない
10 コンパイル コンパイルオプションで OpenMP を有効にする gfortran -fopenmp test.f90 ifort -qopenmp test.f90 オプションを指定しない場合は OpenMP の指示行は無視される!$OMP PARALLEL DO do i = 1, 100 a(i) = b(i) + c enddo!$omp END PARALLEL DO 指示行は Fortran の場合!$OMP から始まる 行頭の! は通常はコメントを意味する C の場合は #pragma omp という形になるが オプションを入れない場合 通常処理されない
11 OpenMP の基本関数 OpenMP モジュール / ヘッダをロード [C] #include <omp.h> [F] use omp_lib *OpenMP 関連の関数を使用するためのおまじない!$ use omp_lib integer :: myid, nthreads nthreads = omp_get_num_threads() myid = omp_get_thread_num() #include <omp.h> int myid, nthreads; nthreads = omp_get_num_threads(); myid = omp_get_thread_num();
12 OpenMP の基本関数 最大スレッド数取得 (Integer) [C][F] nthreads = omp_get_num_threads() 自スレッド番号取得 (Integer) [C][F] myid = omp_get_thread_num()!$ use omp_lib integer :: myid, nthreads nthreads = omp_get_num_threads() myid = omp_get_thread_num() #include <omp.h> int myid, nthreads; nthreads = omp_get_num_threads(); myid = omp_get_thread_num();
13 OpenMP の基本関数 時間を測る ( 倍精度型 ) [F][C] time = omp_get_wtime()!$ use omp_lib real(8) :: dts, dte dts = omp_get_wtime() 処理 dte = omp_get_wtime() print *, dte-dts #include <omp.h> double dts; double dte; dts = omp_get_wtime(); 処理 dte = omp_get_wtime(); なお OpenMP モジュール ( ヘッダ ) のロードを忘れると これらの関数を使用できずコンパイルエラーになる
14 Working Sharing 構文 〇複数のスレッドで分担して実行する部分を指定〇並列リージョン内で記述する #pragma omp parallel { の括弧範囲内 指示文の基本形式は [C] #pragma omp xxx [F]!$omp xxx ~!$omp end xxx for 構文, do 構文ループを分割し各スレッドで実行 section 構文各セクションを各スレッドで実行 single 構文 1 スレッドのみ実行 master 構文マスタースレッドのみ実行
15 並列リージョンを指定 #pragma omp parallel { #pragma omp for for (i=0; i<100; i++) { a[i] = i #pragma omp single {... #pragma omp for for (...)... スレッドの起動 ~ 終結 [C] #pragma omp parallel { 括弧 { 内が複数スレッドで処理される 複数スレッドで処理 ( 並列リージョン )
16 for 構文 #pragma omp parallel { #pragma omp for for (i=0; i<100; i++) { a[i] = i #pragma omp single { output(a); #pragma omp for for (i=0; i<100; i++) { b[i] = i for ループをスレッドで分割し 並列処理を行う [C] #pragma omp for for ループの前に指示行 #pragma omp for を入れる #pragma omp parallel でスレッドを生成しただけでは 全てのスレッドが全ループを計算してしまう #pragma omp for を入れることでループ自体が分割され 各スレッドに処理が割り当てられる
17 1 スレッドのみで処理 #pragma omp parallel { #pragma omp for for (i=0; i<100; i++) { a[i] = i; #pragma omp single { output(a); #pragma omp for for (i=0; i<100; i++) { b[i] = i; [C] #pragma omp single { 逐次処理やデータの出力のような処理が入る場合 全スレッドで行う必要はなく 1 スレッドのみで処理を行えばよい #pragma omp single { を用いることで { 内の記述は 1 スレッドのみで処理される
18 並列リージョンを指定!$omp parallel!$omp do do i = 1, 100 a(i) = i enddo!$omp end do!$omp single call output(a)!$omp end single!$omp do do i = 1, 100 b(i) = i enddo!$omp end do!$omp end parallel スレッドの起動 [F]!$omp parallel スレッドの終結 [F]!$omp end parallel 複数スレッドで処理 ( 並列リージョン )
19 do 構文!$omp parallel!$omp do do i = 1, 100 a(i) = i enddo!$omp end do!$omp single call output(a)!$omp end single!$omp do do i = 1, 100 b(i) = i enddo!$omp end do!$omp end parallel do ループをスレッドで分割し 並列処理を行う [F]!$omp do ~!$omp end do do の直前に指示行!$omp do を入れる enddo の直後に指示行!$omp end do を入れる!$omp parallel でスレッドを生成しただけでは 全てのスレッドが全ループを計算してしまう!$omp do を入れることでループ自体が分割され 各スレッドに処理が割り当てられる
20 1 スレッドのみで処理!$omp parallel!$omp do do i = 1, 100 a(i) = i enddo!$omp end do!$omp single call output(a)!$omp end single!$omp do do i = 1, 100 b(i) = i enddo!$omp end do!$omp end parallel [F]!$omp single ~!$omp end single 逐次処理やデータの出力のような処理が入る場合 全スレッドで行う必要はなく 1 スレッドのみで処理を行えばよい!$omp single を用いることで { 内の記述は 1 スレッドのみで処理される
21 OpenMP によるスレッド並列 #pragma omp parallel { for (i=0; i<100; i++) { a[i] = i; スレッドを生成しただけでは 全スレッドが全ての処理を行ってしまい負荷分散にならない スレッド 0 for (i=0; i<100; i++) スレッド 1 for (i=0; i<100; i++) スレッド 2 for (i=0; i<100; i++) スレッド 3 for (i=0; i<100; i++)
22 OpenMP によるスレッド並列 #pragma omp parallel { #pragma omp for for (i=0; i<100; i++) { a[i] = i; ワークシェアリング構文を入れることにより 処理が分割され 正しく並列処理される #pragma omp for!$omp do はループを自動的にスレッド数で均等に分割する スレッド 0 for (i=0; i<25; i++) スレッド 1 for (i=25; i<50; i++) スレッド 2 for (i=50; i<75; i++) スレッド 3 for (i=75; i<100; i++)
23 OpenMP の基本命令 スレッド生成とループ並列を 1 行で記述 [C 言語 ] #pragma omp parallel { #pragma omp for #pragma omp parallel for と書ける #pragma omp parallel { #pragma omp for for (i=0; i<100; i++) { a[i] = i; #pragma omp parallel for for (i=0; i<100; i++) { a[i] = i;
24 OpenMP の基本命令 スレッド生成とループ並列を 1 行で記述 [Fortran]!$omp parallel!$omp do!$omp parallel do と書ける!$omp parallel!$omp do do i = 1, 100 a(i) = i enddo!$omp end do!$omp end parallel!$omp parallel do do i = 1, 100 a(i) = i enddo!$omp end parallel do
25 プライベート変数について OpenMP において変数は基本的には共有 (shared) であり どのスレッドからもアクセス可能である プライベート変数に指定した変数は各スレッドごとに値を保有し 他のスレッドからアクセスされない 並列化したループ演算の内部にある一時変数などは プライベート変数に指定する必要がある 例外的に [C]#pragma omp for [F]!$omp parallel do の直後のループ変数はプライベート変数になる
26 プライベート変数について プライベート変数を指定 [C] #pragma omp parallel for private(a, b,...) [C] #pragma omp for private(a, b,...) #pragma omp parallel { #pragma omp for private(j, k) for (i=0; i<nx; i++) { for (j=0; j<ny; j++) { for (k=0; k<nz; k++) { f[i][j][k] = (double)(i * j * k); ループ変数の扱いに関して 並列化したループ変数は自動的に private 変数になる しかし多重ループの場合 内側のループに関しては共有変数のままである 左の例の場合 i は自動的に private になるため必要ないが j, k については private 宣言が必要となる
27 プライベート変数について プライベート変数を指定 [F]!$omp parallel private(a, b,...) [F]!$omp do private(a, b,...)!$omp parallel!$omp do private(j, k) do i = 1, nx do j = 1, ny do k = 1, nz f(k, j, i) = dble(i * j * k) enddo enddo enddo!$omp end do!$omp end parallel ループ変数の扱いに関して 並列化したループ変数は自動的に private 変数になる しかし多重ループの場合 内側のループに関しては共有変数のままである 左の例の場合 i は自動的に private になるため必要ないが j, k については private 宣言が必要となる
28 プライベート変数について 起こりがちなミス #pragma omp for for (i=0; i<100; i++) { tmp = myfunc(i); a[i] = tmp; tmp を上書きしてしまい 正しい結果にならない #pragma omp for private(tmp) for (i=0; i<100; i++) { tmp = myfunc(i); a[i] = tmp; private 宣言を入れる 並列化したループ内で値を設定 更新する場合は要注意 private にすべきではないか確認する必要あり
29 プライベート変数について スレッド 0 スレッド 1 共有変数 tmp に 0 を代入 tmp = 0 共有変数 tmp は 25 を代入 tmp = 25 a[0] には 25 が代入される a[0] = tmp private 宣言なし #pragma omp for for (i=0; i<100; i++) { tmp = myfunc(i); a[i] = tmp; a[25] = tmp 処理順
30 プライベート変数について スレッド 0 スレッド 1 スレッド 0 のプライベート変数 tmp に 0 を代入 スレッド 1 のプライベート変数 tmp に 25 を代入 a[0] には 0 が代入される tmp = 0 a[0] = tmp tmp = 25 private 宣言あり #pragma omp for private(tmp) for (i=0; i<100; i++) { tmp = myfunc(i); a[i] = tmp; a[25] = tmp 処理順
31 多重ループに関して 良くない例 for (i=0; i<nx; i++) { for (j=0; j<ny; j++) { #pragma omp parallel for private(i, j, k) for (k=0; k<nz; k++) { f[i][j][k] = (double)(i * j * k); 改善案 #pragma omp parallel { for (i=0; i<nx; i++) { for (j=0; j<ny; j++) { #pragma omp for private(i, j, k) for (k=0; k<nz; k++) { f[i][j][k] = (double)(i * j * k); OpenMP を用いた並列化では 内側ループ 外側ループのどちらを並列化しても動作はするが 内側ループを並列化すると毎回スレッドの生成を行うため遅くなる ( 上記の例では nx * ny 回のスレッド生成 ) なお 並列化するループを変えたり ループの計算順序を変更する可能性があるため private 宣言にはループ変数も書いた方が無難
32 共有変数について 共有 (shared) 変数を指定 [C] #pragma omp parallel shared(a, b,...) [C] #pragma omp for shared(a, b,...) [F]!$omp parallel shared(a, b,...) [F]!$omp do shared(a, b,...) 指定しなければ基本的に共有変数であるため 省略可能
33 スレッドの同期 nowait を明示しない限り ワークシェアリング構文の終わりに自動的に同期処理が発生 スレッドの同期待ちをしない [C] #pragma omp for nowait [F]!$omp do ~!$omp end do nowait スレッドの同期をとる [C] #pragma omp barrier [F]!$omp barrier
34 注意点等 自動並列化と違い 並列化できるかどうかの判断はプログラマが行う 依存関係などにより並列化できないループであっても 明示してしまえば並列化されてしまう スレッド内でのグローバル変数 プライベート変数を間違えると Run ごとに結果が変わってしまう 数回実行し 結果が変わらないことを確認 OpenMP は手軽だが デバッグには注意が必要
35 演習問題 2-1 OpenMPを用いて次のコードを完成させよ Fortran: 2019spring/code/f90/openmp/1d_adv_omp.f90 C 言語 : 2019spring/code/c/openmp/1d_adv_omp.c * 演習 1にて使用したコードを用いても良い 移流が出来たら流体にも挑戦! 1d_fluid_rk : 1 次元流体 2d_fluid : 2 次元流体
36 補足 : マシン上の操作 コンパイル ジョブの投入 (C 言語 ) > icc -qopenmp 1d_adv_omp.c > qsub run.sh #!/bin/bash #PBS -q S #PBS -l select=1:ncpus=8 #PBS -N OpenMP #PBS -o output #PBS -j oe source /etc/profile.d/modules.sh module load intel export OMP_NUM_THREADS=8 export KMP_AFFINITY=disabled cd ${PBS_O_WORKDIR dplace -x2./a.out 使用ノード数 CPU 数ジョブ名標準出力の出力先ファイル Intelコンパイラ環境のロードスレッド数を指定実行 run.sh
37 補足 : マシン上の操作 コンパイル ジョブの投入 (Fortran) > ifort -qopenmp 1d_adv_omp.f90 > qsub run.sh #!/bin/bash #PBS -q S #PBS -l select=1:ncpus=8 #PBS -N OpenMP #PBS -o output #PBS -j oe source /etc/profile.d/modules.sh module load intel export OMP_NUM_THREADS=8 export KMP_AFFINITY=disabled cd ${PBS_O_WORKDIR dplace -x2./a.out 使用ノード数 CPU 数ジョブ名標準出力の出力先ファイル Intelコンパイラ環境のロードスレッド数を指定実行 run.sh
38 演習問題 2-1 解答例 Fortran: 2019spring/code/f90/openmp/sample/1d_adv_omp_sample.f spring/code/f90/openmp/sample/1d_fluid_rk_omp_sample.f spring/code/f90/openmp/sample/2d_fluid_omp_sample.f90 C 言語 : 2019spring/code/c/openmp/sample/1d_adv_omp_sample.c 2019spring/code/c/openmp/sample/1d_fluid_rk_omp_sample.c 2019spring/code/c/openmp/sample/2d_fluid_omp_sample.c
39 演習問題 2-2 OpenMP を用いて並列化したプログラムを スレッド数を変えて実行し処理時間を計測せよ スレッド数の指定方法 : スクリプト run.sh の export OMP_NUM_THREADS=xx の数値を変更 処理時間の計測 dts = omp_get_wtime() 処理 dte = omp_get_wtime() print *, dte-dts
演習1: 演習準備
演習 1: 演習準備 2013 年 8 月 6 日神戸大学大学院システム情報学研究科森下浩二 1 演習 1 の内容 神戸大 X10(π-omputer) について システム概要 ログイン方法 コンパイルとジョブ実行方法 OpenMP の演習 ( 入門編 ) 1. parallel 構文 実行時ライブラリ関数 2. ループ構文 3. shared 節 private 節 4. reduction 節
OpenMPプログラミング
OpenMP 基礎 岩下武史 ( 学術情報メディアセンター ) 1 2013/9/13 並列処理とは 逐次処理 CPU1 並列処理 CPU1 CPU2 CPU3 CPU4 処理 1 処理 1 処理 2 処理 3 処理 4 処理 2 処理 3 処理 4 時間 2 2 種類の並列処理方法 プロセス並列 スレッド並列 並列プログラム 並列プログラム プロセス プロセス 0 プロセス 1 プロセス間通信 スレッド
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
(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 共有メモリマルチプロセッサシステムの普及 共有メモリマルチプロセッサシステムのための並列化指示文を共通化する必要性 各社で仕様が異なり 移植性がない そして いまやマルチコア プロセッサが主流となり
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
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
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 次元温度分布の計算
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]
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
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
<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
内容 イントロダクション スカラチューニング OpenMPによる並列化 最近のHPC分野の動向 まとめ
スカラチューニングと OpenMPによるコードの高速化 松本洋介 千葉大学 謝辞 C言語への対応 簑島敬 JAMSTEC 宇宙磁気流体 プラズマシミュレーションサマースクール 2013年8月6日 千葉大学統合情報センター 内容 イントロダクション スカラチューニング OpenMPによる並列化 最近のHPC分野の動向 まとめ イントロダクション CPUの作り \ Fujitsu SPARC64TM VIIIfx
Microsoft Word - 計算科学演習第1回3.doc
スーパーコンピュータの基本的操作方法 2009 年 9 月 10 日高橋康人 1. スーパーコンピュータへのログイン方法 本演習では,X 端末ソフト Exceed on Demand を使用するが, 必要に応じて SSH クライアント putty,ftp クライアント WinSCP や FileZilla を使用して構わない Exceed on Demand を起動し, 以下のとおり設定 ( 各自のユーザ
並列プログラミング入門(OpenMP編)
登録施設利用促進機関 / 文科省委託事業 HPCI の運営 代表機関一般財団法人高度情報科学技術研究機構 (RIST) 1 並列プログラミング入門 (OpenMP 編 ) 2019 年 1 月 17 日 高度情報科学技術研究機構 (RIST) 山本秀喜 RIST 主催の講習会等 2 HPC プログラミングセミナー 一般 初心者向け : チューニング 並列化 (OpenMP MPI) 京 初中級者向け講習会
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
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
並列計算導入.pptx
並列計算の基礎 MPI を用いた並列計算 並列計算の環境 並列計算 複数の計算ユニット(PU, ore, Pなど を使用して 一つの問題 計算 を行わせる 近年 並列計算を手軽に使用できる環境が急速に整いつつある >通常のP PU(entral Processing Unit)上に計算装置であるoreが 複数含まれている Intel ore i7 シリーズ: 4つの計算装置(ore) 通常のプログラム
コードのチューニング
MPI による並列化実装 ~ ハイブリッド並列 ~ 八木学 ( 理化学研究所計算科学研究センター ) KOBE HPC Spring School 2019 2019 年 3 月 14 日 MPI とは Message Passing Interface 分散メモリのプロセス間の通信規格(API) SPMD(Single Program Multi Data) が基本 - 各プロセスが 同じことをやる
演習準備
演習準備 2014 年 3 月 5 日神戸大学大学院システム情報学研究科森下浩二 1 演習準備の内容 神戸大 FX10(π-Computer) 利用準備 システム概要 ログイン方法 コンパイルとジョブ実行方法 MPI 復習 1. MPIプログラムの基本構成 2. 並列実行 3. 1 対 1 通信 集団通信 4. データ 処理分割 5. 計算時間計測 2 神戸大 FX10(π-Computer) 利用準備
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*...
目次 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) インタラクティブ実行
研究背景 大規模な演算を行うためには 分散メモリ型システムの利用が必須 Message Passing Interface MPI 並列プログラムの大半はMPIを利用 様々な実装 OpenMPI, MPICH, MVAPICH, MPI.NET プログラミングコストが高いため 生産性が悪い 新しい並
XcalableMPによる NAS Parallel Benchmarksの実装と評価 中尾 昌広 李 珍泌 朴 泰祐 佐藤 三久 筑波大学 計算科学研究センター 筑波大学大学院 システム情報工学研究科 研究背景 大規模な演算を行うためには 分散メモリ型システムの利用が必須 Message Passing Interface MPI 並列プログラムの大半はMPIを利用 様々な実装 OpenMPI,
Microsoft Word ●IntelクアッドコアCPUでのベンチマーク_吉岡_ _更新__ doc
2.3. アプリ性能 2.3.1. Intel クアッドコア CPU でのベンチマーク 東京海洋大学吉岡諭 1. はじめにこの数年でマルチコア CPU の普及が進んできた x86 系の CPU でも Intel と AD がデュアルコア クアッドコアの CPU を次々と市場に送り出していて それらが PC クラスタの CPU として採用され HPC に活用されている ここでは Intel クアッドコア
スライド 1
High Performance and Productivity 並列プログラミング課題と挑戦 HPC システムの利用の拡大の背景 シュミレーションへの要求 より複雑な問題をより精度良くシュミレーションすることが求められている HPC システムでの並列処理の要求の拡大 1. モデル アルゴリズム 解析対象は何れもより複雑で 規模の大きなものになっている 2. マイクロプロセッサのマルチコア化 3.
OpenMP の概要
OpenMP プログラミング ワークショップ 平成 13 年 3 月 22 日 日本 SGI 株式会社製品技術本部スケーラブルシステムテクノロジーセンター芦澤芳夫 OpenMP の概要 共有メモリ型並列化 API の必要性 標準化による利点 利用者 異機種間の移行が容易 ソフトウェアベンダ 移植性 保守性 品質向上 API の標準化が遅れた理由 各ベンダが独自の API を提案 同様の機能を各社各様の指示行で実現
OpenACCによる並列化
実習 OpenACC による ICCG ソルバーの並列化 1 ログイン Reedbush へのログイン $ ssh reedbush.cc.u-tokyo.ac.jp l txxxxx Module のロード $ module load pgi/17.3 cuda ログインするたびに必要です! ワークディレクトリに移動 $ cdw ターゲットプログラム /srcx OpenACC 用のディレクトリの作成
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プログラミング
OpenMP プログラミング入門 (Part 2) 講習の内容 :Part 2 OpenMP の概要について OpenMP API のご紹介 1. 並列実行領域 (Parallel Regions) 構文 2. ワークシェアリング (Worksharing) 構文 3. データ環境 (Data Environment) 構文 4. 同期 (Synchronization) 構文 5. 実行時関数 /
ÊÂÎó·×»»¤È¤Ï/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
Fortran 勉強会 第 5 回 辻野智紀
Fortran 勉強会 第 5 回 辻野智紀 今回のお品書き サブルーチンの分割コンパイル ライブラリ 静的ライブラリ 動的ライブラリ モジュール その前に 以下の URL から STPK ライブラリをインストールしておいて下さい. http://www.gfd-dennou.org/library/davis/stpk 前回参加された方はインストール済みのはず. サブルーチンの分割コンパイル サブルーチンの独立化
情報処理概論(第二日目)
情報処理概論 工学部物質科学工学科応用化学コース機能物質化学クラス 第 8 回 2005 年 6 月 9 日 前回の演習の解答例 多項式の計算 ( 前半 ): program poly implicit none integer, parameter :: number = 5 real(8), dimension(0:number) :: a real(8) :: x, total integer
プログラミング基礎
C プログラミング Ⅰ 授業ガイダンス C 言語の概要プログラム作成 実行方法 授業内容について 授業目的 C 言語によるプログラミングの基礎を学ぶこと 学習内容 C 言語の基礎的な文法 入出力, 変数, 演算, 条件分岐, 繰り返し, 配列,( 関数 ) C 言語による簡単な計算処理プログラムの開発 到達目標 C 言語の基礎的な文法を理解する 簡単な計算処理プログラムを作成できるようにする 授業ガイダンス
2. OpenMP におけるキーワード一覧 OpenMP の全体像を理解するために 指示文 指示節 実行時ライブラリ関数 環境変数にそれぞれどうようなものがあるのかを最初に示します 各詳細については第 4 章以降で説明します 2.1 OpenMP の指示文 OpenMPの指示文は プログラム内で並列
C 言語による OpenMP 入門 東京大学情報基盤センタープログラミング講習会資料 担当黒田久泰 1. はじめに OpenMP は非営利団体 OpenMP Architecture Review Board(ARB) によって規定されている業界標準規格です 共有メモリ型並列計算機用のプログラムの並列化を記述するための指示文 ライブラリ関数 環境変数などが規定されています OpenMP を利用するには
インテル(R) Visual Fortran コンパイラ 10.0
インテル (R) Visual Fortran コンパイラー 10.0 日本語版スペシャル エディション 入門ガイド 目次 概要インテル (R) Visual Fortran コンパイラーの設定はじめに検証用ソースファイル適切なインストールの確認コンパイラーの起動 ( コマンドライン ) コンパイル ( 最適化オプションなし ) 実行 / プログラムの検証コンパイル ( 最適化オプションあり ) 実行
C 言語の式と文 C 言語の文 ( 関数の呼び出し ) printf("hello, n"); 式 a a+4 a++ a = 7 関数名関数の引数セミコロン 3 < a "hello" printf("hello") 関数の引数は () で囲み, 中に式を書く. 文 ( 式文 ) は
C 言語復習 C 言語の基礎 来週もこの資料を持参してください C 言語, ソースファイルの作成, コンパイル, 実行 1 C 言語 C 言語プログラミングの手順 とは, 計算機を動かす手順を記述したもの. 計算機に命令を与えて動かすには を作成する ことになる. C 言語はプログラミング言語の 1 個 手続き型言語に分類される. C/C++ は非常に多くの場面で使われる言語 C++ は C 言語をオブジェクト指向に拡張したもの
$ cmake --version $ make --version $ gcc --version 環境が無いあるいはバージョンが古い場合は yum などを用いて導入 最新化を行う 4. 圧縮ファイルを解凍する $ tar xzvf gromacs tar.gz 5. cmake を用
本マニュアルの目的 Linux サーバー版 Gromacs インストールマニュアル 2015/10/28 本マニュアルでは 単独ユーザが独占的に Linux サーバー (CentOS 6.6) を使用して Gromacs ジョブを実行するための環境構築方法と Winmostar のリモートジョブ機能による計算手順を示しています つまり複数ユーザが共同使用する計算サーバー等は対象外です そのため計算環境は全てユーザのホームディレクトリ配下で行う構築することを想定しています
講習No.1
プログラムはどこに保存され, どこで実行されるのか? 復習 ハードディスク キーボード Central Processing Unit 例えば i7, ARM, Cortex-A17 ディスプレイ 例えば 4G バイト メモリ プログラムは, ワープロ文章などと同様, ハードディスクなどにファイルとして保存されている. プログラムは, メモリ上に呼び出されて ( ロード ) 実行される. プログラムの作成
SGI AltixUV1000 並列化プログラミング講習会
SGI Altix UV1000 並列化プログラミング講習会 日本 SGI 株式会社 HPC 技術推進本部 HPCコンサルティング部 1 Contents 1. システム構成と利用方法 2. SGI Altix UV1000 アーキテクチャ 3. 開発環境 4. コンパイルと実行 5. 最適化について 6. コンパイラオプション 7. 数値計算ライブラリ 8. デバッガと時間計測関数 9. ファーストタッチとデータ配置
ガイダンス
情報科学 B 第 2 回変数 1 今日やること Java プログラムの書き方 変数とは何か? 2 Java プログラムの書き方 3 作業手順 Java 言語を用いてソースコードを記述する (Cpad エディタを使用 ) コンパイル (Cpad エディタを使用 ) 実行 (Cpad エディタを使用 ) エラーが出たらどうしたらよいか??? 4 書き方 これから作成する Hello.java 命令文 メソッドブロック
OpenMP 3.0 C/C++ 構文の概要
OpenMP 3.0 C/C++ 構文の概要 OpenMP API 仕様については www.openmp.org でダウンロードしてください OpenMP 実行宣言子は 後続の構造化ブロックや OpenMP 構文に適用されます 構造化ブロック () とは 単文または先頭に入口が 1 つ 末尾に出口が 1 つの複合文です parallel 構文はスレッドのチームを形成し 並列実行を開始します #pragma
Microsoft PowerPoint - 演習2:MPI初歩.pptx
演習 2:MPI 初歩 - 並列に計算する - 2013 年 8 月 6 日 神戸大学大学院システム情報学研究科計算科学専攻横川三津夫 MPI( メッセージ パッシング インターフェース ) を使おう! [ 演習 2 の内容 ] はじめの一歩課題 1: Hello, world を並列に出力する. 課題 2: プロセス 0 からのメッセージを受け取る (1 対 1 通信 ). 部分に分けて計算しよう課題
ERDAS IMAGINE における処理速度の向上 株式会社ベストシステムズ PASCO CORPORATION 2015
ERDAS IMAGINE における処理速度の向上 株式会社ベストシステムズ 本セッションの目的 本セッションでは ERDAS IMAGINEにおける処理速度向上を目的として機器 (SSD 等 ) 及び並列処理の比較 検討を行った 1.SSD 及び RAMDISK を利用した処理速度の検証 2.Condorによる複数 PCを用いた並列処理 2.1 分散並列処理による高速化試験 (ERDAS IMAGINEのCondorを使用した試験
Java知識テスト問題
Java 知識テスト SDAS プログラマ(Java 編 ) 運営事務局 このテストは J2EE プログラマとしての Java の知識を評価するものです 問題は 30 問, テスト時間は J2EE 知識テストとあわせて 90 分です 問題は全て択一式です 選択肢から 1 つだけ選択してください 資料の閲覧は禁止です テストが終わり次第 答案用紙を提出していただいてかまいません テスト終了後, 本テストの内容を他の方に話さないでください
POSIXスレッド
POSIX スレッド (3) システムプログラミング 2011 年 11 月 7 日 建部修見 同期の戦略 単一大域ロック スレッドセーフ関数 構造的コードロッキング 構造的データロッキング ロックとモジュラリティ デッドロック 単一大域ロック (single global lock) 単一のアプリケーションワイドの mutex スレッドが実行するときに獲得, ブロックする前にリリース どのタイミングでも一つのスレッドが共有データをアクセスする
演習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
PowerPoint プレゼンテーション
2018/10/05 竹島研究室創成課題 第 2 回 C 言語演習 変数と演算 東京工科大学 加納徹 前回の復習 Hello, world! と表示するプログラム 1 #include 2 3 int main(void) { 4 printf("hello, world! n"); 5 return 0; 6 } 2 プログラム実行の流れ 1. 作業ディレクトリへの移動 $ cd
Microsoft PowerPoint ppt
仮想マシン () 仮想マシン 復習 仮想マシンの概要 hsm 仮想マシン プログラム言語の処理系 ( コンパイラ ) 原始プログラム (Source program) コンパイラ (Compiler) 目的プログラム (Object code) 原始言語 (Source language) 解析 合成 目的言語 (Object Language) コンパイルする / 翻訳する (to compile
Microsoft PowerPoint - 09.pptx
情報処理 Ⅱ 第 9 回 2014 年 12 月 22 日 ( 月 ) 関数とは なぜ関数 関数の分類 自作関数 : 自分で定義する. ユーザ関数 ユーザ定義関数 などともいう. 本日のテーマ ライブラリ関数 : 出来合いのもの.printf など. なぜ関数を定義するのか? 処理を共通化 ( 一般化 ) する プログラムの見通しをよくする 機能分割 ( モジュール化, 再利用 ) 責任 ( あるいは不具合の発生源
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
Hphi実行環境導入マニュアル_v1.1.1
HΦ の計算環境構築方法マニュアル 2016 年 7 月 25 日 東大物性研ソフトウェア高度化推進チーム 目次 VirtualBox を利用した HΦ の導入... 2 VirtualBox を利用した MateriAppsLive! の導入... 3 MateriAppsLive! への HΦ のインストール... 6 ISSP スパコンシステム B での HΦ の利用方法... 8 各種ファイルの置き場所...
Microsoft PowerPoint - 講義:片方向通信.pptx
MPI( 片方向通信 ) 09 年 3 月 5 日 神戸大学大学院システム情報学研究科計算科学専攻横川三津夫 09/3/5 KOBE HPC Spring School 09 分散メモリ型並列計算機 複数のプロセッサがネットワークで接続されており, れぞれのプロセッサ (PE) が, メモリを持っている. 各 PE が自分のメモリ領域のみアクセス可能 特徴数千から数万 PE 規模の並列システムが可能
π-VizStudio User Manual
-VizStudio User Manual 2018-07-26 -CAVE -VizStudio () -CAVE -VizStudio User Manual -VizStudio -CAVE -VizStudio User Manual -VizStudio -VizStudio Manual -VizStudio -CAVE -VizStudio Admin Manual -CAVE -VizStudio
JavaプログラミングⅠ
Java プログラミング Ⅰ 6 回目 if 文と if else 文 今日の講義で学ぶ内容 関係演算子 if 文と if~else 文 if 文の入れ子 関係演算子 関係演算子 ==,!=, >, >=,
PowerPoint プレゼンテーション
Computer simulations create the future 2015 年度第 1 回 AICS 公開ソフト講習会 K MapReduce ハンズオン 滝澤真一朗松田元彦丸山直也 理化学研究所計算科学研究機構プログラム構成モデル研究チーム 1 RIKEN ADVANCED INSTITUTE FOR COMPUTATIONAL SCIENCE KMR の導入方法を学ぶ 目的 KMRRUN
Microsoft Word - appli_OpenMX_install.docx
OpenMX version 3.8.3 インストール手順書 (Linux 64 ビット版 ) 目次 1. アプリケーション概要... 1 2. システム環境... 1 3. アプリケーションのインストール... 1 4. 動作確認の実施... 4 本手順書は OpenMX の入手からインストールまでを説明した資料です 2018/3/7 1. アプリケーション概要 本手順書が対象としているアプリケーションは以下の通りです
1. TSUBAME2.0 通常実行まで 1.1. 環境設定 (MPI ライブラリ & コンパイラ ) 最新の Open MPI と Intel コンパイラを使用するため,${HOME}/.bashrc 等で環境変数 ( パス等 ) を設定します. ~ 設定例 ~ export SELECT_MPI
プロファイルツール実行例アプリ ntchem-rimp2 2013 年 9 月 3 日日本電気株式会社 0. はじめに 本ドキュメントでは, アプリ ntchem-rimp2 におけるプロファイルツール連携の作業履歴を記 載します. 目次 1. TSUBAME2.0 通常実行まで... 2 1.1. 環境設定 (MPI ライブラリ & コンパイラ )... 2 1.2. コンパイルとソース修正...
Microsoft Word - ユーザ向け利用の手引き_v0.3.doc
京 データポスト処理システム 利用の手引 0.3 版 改版履歴版 更新日付 内容 0.1 2012/4/11 新規作成 0.2 2012/9/6 ログインサーバ名の変更に伴う修正パスワード認証を禁止し 公開鍵認証のみ可能にしたことによる変更本手引きの題目の変更 2 章の名称を変更 京 経由の利用方法 多段接続に関する記述を追加計算ノードでの公開鍵の登録を Fowardagent を行うことで代えられる旨を追加
サイバーメディアセンター 大規模計算機システムの利用
サイバーメディアセンター 大規模計算機システムの利用 大阪大学情報推進部情報基盤課 本日のプログラム I. システムのご紹介 II. 利用方法の解説 実習 i. システムへの接続 ii. プログラムの作成 コンパイル iii. ジョブスクリプトの作成 iv. ジョブスクリプトの投入 III. 利用を希望する方へ SX-ACE NEC 製のベクトル型スーパーコンピュータ ノード毎 1 クラスタ (512
