SGI AltixUV1000 並列化プログラミング講習会

Size: px
Start display at page:

Download "SGI AltixUV1000 並列化プログラミング講習会"

Transcription

1 SGI Altix UV1000 並列化プログラミング講習会 日本 SGI 株式会社 HPC 技術推進本部 HPCコンサルティング部 1

2 Contents 1. システム構成と利用方法 2. SGI Altix UV1000 アーキテクチャ 3. 開発環境 4. コンパイルと実行 5. 最適化について 6. コンパイラオプション 7. 数値計算ライブラリ 8. デバッガと時間計測関数 9. ファーストタッチとデータ配置 10. 性能解析ツール 11. 並列化プログラミング 12. インテルコンパイラ自動並列化 13. OpneMP ( 利用方法 ) 14. OpenMPプログラミング入門 15. MPI( 利用方法 ) 16. MPIプログラミング入門 17. ハイブリッドプログラミング 2

3 1. システム構成と利用方法 3

4 計算サーバ構成概要 計算サーバ SGI Altix UV1000 x 2 式 ハードウエア Intel Xeon Processor E GHz/24MB Cache x 512 コア 5.4TFLOPS 8TB (1033MHz x 4 チャンネル, 共有メモリ ) インターコネクト NUMAlink5 (15GB/sec 双方向 ) オペレーティングシステム SuSE Linux Enterprise Server 11.1 SGI Foundation Software and SGI Performance Suite ソフトウェア Intel Fortran Compiler 12.1 Intel C++ Compiler 12.1 Inlte MKL 10.3 Intel Trace Analyzer/Collector PerfSuite MPInside 4

5 PBS キュー構成と利用方法 バッチジョブのキュー構成は下記の様に設定されています クラス ジョブの特徴 キュー待ちからの 実行順位 ジョブ実行の優先順位 (nice 値 ) ( ジョブあたりの ) 演算時間 ( ジョブあたりの ) 最大メモリ容量 SMALL 小規模ジョブ 高 高 224days 32GB (4GB) MEDIUM 中規模ジョブ やや高 やや高 896days 128GB (16GB) LARGE 超並列ジョブ 中 中 3584days 512GB (64GB) HUGE 大規模メモリジョブ 低 低 672days 1536GB (192GB) ( ジョブあたりの ) 最大コア数 8cores (2cores) 32cores (8cores) 128cores (32cores) 12cores (3cores) ( キューあたりの ) 最大ジョブ数 制限なし 制限なし 制限なし 4 ジョブの投入 % qsub [option] <JOB_SCRIPT> -N ジョブ名の指定 -q ジョブを投入するキューの指定 -o 標準出力ファイルのPATHの指定 -e 標準エラー出力ファイルのPATHの指定 -j oe 標準出力と標準エラー出力をまとめて出力 -l ジョブ実行に必要なリソースの要求 主なリソース ncpus=( プロセッサ数の指定 ) mem=( 最大物理メモリ容量 ) walltime=( ジョブを実行できる実際の経過時間 ) cput=( ジョブによって使用されるCPU 時間の最大値 ) 5

6 PBS の利用方法 ジョブスクリプト例 :OpenMP プログラム ( コンパイル済み ) を実行する qsub オプション部分 : 行の先頭に #PBS を記述します 同じオプションをジョブ投入時に付加することをできます それ以外の部分 : シェルで実行されるコマンドとして扱われます #!/bin/csh シェルを指定 #PBS q SMALL 投入するキューを指定 #PBS o my-job.out 標準入力ファイルのPATHを指定 #PBS e my-job.err 標準エラー出力ファイルのPATHを指定 #PBS l ncpus=4 必要なリソースの要求 (4コア) #PBS N my-job 投入するジョブ名の指定 cd ${PBS_O_WORKDIR} setenv KMP_AFFINITY disabled setenv OMP_NUM_THREADS 4 dplace x2./a.out 作業ディレクトリへ移動 インテルコンパイラのAFFINITYをdisabledにする 並列度の設定 実行 ジョブの確認 % qstat ステータス Q : 実行待ち R : 実行中 E: 終了処理中 S : 中断中 ジョブの削除 % qdel <Job id> 6

7 インタラクティブジョブの実行 インタラクティブジョブを実行する qsub -I qsubオプション部分 : -I: インタラクティブオプション インタラクティブオプションをつけてキューに投入すると ジョブの実行とともに入出力インタフェースがジョブ投入ウィンドウに返されます. ジョブを終了するには exit を入力します qsub -I -q SMALL ncpus=8 のように他のオプションを利用することも可能です ジョブを終了するには exit を入力します 7

8 2. SGI Altix UV1000 アーキテクチャ 8

9 並列計算機アーキテクチャ SMP ( 共有メモリ型 ) ccnuma ( 分散共有メモリ型 ) Cluster ( 分散メモリ型 ) Core Cache Core Cache Core Cache Core Cache Core Cache Core Cache Core Cache Core Cache Core Cache Core Cache Core Cache Core Cache Memory Memory Memory Memory Memory Memory Memory Memory BUS BUS BUS BUS Memory Memory Memory Memory Scalable Interconnect SGI UV1000 Interconnect (InfiniBand, Gigabit Ether, etc.) 特徴 SMP ccnuma Cluster メモリを共有 コンパイラによる自動並列化が可能 ローカルにメモリを持つが論理的に共有可能 自動並列化が可能 9 ローカルにメモリ ノード間はデータ転送が必要 プログラミング 容易容易容易でない ( 自動並列化 OpenMPが可能 ) ( 自動並列化 OpenMPが可能 ) ( 自動並列化 OpenMPはノード内のみ ) H/W スケーラビリティ 中 高い 非常に高い

10 グローバル共有メモリ NUMAlink Router SGI UV Blade SGI UV Blade SGI UV Blade SGI UV Blade UV HUB UV HUB UV HUB HUB UV HUB HUB CPU CPU CPU CPU CPU CPU CPU CPU 128GB 128GB 128GB 128GB 128GB 128GB 128GB 128GB 1024GB Shared Memory Up to 16TB Global Shared Memory 10

11 SGI UV architecture: Compute Blade Each blade: Up to 20 Intel Xeon E7 cores, up to 256GB DDR3 Intel Xeon E series Intel Xeon E series I/O risers provide choice of expansion slot capabilities &(4) Intel Xeon E Scalable Memory Buffer &(4) Intel Xeon E Scalable Memory Buffer SGI NUMAlink 5 = 15.0GB/s Intel Quick Path Interconnect (QPI) = 25.6GB/s aggregate (6.4GT/s) Directory FBD1 = 6.4GB/s read + 3.2GB/s write (800MHz DIMMs) Intel E7 Scalable Memory Buffers with 4 channels of DDR3 DIMMs Intel Scalable Memory Interconnect (SMI) 11

12 SGI UV 1000 System Overview To Router To Router NUMAlink5 Compute blade Compute blade To Router NUMAlink5 To Router Paired Node Bisection Bandwidth 480 GB/s 15GB/s/node 12

13 3. 開発環境 13

14 SGI Altix UV1000 開発環境 OS SUSE Linux Enterprise Server 11.1 SGI Foundation Software 2.4 SGI Accelerate 1.2 SGI Performance Suite 1.2 Fortran コンパイラ C/C++ コンパイラ Intel Fortran Compiler 12.1, gfortran Intel C++ Compiler 12.1, gcc ライブラリ Intel MKL 10.3 MPI SGI MPT (MPI 2.2 仕様に完全準拠 ) デバッガ ツール Intel Debugger, gdb PerfSuite, MPInside, perfcatcher 14

15 4. コンパイルと実行 15

16 コンパイラコマンド Intel Compiler のコンパイルコマンド icc (C/C++ をサポート ) icpc (C++ をサポート ) ifort (Fortran 77, 90, 95, 2003, 2005( 一部 ) をサポート ) オプション一覧を表示したいとき icc help / ifort help バージョン情報 icc V / ifort V コンパイル icc sample.c / ifort sample.f コンパイラマニュアルは 以下の URL からインテルコンパイラのマニュアルをご参照ください 16

17 コンパイルと実行 Fortran プログラム シリアルプログラム $ ifort O3 prog.f ( コンパイル ) $ dplace./a.out ( 実行 ) OpenMP プログラム $ ifort O3 openmp prog_omp.f ( コンパイル ) $ setenv KMP_AFFINITY disabled $ setenv OMP_NUM_THREADS 4 ( スレッド並列数の設定 ) $ dplace x2./a.out ( 実行 ) MPI プログラム $ ifort O3 prog_mpi.f lmpi ( コンパイル ) $ mpirun np 4 dplace s1./a.out ( 実行 ) ハイブリッド (MPI+OpenMP) プログラム $ ifort O3 openmp prog_hyb.f lmpi ( コンパイル ) $ setenv KMP_AFFINITY disabled $ setenv OMP_NUM_THREADS 4 ( スレッド並列数の設定 ) $ mpirun np 4 omplace nt ${OMP_NUM_THREADS}./a.out ( 実行 ) 17

18 コンパイルと実行 C/C++ プログラム シリアルプログラム $ icc O3 prog.f ( コンパイル ) $ dplace./a.out ( 実行 ) OpenMP プログラム $ icc O3 openmp prog_omp.f ( コンパイル ) $ setenv KMP_AFFINITY disabled $ setenv OMP_NUM_THREADS 4 ( スレッド並列数の設定 ) $ dplace x2./a.out ( 実行 ) MPI プログラム $ icc O3 prog_mpi.f lmpi ( コンパイル ) $ mpirun np 4 dplace s1./a.out ( 実行 ) ハイブリッド (MPI+OpenMP) プログラム $ icc O3 openmp prog_hyb.f lmpi ( コンパイル ) $ setenv KMP_AFFINITY disabled $ setenv OMP_NUM_THREADS 4 ( スレッド並列数の設定 ) $ mpirun np 4 omplace nt ${OMP_NUM_THREADS}./a.out ( 実行 ) 18

19 バッチスクリプト例 シリアルプログラム #/bin/csh #PBS -N serial_job ジョブ名 #PBS -q SMALL キュー名 #PBS -o stdout.log 標準出力ファイル #PBS j oe 標準出力と標準エラー出力をまとめる #PBS -l ncpus=1 リソースの確保 (1コア) cd ${PBS_O_WORKDIR} dplace./sample 作業ディレクトリへ移動 実行 19

20 バッチスクリプト例 OpenMP プログラム #/bin/csh #PBS -N openmp ジョブ名 #PBS -q SMALL キュー名 #PBS -o stdout.log 標準出力ファイル #PBS j oe 標準出力と標準エラー出力をまとめる #PBS -l ncpus=4 リソースの確保 (4コア) cd ${PBS_O_WORKDIR} 作業ディレクトリへ移動 setenv KMP_AFFINITY disabled インテルのAffinityをdisabledにする setenv OMP_NUM_THREADS 4 スレッド並列数の設定 (4スレッド) dplace -x2./a.out 実行 20

21 バッチスクリプト例 MPI プログラム #/bin/csh #PBS -N mpi ジョブ名 #PBS -q SMALL キュー名 #PBS -o stdout.log 標準出力ファイル #PBS j oe 標準出力と標準エラー出力をまとめる #PBS -l ncpus=4 リソースの確保 (4コア) cd ${PBS_O_WORKDIR} mpirun -np 4 dplace -s1./a.out 作業ディレクトリへ移動 4 並列で実行 21

22 バッチスクリプト例 ハイブリッドプログラム #/bin/csh #PBS -N hybrid ジョブ名 #PBS -q MEDIUM キュー名 #PBS -o stdout.log 標準出力ファイル #PBS I oe 標準出力と標準エラー出力をまとめる #PBS -l ncpus=16 リソースの確保 (16コア) cd ${PBS_O_WORKDIR} 作業ディレクトリへ移動 setenv KMP_AFFINITY disabled setenv OMP_NUM_THREADS 4 mpirun -np 4 omplace -nt ${OMP_NUM_THREADS}./a.out MPI = 4 プロセス x OpenMP 4 スレッド = 16 コアで実行 22

23 5. 最適化について 23

24 最適化 並列化手順 アプリケーションプログラムの高速化を検討する際は 一般に次のような手順で最適化 並列化を行います 性能解析ツールを使用して プログラムのボトルネックになっている部分やその原因を特定します 1プロセッサでの高速化 ( 最適化 ) を検討する 最適化したプログラムの並列化を検討する 性能解析 最適化 一般には この手順を繰り返すことによって高い性能が得られます 並列化 最適化 並列化コード 24

25 最適化 並列化手順 プログラム最適化には様々の方法があります コンパイラオプション 最適化されたライブラリ コード修正による最適化 並列化にも様々な方法があります 自動並列化 OpenMP 指示行 MPI Hybrid (MPI + OpenMPなど ) 25

26 6. コンパイラオプション 26

27 推奨するコンパライオプション デフォルトで設定されている主なオプション オプションの種類オプションオプションのレベル 最適化レベル -O2 パフォーマンス向上のための最適化を行ないます 特定のプロセッサ向けの最適化 -msse2 インテルプロセッサ向けにSSE2およびSSE 命令を生成し SSE2 対応のインテルXeonプロセッサ向けの最適化をし ます 推奨するオプション オプションの種類オプションオプションのレベル 最適化レベル -O3 -O2に加えプリフェッチ スカラー置換 ループ変換 およ びメモリアクセス変換などのより強力な最適を有効にし ます 特定のプロセッサ向けの最適化 -xsse4.2 SSE4ベクトル化コンパイラー命令及びメディアアクセラレター命令 SSSE3, SSE3, SSE2, SSE 命令を生成し インテルXeonE 番台および5600 番台のプロセッ サ向けに最適化をします 27

28 最適化レベルオプション オプション 内容 -O0 全ての最適化を無効とします 主にデバッグ時に利用 -O1 グローバルな最適化を有効化 組み込み関数の認識と組込み関数のインライン展開の無効 この最適化レベルでは 分岐が多く 実行時間の多くがループではないコードの性能向上が見込めます デフォルトの最適化レベル 最適化レベルを指定しない場合 この最適化レベルが適用されます この最適化レベルでは次の最適化を行います -O2 インライン展開 定数伝播 コピー伝播 不要コードの削除 グローバルレジスタの割り当て グローバル命令スケジューリング スペキュレーション コントロール ループのアンロール コード選択の最適化 -O2 オプションに加えて プリフェッチ スカラー置換 キャッシュ ブロッキング ループ変換 メモリアクセス変換などの最適化を行います -O3 -fast 浮動小数点演算の多いループや大きなデータセットを処理するコードで性能向上が見込めます -axsse4.2 および -xsse4.2 オプションとの組み合わせでより詳細なデータ依存性解析をします -xhost O3 ipo no-prec-div static を有効にするマクロオプションです -fast オプションには -static オプションが含まれるため ダイナミック ライブラリしか提供されていないライブラリを利用する場合 -Bdynamic オプションでそのライブラリを指定する必要があります 28

29 最適化に関するオプション オプション 内容 -x プロセッサプロセッサで指定した特定のプロセッサ向けのバイナリを生成します -axプロセッサ -vec -vec-report -no-prec-div -no-prec-sqrt プロセッサで指定した特定のプロセッサ向けのバイナリと一般的な IA32 アーキテクチャ向けのバイナリを一つのバイナリで生成します ベクトル化を有効 / 無効にします デフォルトは有効 ベクタライザーからのメッセージをコントロールします デフォルトではベクタライザーからのメッセージは出力されません ベクタライザーからのメッセージを出力するためには このオプションを有効にしてください IEEE 準拠の除算よりも多少精度が低くなる場合がありますが 最適化を試みます 平方根計算が多少精度が低くなる場合はありますが 高速な計算を行います 29

30 特定のプロセッサ向けの最適化オプション -ax プロセッサ -x プロセッサ : 特定のプロセッサ向けの最適化を行います プロセッサ HOST SSE4.2 SSE4.1 SSSE3 SSE3 特定のプロセッサ向けの最適化を行います コンパイルをしたプロセッサで利用可能な 最も高いレベルの命令を生成し そのプロセッサ向けの最適化を行います Westmere-EX(Intel Xeon E 番台 ) 向けの最適化を行い SSE4.2 命令を生成します さらに SSE4 のベクトル化コンパイル命令 メディア アクセラレター SSSE3, SSE3, SSE2, SSE 命令を生成し インテル Core プロセッサ向け最適化を行います SSE4 のベクトル化コンパイル命令 メディア アクセラレター SSSE3, SSE3, SSE2, SSE 命令を生成し 45nm プロセスルール世代のインテル Core プロセッサ (Intel Xeon 5200 番台 5400 番台 ) 向け最適化を行います SSSE3, SSE3, SSE2, SSE 命令を生成し インテル Core2 Duo プロセッサ (Intel Xeon 5100 番台 5300 番台 ) 向け最適化を行います SSE3, SSE2, SSE 命令を生成し インテル Netburst マイクロアーキテクチャ向け (Intel Xeon 5000 番台 ) 最適化を行います 30

31 最適化に関するオプション プロシージャ間解析の最適化 オプション -ip -ipo 内容 1 つのソースファイルにあるプロシージャ間の解析 最適化を行います 複数のソースファイルにあるプロシージャ間の解析 最適化を行います リンク時にもオプションとして指定してください 浮動小数点演算に関するオプション オプション -ftz -fltconsistency 内容 アンダーフローが発生したときに値をゼロに置き換えます デフォルトでは このオプションが有効になっています このオプションが数値動作で好ましくない結果を出力した場合 -no-ftzオプションでアンダーフローが発生したときに値をゼロにフラッシュしなくなります 浮動小数点の一貫性を向上させ IEEE754 規格に則った浮動小数点演算コードを生成します 31

32 最適化に関するオプション オプション -falias -fno-alias -ffnalias -fno-fnalias 内容 複数のポインタが同じメモリ領域を参照する ( エイリアスがある ) かどうかを コンパイラに指示する エイリアスがない場合 データ依存性問題の発生する可能性がないため コンパイラは積極的な最適化を行うようになります 特に C/C++ コードの最適化に効果を発揮します ソースコードを書き換えてよいなら ポインタに restrict を使用することもできます ( お勧め ) エイリアスがある場合 このオプションを使うと正しい結果が得られません エイリアスがないことを利用者が認識している場合にのみ有効です p p P のアクセス範囲 P のアクセス範囲 q q q のアクセス範囲 q のアクセス範囲 エイリアスなし 32 エイリアスあり

33 最適化レポート オプション -opt-report [n] -opt-report-file=name -opt-report-routine=name -opt-report-phase=name -opt-report-help 内容 最適化レポートを標準エラー出力に表示 n=0 : disable optimization report output n=1 : minimum report output n=2 : medium output (DEFAULT) n=3 : maximum report output 最適化レポートを name というファイルに出力 name で指定されたサブルーチンのレポートのみを出力 name で指定された最適化フェーズのレポートを出力 最適化レポート生成可能な最適化機構フェーズを表示 最適化のフェーズについて 最適化フェーズ 最適化の内容 関連するオプション ipo Interprocedural Optimizer -ipo, -ip hlo High-level Language Optimaizer -O3 (Loop Unrolling) ilo hpo Intermediate Language Scalar Optimizer High Performance Optimizer pgo Profile Guided Optimizer -prof_gen, -prof_use 33

34 リンクに関するオプション オプション -static -Bstatic -Bdynamic -shared-intel -static-intel 内容 スタティックライブラリをリンクします スタティックライブラリが無い場合はエラーになります スタティックライブラリを指定します ダイナミックライブラリを指定します インテルのダイナミックライブラリをリンクします インテルのスタティックライブラリをリンクします 34

35 データサイズ Intel64 コンパイラ C ビット数 FORTRAN short int int long int long long int float double long double INTEGER(KIND=2) INTEGER(KIND=4) INTEGER (KIND=8) INTEGER(KIND=8) REAL(KIND=4) REAL(KIND=8) REAL(KIND=16) char 8 CHARACTER(LEN=1) 35

36 データサイズ IA32, Intel64, IA64 コンパイラの違い ビット数 C 言語でのサイズ Intel 32 Intel 64 IA-64 char short int int long long long pointer float double long double

37 Intel 64 におけるメモリモデル Intel Compiler では 32 および 64 ビットのバイナリは異なります Intel 64 メモリモデル small( デフォルト ) コードとデータは最初の 2GB のメモリ空間に制限されます medium(-mcmodel=medium) コードは最初の 2GB のメモリ空間に制限されますが データは制限されません large(-mcmodel=large) コードもデータも制限されません Intel 64アーキテクチャはの2GBの制限は 2GBを超える配列だけでなく 合計が2GBを超える共通ブロックとローカルデータにも適用されます 37

38 データ変換 バイナリデータのエンディアン Xeon, Opteron : Little Endian Sparc, Power, SX : Big Endian Big EndianバイナリファイルをXeonのシステムで読み込むにはエンディアンの変換が必要です コンパイルオプションによる変換 -convert big_endian 環境変数による変換 すべてのファイルに対してビックエンディアンに変換 $ setenv F_UFMTENDIAN big ユニット番号 10, 20のみをビックエンディアンに変換 $ setenv F_UFMTENDIAN big:10,20 ユニット番号 10から20をビックエンディアンに変換 $ setenv F_UFMTENDIAN 拡張子 (.DAT) を指定してビックエンディアンに変換 $ setenv FORT_CONVERT.DAT BIG_ENDIAN FORTRAN のみ 38

39 7. 数値計算ライブラリ 39

40 Intel Math Kernel Library (MKL) 特徴 科学技術計算向け インテルプロセッサ向けにチューニング マルチスレッド対応 スレッド並列化 スレッドセーフ 自動ランタイム プロセッサ検出機能 C および Fortran のインターフェイス 40

41 Intel Math Kernel Library (MKL) Intel Math Kernel Library には以下の機能が含まれます BLAS BLACS LAPACK ScaLAPACK PBLAS Sparse Solver Vector Math Library (VML) Vector Statistical Library (VSL) Conventional DFTs and Cluster DFTs etc. 41

42 Intel Math Kernel Library (MKL) MKL をリンクする方法 シリアル版の場合 : $ ifort o test test.f lmkl_intel_lp64 lmkl_sequential lmkl_core スレッド版の場合 : $ ifort o test test.f lmkl_intel_lp64 lmkl_intel_thread lmkl_core liomp5 インテルコンパイラのオプション -mkl で MKL をリンクすることもできます シリアル版の場合 : $ ifort o test test.f mkl=sequential スレッド版の場合 : $ ifort o test test.f mkl=parallel 42

43 Intel Math Kernel Library (MKL) BLACS および ScaLAPACK の利用方法 シリアル版の場合 : $ ifort -lmkl_scalapack_lp64 -lmkl_blacs_sgimpt_lp64 -lmkl_intel_lp64 -lmkl_sequential -lmkl_core example1.f -lmpi スレッド版の場合 : $ ifort -lmkl_scalapack_lp64 -lmkl_blacs_sgimpt_lp64 -lmkl_intel_lp64 -lmkl_intel_thread -lmkl_core -liomp5 example1.f -lmpi インテルコンパイラのオプション -mkl で MKL をリンクすることもできます シリアル版の場合 : $ ifort -lmkl_scalapack_lp64 -lmkl_blacs_sgimpt_lp64 -mkl=sequential example1.f -lmpi スレッド版の場合 : $ ifort -lmkl_scalapack_lp64 -lmkl_blacs_sgimpt_lp64 -mkl=parallel example1.f-lmpi 43

44 Intel Math Kernel Library (MKL) スレッド並列版 MKL を使う場合は注意が必要です シリアルで実行スレッド並列で実行 MPIで実行ハイブリッドで実行 環境変数 OMP_NUM_THREADS を 1 に設定します または シリアル版 MKL をリンクします 環境変数 OMP_NUM_THREADS を並列実行数に設定します OpenMP のプログラム中で MKL を使う場合 OMP_NUM_THREADS で設定されたスレッド数で実行されます また OpenMP のスレッド数とは違うスレッド数で実行したい場合は OMP_NUM_THREADS 以外に MKL_NUM_THREADS を設定します OpenMP で並列化されたループ内で MKL のスレッド並列化された関数を用いる場合 デフォルトでは OpenMP のネストが無効になっているため MKL のスレッド並列は無効です 環境変数 OMP_NESTED を yes とすることにより MKL のスレッド並列を有効にすることが可能です MPI のみで並列実行する場合 MKL がスレッド並列で動作しないように環境変数 OMP_NUM_THREADS を 1 に設定します または シリアル版 MKL をリンクします MPI とスレッド並列のハイブリッドでの実行をする場合 MKL のスレッド数を OMP_NUM_THREADS または MKL_NUM_THREADS で設定します 44

45 8. デバッガと時間計測関数 45

46 デバッガ 以下のデバッガをご利用いただけます gdb - GNU Debugger Linux 標準のデバッガ マルチスレッド対応 (OpenMP, pthread) idbc Intel Debugger Intel Compiler に付属のデバッガ マルチスレッド対応 (OpenMP, pthread) インタフェイスを変更可 (dbx 風 gdb 風 ) GUI 対応 (idb) ( 使用例 ) コアファイルの解析 % idbc./a.out core (idb)where (idb)w idb からのプログラムの実行 % idbc./a.out (idb) run 実行中のプロセスへのアタッチ % idbc pid [process id]./a.out % gdb a.out [process id] 46

47 デバッグに関するオプション デバッグ時に有用なコンパイルオプション オプション 内容 -g -traceback -g -check bounds traceback -g -fpe0 traceback -g -r8 オブジェクトファイルにデバッグ情報を生成する 最適化レベルオプション -O が明示的に指定されていない場合 最適化レベルは -O0 になります デバッグのために必要な情報をオブジェクトファイルに埋め込みます Segmentation Fault などのエラー終了時にエラーの発生箇所を表示します 実行時に配列の領域外参照を検出します 2 つのオプションと -g オプションを同時に指定してください 浮動小数点演算の例外処理を検出します 2 つのオプションと -g オプションを同時に指定してください real/compelx 型で宣言された変数を real*8/complex*16 型の変数として取り扱います -i8 integer 型で宣言された変数を integer*8 型の変数として取り扱います -save -zero 変数を静的に割り当て ゼロで初期化します 47

48 時間計測関数 C/C++ gettimeofday Fortran cpu_time time, etime, dclock MPI(C/C++/Fortran) MPI_Wtime OpenMP omp_get_wtime #include<sys/time.h> #include<stdio.h> gettimeofday の例 : 以下のようにすると μ 秒単位の時間を返します double elapsed_() { struct timeval tp; struct timezone tz; gettimeday(&tp,&tz); return ( (double) tp.tv_sec + (double) tp.tv_usec * 1.e-6 ); } 48

49 時間計測関数 C プログラムで使用できる時間計測関数 gettimeofday : 経過時間を秒で返します mpi_wtime : 経過時間を秒で返します (MPIプログラム) omp_get_wtime : 経過時間を秒で返します (OpenMPプログラム) 参考資料より抜粋 49

50 9. ファーストタッチとデータ配置 50

51 ファーストタッチ ポリシー SGI Altix UV1000 は NUMA アーキテクチャであり データはファーストタッチ ポリシーでメモリに配置されます ファーストタッチ ポリシーとは 最初にデータに触れたコアのローカルメモリにデータが配置されます NUMA アーキテクチャでは ある特定のコアからみるとローカルメモリとリモートメモリがあります データをできるだけローカルメモリに配置して計算することが高速化において必要です プロセスをどこのコアに配置するかが重要になります (dplace/omplace コマンド ) NUMAlink Router Altix UV Blade Altix UV Blade Altix UV Blade Altix UV Blade HUB HUB HUB HUB リモートメモリアクセス CPU CPU CPU CPU CPU CPU CPU CPU ローカルメモリアクセス 64GB 64GB 64GB 64GB 64GB 64GB 64GB 64GB Altix UV における ファーストタッチ ポリシーの概念図 51

52 NUMA における並列化の留意点 全てのデータは ファーストタッチ で ( ページ単位で ) メモリに配置されます 初期化ループが逐次実行領域である場合 該当データは逐次実行したノードに配置されます 並列実行領域では全てのプロセッサから1ノードへのアクセスが集中してプログラムの 性能が低下します NUMAlink Router do i = 1, N a(i) = 0.d0 b(i) = real(i)/2.d0 c(i) = real(i)/3.d0 d(i) = real(i)/7.d0 enddo!$omp parallel do do i = 1, N a(i) = b(i) + c(i) + d(i) enddo 逐次実行 並列実行 ここにアクセスが集中してボトルネックになる 52 CPU Altix UV Blade 64GB HUB CPU 64GB CPU データがここだけにアロケーションされる Altix UV Blade 64GB HUB CPU 64GB

53 NUMA における並列化の留意点 初期化ループを並列化します 全てのデータは ファーストタッチ によりローカルなメモリに配置されます 並列実行領域では 各スレッドがローカルなメモリへアクセスすることになり プログラムの性能が向上する!$omp parallel do do i = 1, N a(i) = 0.d0 b(i) = real(i)/2.d0 c(i) = real(i)/3.d0 d(i) = real(i)/7.d0 enddo!$omp parallel do do i = 1, N a(i) = b(i) + c(i) + d(i) enddo 並列実行 並列実行 CPU Altix UV Blade HUB CPU CPU NUMAlink Router Altix UV Blade HUB CPU 64GB 64GB 64GB 64GB 53 それぞれのローカルなメモリにデータがアロケーションされ アクセスが分散される

54 dplace/omplace コマンド プロセス ( スレッド ) をコアに固定するために dplace コマンドまたは omplace コマンドを使います プロセス ( スレッド ) が別のコアに移動してしまうことを防ぎます リモートメモリアクセスやキャッシュ利用の効率化 並列化プログラムについてはオプションを用いて 管理プロセス ( スレッド ) の配置を抑止します 管理プロセス ( スレッド ) の配置を抑止することによって 計算プロセス ( スレッド ) を正しく配置します 実行例 シリアルプログラム % dplace [-c0]./a.out OpenMP プログラム % dplace x2 [-c0-3]./a.out MPI プログラム % mpirun np 4 dplace s1 [-c0-3]./a.out Hybrid プログラム (MPI + OpenMP) % mpirun np 4 omplace nt 4./a.out 54

55 10. 性能解析ツール 55

56 性能解析ツール プログラムのホットスポットやボトルネックを検出するための性能解析ツールを用意しています シリアルプログラムだけでなく OpenMPやMPIによる並列プログラムの性能解析も可能 MPI 通信の解析も可能 性能解析ツール PerfSuite MPI 通信解析ツール MPInside 56

57 PerfSuite PerfSuite は プログラムのホットスポットをルーチンレベル ラインレベルで調査することができます PerfSuite の特徴 再リンクを必要としない ( ラインレベルの解析は -g を付けて再ビルドの必要があります ) MPIやOpenMPによる並列プログラムに対応 シンプルなコマンドライン ツール スレッド / プロセスごとにレポートを出力 ソースラインレベルで解析可能 57

58 PerfSuite 利用方法 ( 準備 ) 準備 bash 系の場合 $. /opt/sgi/perfsuite/bin/psenv.sh csh 系の場合 $ source /opt/sgi/perfsuite/bin/psenv.csh 58

59 PerfSuite 利用方法 ( 実行コマンド ) psrunコマンドを用いてプロファイルの取得をします ラインレベルでの取得が必要な場合は -g オプションを付けてビルドします PerfSuiteでプロファイル取得時の実行コマンドです dplaceコマンドのオプションが変わりますのでご注意ください シリアルプログラム (0 番のコアで実行 ) $ dplace s1 c0 psrun./a.out OpenMP プログラム (4 スレッドを 0 から 3 番のコアで実行 ) $ dplace x5 c0-3 psrun -p./a.out MPI プログラム (SGI MPT を用いて 4 プロセスを 0 から 3 番のコアで実行 ) $ mpirun np 4 dplace s2 c0-3 psrun -f./a.out 59

60 PerfSuite 利用方法 ( 実行例 ) OpenMP プログラム 4 スレッドの実行例 実行後 スレッド / プロセス毎に以下の名前のファイルが生成されます プロセス名.( スレッド番号.)PID. ホスト名.xml $ ls -l a.out.*.xml -rw-r--r-- 1 appadm crj :53 a.out uva.xml -rw-r--r-- 1 appadm crj :53 a.out uva.xml -rw-r--r-- 1 appadm crj :53 a.out uva.xml -rw-r--r-- 1 appadm crj :53 a.out uva.xml -rw-r--r-- 1 appadm crj :53 a.out uva.xml 60

61 PerfSuite 利用方法 ( 結果の表示例 ) プロファイル結果として出力されたファイルを psprocess コマンドで成形してプロファイル結果を表示します $ psprocess a.out uva.xml 61

62 PerfSuite 利用方法 ( 結果の表示例 ) OpenMP プログラムを 4 スレッドで実行したときのマスタースレッドの結果 プロファイルを取得したシステムの環境のサマリー PerfSuite Hardware Performance Summary Report Version : 1.0 Created : Mon Jun 18 16:54:28 JST 2012 Generator : psprocess 0.5 XML Source : a.out uva.xml Module Summary モジュール毎のプロファイル結果 Execution Information ============================================================================================ Samples Self % Total % Module Collector : libpshwpc Date : Mon Jun 18 16:53: % 99.63% /home/appadm/gojuki/training_2012/a.out Host : uva % % /lib64/libc so Process ID : Thread : % % /lib64/libpthread so User : appadm File Summary Command : a.out ファイル毎のプロファイル結果 Processor and System Information Samples Self % Total % File ============================================================================================ Node CPUs : % 99.63% /home/appadm/gojuki/training_2012/himenobmtomp.c Vendor : Intel Family : Pentium Pro (P6) % %?? Brand : Intel(R) Xeon(R) CPU 2.67GHz Function Summary 関数毎のプロファイル結果 CPU Revision : 2 Clock (MHz) : Memory (MB) : Samples Self % Total % Function Pagesize (KB) : % 53.06% L_jacobi_201 par_loop0_2_132 Cache Information % 97.38% jacobi ============================================================================================ % 99.63% main Cache levels : 3 ============================================================================================ ラインレベルでのプロファイル結果 Function:File:Line Summary Profile Information Samples Self % Total % Function:File:Line ============================================================================================ Class : itimer % 40.82% jacobi:/home/appadm/gojuki/training_2012/himenobmtomp.c:230 Version : % 48.06% L_jacobi_201 par_loop0_2_132:/home/appadm/gojuki/training_2012/himenobmtomp.c:211 Event : ITIMER_PROF (Process time in user and system mode) % 55.31% L_jacobi_201 par_loop0_2_132:/home/appadm/gojuki/training_2012/himenobmtomp.c:213 Period : Samples : % 62.42% L_jacobi_201 par_loop0_2_132:/home/appadm/gojuki/training_2012/himenobmtomp.c:206 Domain : all % 68.16% L_jacobi_201 par_loop0_2_132:/home/appadm/gojuki/training_2012/himenobmtomp.c:221 Run Time : (seconds) % 72.41% L_jacobi_201 par_loop0_2_132:/home/appadm/gojuki/training_2012/himenobmtomp.c:209 Min Self % : (all) % 76.53% L_jacobi_201 par_loop0_2_132:/home/appadm/gojuki/training_2012/himenobmtomp.c:210 62

63 MPInside MPInsideはMPIプログラムにおいて どのMPI 関数で時間がかかっているのか また通信するデータサイズなどのプロファイルを取得することができます プロファイル結果によって MPIプログラムのチューニングに有用な情報が得られます 63

64 MPInside 利用方法 ( 準備と実行 ) 準備 module コマンドで MPInside を利用できるように設定します 実行例 $ module load MPInside/ プロセスを 0 から 3 番のコアで実行する場合を示します $ mpirun -np 4 dplace -s1 -c0-3 MPInside./a.out 実行結果は mpinside_stats ファイルに保存されます 64

65 MPInside 利用方法 ( 実行結果 ) 4 並列で実行したときの実行結果 MPInside standard(oct :32:25) >>> column meanings <<<< init : MPI_Init waitall : mpi_waitall : Ch_send=0,R_send+=count;Ch_recv=0,R_recv++ >>>> Elapse times in (s) 0 1<<<< 経過時間ごとの通信プロファイル結果 isend : mpi_isend CPU Comput init waitall isend irecv barrier allred carcrea cartget carshif overhead irecv : mpi_irecv barrier : mpi_barrier : R_send+=comm_sz;R_recv allred : mpi_allreduce : R_send+=comm_sz;Ch_recv+=count,R_recv carcrea : mpi_cart_create cartget : mpi_cart_get carshif : mpi_cart_shift >>>> Ch_send array: Mbytes with send attribute <<<< 送信サイズ [Mbytes] overhead : mpinside_overhead : Various MPInside overheads CPU Comput init waitall isend irecv barrier allred carcrea cartget carshif overhead 送信回数 >>>> R_send array: Number of requests with Send attribute<<<< CPU Comput init waitall isend irecv barrier allred carcrea cartget carshif overhead >>>> Ch_recv array: Mbytes with Recv attribute <<<< CPU Comput init waitall isend irecv barrier allred carcrea cartget carshif overhead >>>> R_recv array: Number of requests with Recv attribute<<<< CPU Comput init waitall isend irecv barrier allred carcrea cartget carshif overhead 受信サイズ [Mbytes] 受信回数

66 11. 並列化プログラミング 66

67 並列化について プログラムを並列化することのメリットは 実行時間 ( ターンアラウンドタイム ) が短縮されることです 並列化によるスピードアップ s とは 下式のように スレッド数 1 で実行した場合の実行時間 T 1 と スレッド数 N で実行した場合の実行時間 T N の比であると定義します T 1 s T N 67

68 アムダールの法則 1/4 あるプログラムを逐次実行した際の実行時間のうち 並列化できる部分の割合を p (0 p 1) とします このとき スレッド数 N で実行した場合のスピードアップ s は 並列化のオーバーヘッド等を無視できるとすると 以下の式に従うことが知られています s = p N + 1 ( 1 p) ( 0 p 1) これを アムダールの法則といいます 68

69 アムダールの法則 2/4 アムダールの法則によるスピードアップの理論値 スピードアップ s p=0.9 p=0.95 p= スレッド数 N 69

70 アムダールの法則 3/4 多くのプロセッサを使用して高い並列性能を得るためには 実行時間中の並列処理されている時間の割合 p を少しでも高めることが重要です 並列化のオーバーヘッドが増大することは p が減少すること等価であると考えられます したがって 並列性能を高めるためには 逐次実行領域を減らす オーバーヘッドを減らすことが重要です 70

71 アムダールの法則 4/4 逐次実行領域を減らす 並列実行領域を増やす OpenMP では master, critical, atomic, single 領域を減らす オーバーヘッドを減らす 小さい並列実行領域をたくさん定義するのではなく 大きな並列実行領域を定義するようにする ( 粗粒度 ) 十分な仕事量があるものだけ並列処理する 同期 待ち時間を避ける OpenMP では barrier を減らす 可能ならば nowait を指定する... ロードバランスを改善する 71

72 12. インテルコンパイラ自動並列化 72

73 自動並列化 インテルコンパイラによる自動並列化 マルチスレッドの並列化 コンパイラにより最適化と組み合わせた並列化 コンパイルオプションによる簡単な操作 並列化診断メッセージによるレポート ( ソースコードは出力されません ) 73

74 インテルコンパイラによる自動並列化 インテルコンパイラで自動並列化を有効にするには-parallel オプションを指定します コンパイルとリンクを別々に行う場合 $ ifort c parallel myprog.f $ ifort parallel ( または -openmp) myprog.o コンパイルとリンクを一緒に行う場合 $ ifort parallel myprog.f 実行時には OpenMP による並列化と同様に 次の環境変数でスレッド数やランタイム スケジュールを設定します 環境変数 OMP_NUM_THREADS OMP_SCHEDULE 使用するスレッド数を指定します デフォルトは実行バイナリを作成したシステムの搭載されているコア数 ランタイム スケジューリングを指定します デフォルトは STATIC 74

75 インテルコンパイラによる自動並列化 自動並列化では 2 つの指示行を使うことができます Fortranの場合!DEC$ PARALLEL Cの場合 #pragma parallel Fortranの場合!DEC$ NOPARALLEL Cの場合 #pragma noparallel ループに対して 想定される依存性を無視して自動並列化を行うことをコンパイラに指示します ただし 依存性が証明されると並列化されません ループに対して 自動並列化を無効にします 例!DEC$ NOPARALLEL do I = 1, n x(i) = I end do!dec$ PARALLEL do I = 1, n a( x(i) ) = I end do 自動並列化されません 依存関係が想定されますが 自動並列化されます 75

76 インテルコンパイラによる自動並列化 -parallel -par-thresholdn 自動並列化機能を有効にし 安全に並列化できるループのマルチスレッド コード生成をコンパイラに指示します このオプションは -O2 または -O3 オプションも指定する必要があります 並列実行が効果的である可能性に基づいてループの自動並列化の閾値を設定します n=0: ループの計算量に関わらず 常に自動並列化します n=100: 性能向上が見込める場合のみ自動並列化します n=1~99 は速度向上する可能性を表します 自動並列化の診断情報を制御します デフォルトでは自動並列化メッセージは出力されません -par-reportn n=0: 診断情報を出力しません n=1: 正常に自動並列化できたループに対して LOOP AUTO-PARALLELIZED のメッセージを出力します n=2: 正常に自動並列化したループとできなかったループに対してメッセージを出力します n=3: 2 の出力に加えて自動並列化できなかった場合の判明した依存関係と想定される依存関係を主強くします 76

77 13.OpenMP OpenMP の利用方法 77

78 OpenMP の利用方法 (1/2) インテル コンパイラでは OpenMP Fortran 3.0 の API をサポートしています インテル コンパイラで OpenMP を使用するときは次の様に -openmp オプションを指定してコンパイルします コンパイルとリンクを別々に行う場合 $ ifort c openmp myprog.f $ ifort openmp myprog.o コンパイルとリンクを一緒に行う場合 $ ifort openmp myprog.f 実行するときは OpenMP 環境変数 OMP_NUM_THREADS で使用するスレッド数を指定します 78

79 OpenMP の利用方法 (2/2) -openmp OpenMP 指示行に基づきマルチスレッド コードを生成します OpenMP の診断情報を制御します デフォルトでは OpenMP の診断メッセージは出力されません -openmp-reportn n=0: 診断メッセージを表示しません n=1: 正常に並列化された 領域 およびセクションを示す診断メッセージを表示します n=2: 1 で表示されるメッセージに加えて 正常に処理された MASTER SINGLE CRITICAL ORDERED ATOMIC などの診断メッセージを表示します 79

80 14.OpenMP プログラミング入門 OpenMP とはループの並列化 OpenMP 指示行と環境変数 80

81 OpenMP とは OpenMP 指示行による並列化!$omp parallel do shared(a, B, C) do I = 1, 9999 A(i) = B(i) + C(i-1) + C(i+1) enddo!$omp end parallel do 代表的な OpenMP 指示行 PARALLEL { } PARALLEL DO, PARALLEL DO REDUCTION(+: ) MASTER CRITICAL BARRIER 81

82 OpenMP の指示行 OpenMP 指示行 = コンパイラに対する並列化命令 OpenMP 機能が無効の場合には 単なるコメントとして扱われ無視されます 大文字と小文字は区別されます (C の場合 ) 継続行は & アンパサンド (C の場合は / バックスラッシュ ) で記述します 自由形式の場合は前の行の最後にも & が必要です!$omp parallel do private( 変数 p1, ) shared( 変数 s1, ) do i = 1, N 並列実行領域 enddo 同じ意味!$omp parallel do private( 変数 p1, )!$omp+shared( 変数 s1, ) do i = 1, N enddo 並列実行領域 82

83 hello, world PARALLE 指示行!$omp parallel [ オプション ( 節 )] 指示文に続く文を並列に実行します program main!$omp parallel!$omp critical write(6,*) hello, world!$omp end critical 並列実行領域!$omp end parallel end program main 83

84 hello, world の実行例 $ ifort -openmp openmp-report1 hello.f hello.f(3): (col. 7) remark: OpenMP DEFINED REGION WAS PARALLELIZED.] $ setenv OMP_NUM_THREADS 4 $ dplace x2./a.out hello, world hello, world hello, world hello, world $ 実行開始 マスタスレッドのみ実行 並列実行領域の生成 それぞれ write 文を実行 待ち合わせ マスタスレッドのみの実行に戻る 終了 84

85 レッレッレッレッド3do ループのワークシェアリング do 指示行!$omp do [ オプション ( 節 )] 並列実行領域で使用し 後続する doループを各スレッドで分担して実行します デフォルトでは ループ長がスレッド数で均等に分割されます i=1,2, N N/4 ずつに分割スループ長 N の処理 4 スレッドの場合 ド0スド1スド2ス 85

86 do ループのワークシェアリング parallel do 指示行 parallel 指示行 + do 指示行 並列実行領域を作成し 後続の do ループを分割実行します subroutine daxpy(n, c, x, y) integer :: n real(kind=8) :: c real(kind=8),dimension(n) :: x, y!$omp parallel do private(i) shared(c, x, y) do i = 1, n y(i) = y(i) + c : x(i) end do!$omp end parallel do return end subroutine daxpy 86

87 データスコープ属性 並列実行領域や分割実行されるループ中で参照される変数に関して それらが 各スレッドごとに独立した変数とすべきか すべてのスレッドで共有される変数とすべきか を宣言する必要があります これらを データスコープ属性 と言います データスコープ属性は parallel 指示文や for 指示文の オプション として指定します これらの オプション を OpenMP では 節 (clause) と呼びます!$omp parallel do private(i) shared(n, c, x, y) private 節 shared 節 87

88 shared 変数と private 変数 shared 変数 shared 節に指定された変数に対しては すべてのスレッドから同一のオブジェクトが参照されます オブジェクトの内容は マスタスレッドが保持していたものと同一です shared(n, c, x, y) マスタスレッド n c x y i shared 変数は すべてのスレッドが同一の実体を参照します 88

89 shared 変数と private 変数 private 変数 private 節に指定された変数は それぞれのスレッドに独立なオブジェクトが生成されます private 変数の内容は 元のマスタスレッドの変数の内容とは無関係です private(i) マスタスレッド n c x y i i i i i private 変数は 各スレッドごとに独立した実体を参照します 89

90 暗黙のデータ共有属性 暗黙のデータ共有属性 並列実行領域の開始前に定義され 並列実行領域の開始時点で可視な変数は shared ループのインデックス変数は private 並列実行領域内で定義された変数は private デフォルトの変更 default(shared) データ共有属性が指定されない変数は shared とします ( デフォルト ) default(private) データ共有属性が指定されない変数は private とします default(none) すべての変数に対してデータ共有属性の明示的な指定を要求します 90

91 並列化可能なループ 並列化可能なループ doループである do whileなどのループは難しい (OpenMP3.0では対応) ループ内に依存性がない 次ページ以降参照 ループの途中でループを終了する命令がない ループの前か後で終了するように回避する write 文等のI/O 命令を含まない 手動による指示文挿入ならば可能 91

92 後方依存性のあるループ 並列化できないループ ~ 後方依存性のあるループ do I = 1, 9999 A(i) = A(i-1) + B(i) end do 0 do I = 1, 4999 A(i) = A(i-1) + B(i) end do do I = 5000, 9999 A(i) = A(i-1) + B(i) end do 1 ( 理由 ) スレッド 1 で i=5000 の計算を行う時 A[4999] のデータを必要とするが A[5000] はスレッド 0 によって計算済みでなければならないが その保証をしようとすると逐次演算と同じになります 92

93 前方依存性のあるループ 並列化できないループ ~ 前方依存性のあるループ do i = 1, 9999 A(i) = A(i+1) + B(i) end do タイミングによって答えが異なる 0 do i = 1, 4999 A(i) = A(i+1) + B(i) end do do i = 5000, 9999 A(i) = A(i+1) + B(i) end do 1 ( 理由 ) スレッド 0 で i=4999 の計算を行う時 A[5000] のデータを必要とし A[5000] はスレッド 1 によって計算済みであってはならない しかし スレッド 0 と 1 が同時にこの do ループを開始することは保証されていないため タイミングによって結果がおかしくなる可能性があります ( ただし ループ分割などの方法により並列化は可能 ) 93

94 依存性のあるループ 並列化できないループ ~ 前方 後方依存性のあるループ i と i-1,i+1 が同じ行に書かれていなくても 以下のように同じループ内にあれば依存性が生じます do i = 1, imax 1 A(i) = A(i) + A(i-1) = A(i-1) + end do do i = 1, imax 1 A(i) = A(i) + A(i+1) = A(i+1) + end do 94

95 間接参照のあるループ 並列化できないループ ~ 間接参照のあるループ do i = 1, imax 1 Index(i) = end do do i = 1, imax 1 A(Index(i)) = B(i) + C(i) end do コンパイラには Index() の値がどうなっているかは分かりません 例えば Index(1) と Index(800) の値が同じ 1 だとすると スレッド 0 と 1 は 同じ出力先に値を書き込むことになります もし ユーザが Index() の値がすべて異なっていることが分かっているならば 自らの指示 ( 責任 ) により並列化可能です 95

96 一時変数を含むループ そのまま並列化するとまずいループ ~ 一次変数を含む do i = 1, 9999 T = A(i) + B(i) C(i) = T end do 0 do i = 1, 4999 T = A(i) + B(i) C(i) = T end do do i = 5000, 9999 T = A(i) + B(i) C(i) = T end do 1 一次変数 T が スレッド 0 と 1 の両方から同時にアクセスされてしまうと タイミングによって答えが違ってくる T が各スレッドにローカルな変数ならば 並列化可能に 96

97 縮約演算 (reduction 演算 ) そのまま並列化するとまずいループ ~reduction 演算 do i = 1, 9999 S = S + A(i) end do 0 do i = 1, 4999 S = S + A(i) end do do i = 5000, 9999 S = S + A(i) end do 1 変数 S が グローバルな属性ならば スレッド 0 と 1 が次々と勝手に S の値を書き換えるため 不正な結果となる S を各スレッドにローカルな変数にすると部分和は求めることができるが 全体の和は? 97

98 縮約演算 (reduction 演算 ) そのまま並列化するとまずいループ ~reduction 演算!$omp parallel do reduction(+:s) do i = 1, 9999 S = S + A(i) end do 0 do i = 1, 9999 S 0 = S 0 + A(i) end do do i = 5000, 9999 S 1 = S 1 + A(i) end do 1 ( 注 )reduction 演算の結果は 逐次演算の結果と異なる場合があります これは 演算の順序が異なり丸め誤差が生じる可能性があるためです 並列度数を変更しても結果が異なる場合があります S = S + S 0 + S 1 98

99 縮約演算 (reduction 演算 ) reduction 節 配列を何らかの演算によってひとつのスカラー変数に縮約する操作を reduction 演算 その変数を reduction 変数 と言います reduction 節は次のような書式です!$omp do reduction(op : var) var は reduction 変数 ( のカンマ区切りリスト ) op の演算子は +, *, -,.AND.,.OR.,.EQV.,.NEQV., または 組み込み関数 MAX, MIN, IAND, IOR, IEOR のいずれか reduction 変数 var は ループ実行中に private 変数として扱われ 終了後に各スレッドの値を元の変数に縮約します var は 実行する reduction 演算の種類に応じて次のように適切に初期化されます op = + - の時 : 初期値 0 op = * の時 : 初期値 1 op = MAX の時 : 初期値は与えられたデータ型で負の絶対値最大の値 op = MIN の時 : 初期値は与えられたデータ型で正の絶対値最大の値 99

100 parallel 指示行と do 指示行の制限 parallel 指示行の制限 parallel 指示行によって生成された並列実行領域から break 等で抜け出してはいけません また 並列実行領域外から並列実行領域に入るような分岐を行ってはなりません 並列実行領域内で 同期 ( 後述 ) を行わずに同一のファイル等に対して I/O 処理を行った場合の動作は未定義です do 指示行の制限 do 指示行で分割されたループを break や exit 等で終了してはいけません do 指示行で分割されるループのループ変数は 整数型でなければなりません 100

101 暗黙の同期と nowait do 指示行の終了時には 暗黙の同期が行われます!$omp parallel!$omp do do i = 1, n -1 b(i) = a(i) + a(i-1) end do!$omp do do i = 1, n -1 c(i) = a(i) + a(i-1) end do!$omp end parallel nowait を指定すると 他のスレッドの終了を待たずに次の処理に移ります!$omp parallel!$omp do do i = 1, n -1 b(i) = a(i) + a(i-1) end do!$omp end do nowait!$omp do do i = 1, n -1 c(i) = a(i) + a(i-1) end do!$omp end do nowait!$omp end parallel 各ループの終了時に すべてのスレッドが終了するまで待ち合わせます 待ち合わせのためのオーバーヘッドがかかります ループの終了時に待ち合わせず直ちに次の処理に移ります これにより 待ち合わせのオーバーヘッドを減らすことができます ただし 2 つのループ間に依存性があってはいけません 101

102 バリア同期 barrier 指示文 すべてのスレッドの実行がプログラム上の同じ barrier 指示文に到達するまで 待ち合わせを行います!$omp master open( ) read( ) close( )!$omp end master!$omp barrier! 読込が完了するまで待つ 102

103 その他の同期のための指示行 master 指示文 マスタスレッドのみが実行する処理を指定します critical 指示文 同時にひとつのスレッドのみで実行される領域を定義します 共有されている領域への書き込みや I/O を行う際の排他制御などに用います atomic 指示文 critical 指示文と同様に排他制御を行いますが ハードウェアによる最適化を行うことができる特定の演算 ( インクリメント等 ) のみに限定したものです ordered 指示文 ループ中で 逐次実行した場合と同じ順序で実行される領域を定義します 103

104 環境変数 OpenMP プログラムの実行を制御する環境変数 -OMP_NUM_THREADS -OMP_SCHEDULE -OMP_STACKSIZE -OMP_NESTED 実行に使用するスレッド数を指定します schedule(runtime) 節を指定した do 指示行のループ分割方法を指定します schedule 節には 以下のようなものがあります static : 全体をスレッド数で分割します ( デフォルト ) static, chunk dynamic : chunk を単位として分割します : 実行時に (OpenMP ランタイムが ) 決定します 各スレッド毎のスタックサイズの上限を指定します デフォルト値は 4m(4MB) OpenMP を使用しない場合に正常に動作するプログラムが OpenMP を有効にした場合 起動直後に segmentation fault で異常終了する場合には この OMP_STACKSIZE の問題である可能性が考えられます 巨大な配列をローカル変数としてを確保しているような場合には スタックサイズの問題が発生する可能性があります そのような配列はコモンブロックに含める等の対策を検討ください 入れ子された並列化を有効または無効にします デフォルトは無効 104

105 ランタイム関数の利用 代表的な実行環境取得関数 int omp_get_num_threads( void ) 呼び出し時点で並列領域を実行中のスレッド数を返します int omp_get_thread_num( void ) 呼び出したスレッドの番号 (0 ~ スレッド数 1) を返します マスタースレッドは 0 番 int omp_in_parallel( void ) 並列領域を実行中のとき 0 以外の値を そうでないときには 0 を返します 105

106 15.MPI MPI の利用方法 106

107 MPI の利用方法 MPI ライブラリのリンク方法 $ ifort mpi_program.f lmpi 有用な環境変数 環境変数 MPI_BUFS_THRESHOLD MPI_GROUP_MAX 内容 バッファを用いた通信において プロセスまたはホスト辺りのバッファを使うかの閾値を設定します デフォルトでは 64 ホストより大きいホスト数でプロセス辺りのバッファを用います 64 ホスト以下ではホスト辺りのバッファになります 1 つの MPI プログラムで使用できるグループの最大数を設定します デフォルトは 32 MPI_COMM_MAX MPI プログラムが利用できるコミュニケータの最大値 デフォルトは 256 MPI_BUFFER_MAX MPI_DEFAULT_SINGLE_COPY_OFF 設定された値以上 ( 単位はバイト ) の辺りでノード内のシングルコピーを行なう シングルコピーの最適化を行なわない 107

108 MPI プログラムのデバッグ MPI プログラムでは 環境変数 MPI_SLAVE_DEBUG_ATTACH を設定することで 設定したランクのプロセスが 20 秒間スリープする スリープさせたいランク番号をセットして実行 $ setenv MPI_SLAVE_DEBUG_ATTACH 0 ( ランク 0 に設定 ) $ mpirun -np 4./a.out MPI rank 0 sleeping for 20 seconds while you attach the debugger. You can use this debugger command: or gdb /proc/26071/exe idb -pid /proc/26071/exe 別のシェルからデバッガでアタッチ $ gdb /proc/26071/exe (gdb) cont 108

109 16.MPI プログラミング入門 MPI とはループの並列化 109

110 MPI とは MPI (Message Passing Interface) とは メッセージパッシング方式 により通信を行いながら並列計算を行うための API のひとつです SGI Altix システムでは Message Passing Toolkit (MPT) によって高性能な MPI を提供しています C C++ Fortran のどれからでも使うことができます たくさんの関数がありますが その中の 10 個程度の関数を知っていれば 基本的なメッセージ通信を行なうことができます 110

111 プロセスレッロセロセスロセレッドOpenMP と MPI OpenMP 共有メモリモデル 主にループレベルの並列化 段階的な適用が可能で導入が容易 高度なスケーラビリティを得るためには 粒度を大きくする工夫が必要 MPI 分散メモリモデル 領域分割等による並列化 最初からプログラム全体の並列化必要であり 導入の敷居が高い 粗粒度の並列化 スケーラビリティを得るためには高速なネットワークインターコネクトや遅延隠蔽が必要 ドスプロセスレレッッドスドススプスプスプ 共有データ 111

112 hello, world の並列化 ヘッダファイル mpif.h をインクルードします または use mpi をします MPI_Init と MPI_Finalize MPI プログラムは 必ず MPI_Init で開始し MPI_Finalize で終了します program hello use mpi integer :: ierr, iam, nsize call MPI_Init(ierr) call MPI_Comm_rank(MPI_COMM_WORLD, iam, ierr) call MPI_Comm_size(MPI_COMM_WORLD, nsize,ierr) write(6,*) hello, world: I am, iam, /, nsize call MPI_Finalize(ierr) end program hello 112

113 hello, world の実行例 $ ifort hello_mpi.f -lmpi $ mpirun -np 4./a.out hello, world : I am 1 / 4 hello, world : I am 2 / 4 hello, world : I am 3 / 4 hello, world : I am 0 / 4 $ 管理プロセスが計算プロセスを生成 MPI_Init() 管理プロセス計算プロセス生成後はスリープ write の実行 MPI_Finalize で終了 113

114 メッセージ パッシングのプロセス 基本的なメッセージパッシングのプロセス プロセス識別番号 0 プロセス識別番号 1 A: 必要な情報 Send Receive どこのデータを送るのか? 誰へデータを送るのか? 送ろうとするデータの型は? どの程度の量のデータを送るのか? 受け取る側はどのようにそのデータを識別するのか? B: どこから誰へ送るという記述を行うために ランク (rank : プロセス識別番号 ) という情報を使用します 114

115 メッセージ パッシングのプログラム例 program sample_mpi use mpi integer :: ierr, iam, nsize,isrc, rval integer :: dest, tag integer :: status(mpi_status_size) character(len=21) :: message = "Greeting from process" call MPI_Init(ierr) $ ifort sample_mpi.f90 -lmpi $ mpirun -np 4./a.out Greeting from process 1 Greeting from process 2 Greeting from process 3 dest = 0; tag = 0 call MPI_Comm_rank(MPI_COMM_WORLD, iam, ierr) call MPI_Comm_size(MPI_COMM_WORLD, nsize, ierr) 0 以外のランクが ランク 0 にメッセージを送信する dest = 0 if ( iam /= 0 ) then call MPI_Send(iam, 1, MPI_INT, dest, tag, MPI_COMM_WORLD, ierr) else do isrc = 1, nsize - 1 call MPI_Recv(rval, 1, MPI_INT, isrc, tag, MPI_COMM_WORLD, status, ierr) write(6,'(a21,1x,i2)') message, rval end do endif call MPI_Finalize(ierr) ランク 0 が 他のランクからのメッセージを受信する end program sample_mpi 115

116 1 対 1 通信 同期通信 ( ブロッキング通信 ) では 通信が完了するまで プロセスはブロックされます 非同期通信 ( ノンブロッキング通信 ) では 通信はバックグラウンドで行われ プロセスはブロックされません プロセス 0 プロセス 1 プロセス 0 プロセス 1 計算 計算 計算 計算 MPI_Irecv 時間 MPI_Send MPI_Recv MPI_Isend 計算 受信データを必要としない計算 計算 計算 MPI_Wait 計算 MPI_Wait 計算 116

117 reduction 演算 : MPI_Reduce 通信しながら指定された演算を行い その結果を 1 つのプロセスのバッファへ格納します 指定可能な演算は次の通りです 演算 MPI_MAX MPI_MIN MPI_SUM MPI_PROD MPI_LAND MPI_BAND MPI_LOR MPI_BOR MPI_LXOR MPI_BXOR MPI_MAXLOC MPI_MINLOC 内容 最大値 最小値 合計 積 論理 AND ビット AND 論理 OR ビット OR 論理 XOR ビット XOR 最大と位置 最小と位置 117 配列の要素の合計を求める N N Nlocal Nlocal < ランク 0> N 9 Nlocal 6 SUM 45 < ランク 1> < ランク 2> SUM SUM

118 17. ハイブリッドプログラミング ハイブリッドの利用方法ハイブリッドプログラムの実行イメージ 118

119 ハイブリッドの利用方法 MPI と OpenMP( 自動並列も可 ) を組み合わせハイブリッドにプログラムを実行することが可能です 次の方法でコンパイル & リンクします $ ifort $(FFLAGS) openmp o a.out test.f lmpi 119

120 hello, world サンプル program hello_hyb use mpi integer :: ierr, iam, mythread integer :: omp_get_thread_num call MPI_Init(ierr) call MPI_Comm_rank(MPI_COMM_WORLD, iam, ierr) MPI_INIT!$omp parallel private(mythread) mythread = omp_get_thread_num()!$omp critical write(6,'(a23,1x,i2,1x,a7,1x,i2)') "Hello, world: I am MPI=",iam, "Thread=",mythread!$omp end critical!$omp end parallel OpenMP 並列実行領域 call MPI_Finalize(ierr) MPI_FINALIZE end program hello_hyb 120

121 ハイブリッドプログラム実行イメージ MPI プロセスが 2 つ 各 MPI プロセスから 4 スレッドで実行 $ export OMP_NUM_THREADS=4 $ mpirun -np 2 omplace nt ${OMP_NUM_THREADS}./a.out 管理プロセスが計算プロセスを生成 MPI_Init 管理プロセス計算プロセス生成後はスリープ マスタースレッドのみ実行 並列実行領域の生成 それぞれ write 文の実行 待ち合わせ マスタースレッドのみ実行に戻る MPI_Finalize で終了 121

Microsoft PowerPoint - uv2000parallel.pptx

Microsoft PowerPoint - uv2000parallel.pptx SGI UV2000 並列化プログラム利用の手引 2016/12/ 1 SGI Japan SGI Japan HPC Technology Division / HPC Consulting Professional Service Division Agenda 2014 Silicon Graphics International Corp. 2 Agenda 1. システム構成と利用方法 2.

More information

コードのチューニング

コードのチューニング OpenMP による並列化実装 八木学 ( 理化学研究所計算科学研究センター ) KOBE HPC Spring School 2019 2019 年 3 月 14 日 スレッド並列とプロセス並列 スレッド並列 OpenMP 自動並列化 プロセス並列 MPI プロセス プロセス プロセス スレッドスレッドスレッドスレッド メモリ メモリ プロセス間通信 Private Private Private

More information

NUMAの構成

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

More information

π-VizStudio User Manual

π-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

More information

演習1: 演習準備

演習1: 演習準備 演習 1: 演習準備 2013 年 8 月 6 日神戸大学大学院システム情報学研究科森下浩二 1 演習 1 の内容 神戸大 X10(π-omputer) について システム概要 ログイン方法 コンパイルとジョブ実行方法 OpenMP の演習 ( 入門編 ) 1. parallel 構文 実行時ライブラリ関数 2. ループ構文 3. shared 節 private 節 4. reduction 節

More information

スライド 1

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

More information

演習準備

演習準備 演習準備 2014 年 3 月 5 日神戸大学大学院システム情報学研究科森下浩二 1 演習準備の内容 神戸大 FX10(π-Computer) 利用準備 システム概要 ログイン方法 コンパイルとジョブ実行方法 MPI 復習 1. MPIプログラムの基本構成 2. 並列実行 3. 1 対 1 通信 集団通信 4. データ 処理分割 5. 計算時間計測 2 神戸大 FX10(π-Computer) 利用準備

More information

Microsoft PowerPoint - KHPCSS pptx

Microsoft PowerPoint - KHPCSS pptx KOBE HPC サマースクール 2018( 初級 ) 9. 1 対 1 通信関数, 集団通信関数 2018/8/8 KOBE HPC サマースクール 2018 1 2018/8/8 KOBE HPC サマースクール 2018 2 MPI プログラム (M-2):1 対 1 通信関数 問題 1 から 100 までの整数の和を 2 並列で求めなさい. プログラムの方針 プロセス0: 1から50までの和を求める.

More information

Microsoft PowerPoint - OpenMP入門.pptx

Microsoft PowerPoint - OpenMP入門.pptx OpenMP 入門 須田礼仁 2009/10/30 初版 OpenMP 共有メモリ並列処理の標準化 API http://openmp.org/ 最新版は 30 3.0 バージョンによる違いはあまり大きくない サポートしているバージョンはともかく csp で動きます gcc も対応しています やっぱり SPMD Single Program Multiple Data プログラム #pragma omp

More information

並列計算導入.pptx

並列計算導入.pptx 並列計算の基礎 MPI を用いた並列計算 並列計算の環境 並列計算 複数の計算ユニット(PU, ore, Pなど を使用して 一つの問題 計算 を行わせる 近年 並列計算を手軽に使用できる環境が急速に整いつつある >通常のP PU(entral Processing Unit)上に計算装置であるoreが 複数含まれている Intel ore i7 シリーズ: 4つの計算装置(ore) 通常のプログラム

More information

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

<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

More information

01_OpenMP_osx.indd

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

More information

openmp1_Yaguchi_version_170530

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

More information

Microsoft PowerPoint _MPI-01.pptx

Microsoft PowerPoint _MPI-01.pptx 計算科学演習 Ⅰ MPI を いた並列計算 (I) 神戸大学大学院システム情報学研究科谷口隆晴 yaguchi@pearl.kobe-u.ac.jp この資料は昨年度担当の横川先生の資料を参考にさせて頂いています. 2016/06/23 MPI を用いた並列計算 (I) 1 講義概要 分散メモリ型計算機上のプログラミング メッセージ パシング インターフェイス (Message Passing Interface,MPI)

More information

インテル(R) Visual Fortran コンパイラ 10.0

インテル(R) Visual Fortran コンパイラ 10.0 インテル (R) Visual Fortran コンパイラー 10.0 日本語版スペシャル エディション 入門ガイド 目次 概要インテル (R) Visual Fortran コンパイラーの設定はじめに検証用ソースファイル適切なインストールの確認コンパイラーの起動 ( コマンドライン ) コンパイル ( 最適化オプションなし ) 実行 / プログラムの検証コンパイル ( 最適化オプションあり ) 実行

More information

Microsoft Word - appli_OpenMX_install.docx

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. アプリケーション概要 本手順書が対象としているアプリケーションは以下の通りです

More information

コードのチューニング

コードのチューニング ハイブリッド並列 八木学 ( 理化学研究所計算科学研究機構 ) 謝辞 松本洋介氏 ( 千葉大学 ) KOBE HPC Spring School 2017 2017 年 3 月 14 日神戸大学計算科学教育センター MPI とは Message Passing Interface 分散メモリのプロセス間の通信規格(API) SPMD(Single Program Multi Data) が基本 -

More information

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

演習準備 2014 年 3 月 5 日神戸大学大学院システム情報学研究科森下浩二 1 RIKEN AICS HPC Spring School /3/5 演習準備 2014 年 3 月 5 日神戸大学大学院システム情報学研究科森下浩二 1 演習準備の内容 神戸大 FX10(π-Computer) 利用準備 システム概要 ログイン方法 コンパイルとジョブ実行方法 MPI 復習 1. MPIプログラムの基本構成 2. 並列実行 3. 1 対 1 通信 集団通信 4. データ 処理分割 5. 計算時間計測 2 神戸大 FX10(π-Computer) 利用準備

More information

120802_MPI.ppt

120802_MPI.ppt CPU CPU CPU CPU CPU SMP Symmetric MultiProcessing CPU CPU CPU CPU CPU CPU CPU CPU CPU CPU CPU CPU CP OpenMP MPI MPI CPU CPU CPU CPU CPU CPU CPU CPU CPU CPU MPI MPI+OpenMP CPU CPU CPU CPU CPU CPU CPU CP

More information

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

Microsoft PowerPoint - 演習2:MPI初歩.pptx 演習 2:MPI 初歩 - 並列に計算する - 2013 年 8 月 6 日 神戸大学大学院システム情報学研究科計算科学専攻横川三津夫 MPI( メッセージ パッシング インターフェース ) を使おう! [ 演習 2 の内容 ] はじめの一歩課題 1: Hello, world を並列に出力する. 課題 2: プロセス 0 からのメッセージを受け取る (1 対 1 通信 ). 部分に分けて計算しよう課題

More information

02_C-C++_osx.indd

02_C-C++_osx.indd C/C++ OpenMP* / 2 C/C++ OpenMP* OpenMP* 9.0 1... 2 2... 3 3OpenMP*... 5 3.1... 5 3.2 OpenMP*... 6 3.3 OpenMP*... 8 4OpenMP*... 9 4.1... 9 4.2 OpenMP*... 9 4.3 OpenMP*... 10 4.4... 10 5OpenMP*... 11 5.1

More information

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

(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 共有メモリマルチプロセッサシステムの普及 共有メモリマルチプロセッサシステムのための並列化指示文を共通化する必要性 各社で仕様が異なり 移植性がない そして いまやマルチコア プロセッサが主流となり

More information

OpenMP¤òÍѤ¤¤¿ÊÂÎó·×»»¡Ê£±¡Ë

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

More information

スライド 1

スライド 1 本日 (4/25) の内容 1 並列計算の概要 並列化計算の目的 並列コンピュータ環境 並列プログラミングの方法 MPI を用いた並列プログラミング 並列化効率 2 並列計算の実行方法 Hello world モンテカルロ法による円周率計算 並列計算のはじまり 並列計算の最初の構想を イギリスの科学者リチャードソンが 1922 年に発表 < リチャードソンの夢 > 64000 人を円形の劇場に集めて

More information

VXPRO R1400® ご提案資料

VXPRO R1400® ご提案資料 Intel Core i7 プロセッサ 920 Preliminary Performance Report ノード性能評価 ノード性能の評価 NAS Parallel Benchmark Class B OpenMP 版での性能評価 実行スレッド数を 4 で固定 ( デュアルソケットでは各プロセッサに 2 スレッド ) 全て 2.66GHz のコアとなるため コアあたりのピーク性能は同じ 評価システム

More information

Microsoft Word - openmp-txt.doc

Microsoft Word - openmp-txt.doc ( 付録 A) OpenMP チュートリアル OepnMP は 共有メモリマルチプロセッサ上のマルチスレッドプログラミングのための API です 本稿では OpenMP の簡単な解説とともにプログラム例をつかって説明します 詳しくは OpenMP の規約を決めている OpenMP ARB の http://www.openmp.org/ にある仕様書を参照してください 日本語訳は http://www.hpcc.jp/omni/spec.ja/

More information

OpenMPプログラミング

OpenMPプログラミング OpenMP 基礎 岩下武史 ( 学術情報メディアセンター ) 1 2013/9/13 並列処理とは 逐次処理 CPU1 並列処理 CPU1 CPU2 CPU3 CPU4 処理 1 処理 1 処理 2 処理 3 処理 4 処理 2 処理 3 処理 4 時間 2 2 種類の並列処理方法 プロセス並列 スレッド並列 並列プログラム 並列プログラム プロセス プロセス 0 プロセス 1 プロセス間通信 スレッド

More information

OpenMP¤òÍѤ¤¤¿ÊÂÎó·×»»¡Ê£±¡Ë

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

More information

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

Microsoft PowerPoint - 演習1:並列化と評価.pptx 講義 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 次元温度分布の計算

More information

Microsoft Word - HOKUSAI_system_overview_ja.docx

Microsoft Word - HOKUSAI_system_overview_ja.docx HOKUSAI システムの概要 1.1 システム構成 HOKUSAI システムは 超並列演算システム (GWMPC BWMPC) アプリケーション演算サーバ群 ( 大容量メモリ演算サーバ GPU 演算サーバ ) と システムの利用入口となるフロントエンドサーバ 用途の異なる 2 つのストレージ ( オンライン ストレージ 階層型ストレージ ) から構成されるシステムです 図 0-1 システム構成図

More information

Microsoft Word - appli_SMASH_tutorial_2.docx

Microsoft Word - appli_SMASH_tutorial_2.docx チュートリアル SMASH version 2.2.0 (Linux 64 ビット版 ) 本チュートリアルでは 量子化学計算ソフトウェア SMASH バージョン 2.2.0 について ソフトウェアの入手 / 実行モジュール作成 / 計算実行 / 可視化処理までを例示します 1. ソフトウェアの入手以下の URL よりダウンロードします https://sourceforge.net/projects/smash-qc/files/smash-2.2.0.tgz/download

More information

about MPI

about MPI 本日 (4/16) の内容 1 並列計算の概要 並列化計算の目的 並列コンピュータ環境 並列プログラミングの方法 MPI を用いた並列プログラミング 並列化効率 2 並列計算の実行方法 Hello world モンテカルロ法による円周率計算 並列計算のはじまり 並列計算の最初の構想を イギリスの科学者リチャードソンが 1922 年に発表 < リチャードソンの夢 > 64000 人を円形の劇場に集めて

More information

NUMAの構成

NUMAの構成 共有メモリを使ったデータ交換と同期 慶應義塾大学理工学部 天野英晴 hunga@am.ics.keio.ac.jp 同期の必要性 あるプロセッサが共有メモリに書いても 別のプロセッサにはそのことが分からない 同時に同じ共有変数に書き込みすると 結果がどうなるか分からない そもそも共有メモリって結構危険な代物 多くのプロセッサが並列に動くには何かの制御機構が要る 不可分命令 同期用メモリ バリア同期機構

More information

Total View Debugger 利用の手引 東京工業大学学術国際情報センター version 1.0

Total View Debugger 利用の手引 東京工業大学学術国際情報センター version 1.0 Total View Debugger 利用の手引 東京工業大学学術国際情報センター 2015.04 version 1.0 目次 Total View Debugger 利用の手引き 1 1. はじめに 1 1.1 利用できるバージョン 1 1.2 概要 1 1.3 マニュアル 1 2. TSUBAME での利用方法 2 2.1 Total View Debugger の起動 2 (1) TSUBAMEにログイン

More information

PowerPoint プレゼンテーション

PowerPoint プレゼンテーション OpenMP 並列解説 1 人が共同作業を行うわけ 田植えの例 重いものを持ち上げる 田おこし 代かき 苗の準備 植付 共同作業する理由 1. 短時間で作業を行うため 2. 一人ではできない作業を行うため 3. 得意分野が異なる人が協力し合うため ポイント 1. 全員が最大限働く 2. タイミングよく 3. 作業順序に注意 4. オーバーヘッドをなくす 2 倍率 効率 並列化率と並列加速率 並列化効率の関係

More information

Microsoft PowerPoint - 高速化WS富山.pptx

Microsoft PowerPoint - 高速化WS富山.pptx 京 における 高速化ワークショップ 性能分析 チューニングの手順について 登録施設利用促進機関 一般財団法人高度情報科学技術研究機構富山栄治 一般財団法人高度情報科学技術研究機構 2 性能分析 チューニング手順 どの程度の並列数が実現可能か把握する インバランスの懸念があるか把握する タイムステップループ I/O 処理など注目すべき箇所を把握する 並列数 並列化率などの目標を設定し チューニング時の指針とする

More information

Microsoft PowerPoint - 03_What is OpenMP 4.0 other_Jan18

Microsoft PowerPoint - 03_What is OpenMP 4.0 other_Jan18 OpenMP* 4.x における拡張 OpenMP 4.0 と 4.5 の機能拡張 内容 OpenMP* 3.1 から 4.0 への拡張 OpenMP* 4.0 から 4.5 への拡張 2 追加された機能 (3.1 -> 4.0) C/C++ 配列シンタックスの拡張 SIMD と SIMD 対応関数 デバイスオフロード task 構 の依存性 taskgroup 構 cancel 句と cancellation

More information

PowerPoint プレゼンテーション

PowerPoint プレゼンテーション 計算科学演習 I 第 8 回講義 MPI を用いた並列計算 (I) 2013 年 6 月 6 日 システム情報学研究科計算科学専攻 山本有作 今回の講義の概要 1. MPI とは 2. 簡単な MPI プログラムの例 (1) 3. 簡単な MPI プログラムの例 (2):1 対 1 通信 4. 簡単な MPI プログラムの例 (3): 集団通信 共有メモリ型並列計算機 ( 復習 ) 共有メモリ型並列計算機

More information

2. OpenMP OpenMP OpenMP OpenMP #pragma#pragma omp #pragma omp parallel #pragma omp single #pragma omp master #pragma omp for #pragma omp critica

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

More information

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

Microsoft PowerPoint - CproNt02.ppt [互換モード] 第 2 章 C プログラムの書き方 CPro:02-01 概要 C プログラムの構成要素は関数 ( プログラム = 関数の集まり ) 関数は, ヘッダと本体からなる 使用する関数は, プログラムの先頭 ( 厳密には, 使用場所より前 ) で型宣言 ( プロトタイプ宣言 ) する 関数は仮引数を用いることができる ( なくてもよい ) 関数には戻り値がある ( なくてもよい void 型 ) コメント

More information

スライド 1

スライド 1 High Performance and Productivity 並列プログラミング課題と挑戦 HPC システムの利用の拡大の背景 シュミレーションへの要求 より複雑な問題をより精度良くシュミレーションすることが求められている HPC システムでの並列処理の要求の拡大 1. モデル アルゴリズム 解析対象は何れもより複雑で 規模の大きなものになっている 2. マイクロプロセッサのマルチコア化 3.

More information

Microsoft PowerPoint _MPI-03.pptx

Microsoft PowerPoint _MPI-03.pptx 計算科学演習 Ⅰ ( 第 11 回 ) MPI を いた並列計算 (III) 神戸大学大学院システム情報学研究科横川三津夫 yokokawa@port.kobe-u.ac.jp 2014/07/03 計算科学演習 Ⅰ:MPI を用いた並列計算 (III) 1 2014/07/03 計算科学演習 Ⅰ:MPI を用いた並列計算 (III) 2 今週の講義の概要 1. 前回課題の解説 2. 部分配列とローカルインデックス

More information

Fortran 勉強会 第 5 回 辻野智紀

Fortran 勉強会 第 5 回 辻野智紀 Fortran 勉強会 第 5 回 辻野智紀 今回のお品書き サブルーチンの分割コンパイル ライブラリ 静的ライブラリ 動的ライブラリ モジュール その前に 以下の URL から STPK ライブラリをインストールしておいて下さい. http://www.gfd-dennou.org/library/davis/stpk 前回参加された方はインストール済みのはず. サブルーチンの分割コンパイル サブルーチンの独立化

More information

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

C/C++ FORTRAN FORTRAN MPI MPI MPI UNIX Windows (SIMD Single Instruction Multipule Data) SMP(Symmetric Multi Processor) MPI (thread) OpenMP[5] MPI ( ) snozawa@env.sci.ibaraki.ac.jp 1 ( ) MPI MPI Message Passing Interface[2] MPI MPICH[3],LAM/MPI[4] (MIMDMultiple Instruction Multipule Data) Message Passing ( ) (MPI (rank) PE(Processing Element)

More information

TSUBAME2.0 における GPU の 活用方法 東京工業大学学術国際情報センター丸山直也第 10 回 GPU コンピューティング講習会 2011 年 9 月 28 日

TSUBAME2.0 における GPU の 活用方法 東京工業大学学術国際情報センター丸山直也第 10 回 GPU コンピューティング講習会 2011 年 9 月 28 日 TSUBAME2.0 における GPU の 活用方法 東京工業大学学術国際情報センター丸山直也第 10 回 GPU コンピューティング講習会 2011 年 9 月 28 日 目次 1. TSUBAMEのGPU 環境 2. プログラム作成 3. プログラム実行 4. 性能解析 デバッグ サンプルコードは /work0/gsic/seminars/gpu- 2011-09- 28 からコピー可能です 1.

More information

Microsoft PowerPoint - sales2.ppt

Microsoft PowerPoint - sales2.ppt 並列化の基礎 ( 言葉の意味 ) 並列実行には 複数のタスク実行主体が必要 共有メモリ型システム (SMP) での並列 プロセスを使用した並列化 スレッドとは? スレッドを使用した並列化 分散メモリ型システムでの並列 メッセージパッシングによる並列化 並列アーキテクチャ関連の言葉を押さえよう 21 プロセスを使用した並列処理 並列処理を行うためには複数のプロセスの生成必要プロセスとは プログラム実行のための能動実態メモリ空間親プロセス子プロセス

More information

インテル(R) Visual Fortran Composer XE

インテル(R) Visual Fortran Composer XE Visual Fortran Composer XE 1. 2. 3. 4. 5. Visual Studio 6. Visual Studio 7. 8. Compaq Visual Fortran 9. Visual Studio 10. 2 https://registrationcenter.intel.com/regcenter/ w_fcompxe_all_jp_2013_sp1.1.139.exe

More information

CPU Levels in the memory hierarchy Level 1 Level 2... Increasing distance from the CPU in access time Level n Size of the memory at each level 1: 2.2

CPU Levels in the memory hierarchy Level 1 Level 2... Increasing distance from the CPU in access time Level n Size of the memory at each level 1: 2.2 FFT 1 Fourier fast Fourier transform FFT FFT FFT 1 FFT FFT 2 Fourier 2.1 Fourier FFT Fourier discrete Fourier transform DFT DFT n 1 y k = j=0 x j ω jk n, 0 k n 1 (1) x j y k ω n = e 2πi/n i = 1 (1) n DFT

More information

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)) 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]

More information

Microsoft PowerPoint - sales2.ppt

Microsoft PowerPoint - sales2.ppt 最適化とは何? CPU アーキテクチャに沿った形で最適な性能を抽出できるようにする技法 ( 性能向上技法 ) コンパイラによるプログラム最適化 コンパイラメーカの技量 経験量に依存 最適化ツールによるプログラム最適化 KAP (Kuck & Associates, Inc. ) 人によるプログラム最適化 アーキテクチャのボトルネックを知ること 3 使用コンパイラによる性能の違い MFLOPS 90

More information

Microsoft PowerPoint - 1_コンパイラ入門セミナー.ppt

Microsoft PowerPoint - 1_コンパイラ入門セミナー.ppt インテルコンパイラー 入門セミナー [ 対象製品 ] インテル C++ コンパイラー 9.1 Windows* 版インテル Visual Fortran コンパイラー 9.1 Windows* 版 資料作成 : エクセルソフト株式会社 Copyright 1998-2007 XLsoft Corporation. All Rights Reserved. 1 インテル コンパイラー入門 本セミナーの内容

More information

並列プログラミング入門(OpenMP編)

並列プログラミング入門(OpenMP編) 登録施設利用促進機関 / 文科省委託事業 HPCI の運営 代表機関一般財団法人高度情報科学技術研究機構 (RIST) 1 並列プログラミング入門 (OpenMP 編 ) 2019 年 1 月 17 日 高度情報科学技術研究機構 (RIST) 山本秀喜 RIST 主催の講習会等 2 HPC プログラミングセミナー 一般 初心者向け : チューニング 並列化 (OpenMP MPI) 京 初中級者向け講習会

More information

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

Microsoft PowerPoint - 講義:片方向通信.pptx MPI( 片方向通信 ) 09 年 3 月 5 日 神戸大学大学院システム情報学研究科計算科学専攻横川三津夫 09/3/5 KOBE HPC Spring School 09 分散メモリ型並列計算機 複数のプロセッサがネットワークで接続されており, れぞれのプロセッサ (PE) が, メモリを持っている. 各 PE が自分のメモリ領域のみアクセス可能 特徴数千から数万 PE 規模の並列システムが可能

More information

C プログラミング演習 1( 再 ) 2 講義では C プログラミングの基本を学び 演習では やや実践的なプログラミングを通して学ぶ

C プログラミング演習 1( 再 ) 2 講義では C プログラミングの基本を学び 演習では やや実践的なプログラミングを通して学ぶ C プログラミング演習 1( 再 ) 2 講義では C プログラミングの基本を学び 演習では やや実践的なプログラミングを通して学ぶ 今回のプログラミングの課題 次のステップによって 徐々に難易度の高いプログラムを作成する ( 参照用の番号は よくわかる C 言語 のページ番号 ) 1. キーボード入力された整数 10 個の中から最大のものを答える 2. 整数を要素とする配列 (p.57-59) に初期値を与えておき

More information

Microsoft Word - 計算科学演習第1回3.doc

Microsoft Word - 計算科学演習第1回3.doc スーパーコンピュータの基本的操作方法 2009 年 9 月 10 日高橋康人 1. スーパーコンピュータへのログイン方法 本演習では,X 端末ソフト Exceed on Demand を使用するが, 必要に応じて SSH クライアント putty,ftp クライアント WinSCP や FileZilla を使用して構わない Exceed on Demand を起動し, 以下のとおり設定 ( 各自のユーザ

More information

PowerPoint プレゼンテーション

PowerPoint プレゼンテーション vsmp Foundation スケーラブル SMP システム スケーラブル SMP システム 製品コンセプト 2U サイズの 8 ソケット SMP サーバ コンパクトな筐体に多くのコアとメモリを実装し SMP システムとして利用可能 スイッチなし構成でのシステム構築によりラックスペースを無駄にしない構成 将来的な拡張性を保証 8 ソケット以上への拡張も可能 2 システム構成例 ベースシステム 2U

More information

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

課題 S1 解説 Fortran 編 中島研吾 東京大学情報基盤センター 課題 S1 解説 Fortran 編 中島研吾 東京大学情報基盤センター 内容 課題 S1 /a1.0~a1.3, /a2.0~a2.3 から局所ベクトル情報を読み込み, 全体ベクトルのノルム ( x ) を求めるプログラムを作成する (S1-1) file.f,file2.f をそれぞれ参考にする 下記の数値積分の結果を台形公式によって求めるプログラムを作成する

More information

memo

memo 計数工学プログラミング演習 ( 第 3 回 ) 2017/04/25 DEPARTMENT OF MATHEMATICAL INFORMATICS 1 内容 ポインタの続き 引数の値渡しと参照渡し 構造体 2 ポインタで指されるメモリへのアクセス double **R; 型 R[i] と *(R+i) は同じ意味 意味 R double ** ポインタの配列 ( の先頭 ) へのポインタ R[i]

More information

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

Microsoft Word ●IntelクアッドコアCPUでのベンチマーク_吉岡_ _更新__ doc 2.3. アプリ性能 2.3.1. Intel クアッドコア CPU でのベンチマーク 東京海洋大学吉岡諭 1. はじめにこの数年でマルチコア CPU の普及が進んできた x86 系の CPU でも Intel と AD がデュアルコア クアッドコアの CPU を次々と市場に送り出していて それらが PC クラスタの CPU として採用され HPC に活用されている ここでは Intel クアッドコア

More information

040312研究会HPC2500.ppt

040312研究会HPC2500.ppt 2004312 e-mail : m-aoki@jp.fujitsu.com 1 2 PRIMEPOWER VX/VPP300 VPP700 GP7000 AP3000 VPP5000 PRIMEPOWER 2000 PRIMEPOWER HPC2500 1998 1999 2000 2001 2002 2003 3 VPP5000 PRIMEPOWER ( 1 VU 9.6 GF 16GB 1 VU

More information

Microsoft Word - nvsi_050110jp_netvault_vtl_on_dothill_sannetII.doc

Microsoft Word - nvsi_050110jp_netvault_vtl_on_dothill_sannetII.doc Article ID: NVSI-050110JP Created: 2005/10/19 Revised: - NetVault 仮想テープ ライブラリのパフォーマンス検証 : dothill SANnetⅡSATA 編 1. 検証の目的 ドットヒルシステムズ株式会社の SANnetll SATA は 安価な SATA ドライブを使用した大容量ストレージで ディスクへのバックアップを行う際の対象デバイスとして最適と言えます

More information

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) 共用 RX ファミリ用 C/C++ コンパイラ V.1.00 Release 02 ご使用上のお願い RX ファミリ用 C/C++ コンパイラの使用上の注意事項 4 件を連絡します #pragma option 使用時の 1 または 2 バイトの整数型の関数戻り値に関する注意事項 (RXC#012) 共用体型のローカル変数を文字列操作関数で操作する場合の注意事項 (RXC#013) 配列型構造体または共用体の配列型メンバから読み出した値を動的初期化に用いる場合の注意事項

More information

目次 LS-DYNA 利用の手引き 1 1. はじめに 利用できるバージョン 概要 1 2. TSUBAME での利用方法 使用可能な LS-DYNA の実行 4 (1) TSUBAMEにログイン 4 (2) バージョンの切り替え 4 (3) インタラ

目次 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) インタラクティブ実行

More information

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

<4D F736F F F696E74202D C097F B A E B93C782DD8EE682E890EA97705D> 並列アルゴリズム 2005 年後期火曜 2 限青柳睦 Aoyagi@cc.kyushu-u.ac.jp http//server-500.cc.kyushu-u.ac.jp/ 11 月 29( 火 ) 7. 集団通信 (Collective Communication) 8. 領域分割 (Domain Decomposition) 1 もくじ 1. 序並列計算機の現状 2. 計算方式およびアーキテクチュアの分類

More information

SuperH RISC engineファミリ用 C/C++コンパイラパッケージ V.7~V.9 ご使用上のお願い

SuperH RISC engineファミリ用 C/C++コンパイラパッケージ V.7~V.9 ご使用上のお願い ツールニュース RENESAS TOOL NEWS 2014 年 02 月 01 日 : 140201/tn1 SuperH RISC engine ファミリ用 C/C++ コンパイラパッケージ V.7~V.9 ご使用上のお願い SuperH RISC engine ファミリ用 C/C++ コンパイラパッケージ V.7~V.9の使用上の注意事項 4 件を連絡します 同一ループ内の異なる配列要素に 同一の添え字を使用した場合の注意事項

More information

slide5.pptx

slide5.pptx ソフトウェア工学入門 第 5 回コマンド作成 1 head コマンド作成 1 早速ですが 次のプログラムを head.c という名前で作成してください #include #include static void do_head(file *f, long nlines); int main(int argc, char *argv[]) { if (argc!=

More information

Hphi実行環境導入マニュアル_v1.1.1

Hphi実行環境導入マニュアル_v1.1.1 HΦ の計算環境構築方法マニュアル 2016 年 7 月 25 日 東大物性研ソフトウェア高度化推進チーム 目次 VirtualBox を利用した HΦ の導入... 2 VirtualBox を利用した MateriAppsLive! の導入... 3 MateriAppsLive! への HΦ のインストール... 6 ISSP スパコンシステム B での HΦ の利用方法... 8 各種ファイルの置き場所...

More information

Microsoft Word - matlab-coder-code-generation-quick-start-guide-japanese-r2016a

Microsoft Word - matlab-coder-code-generation-quick-start-guide-japanese-r2016a MATLAB コードを使用した C コードの生成クイックスタートガイド (R2016a) 最初のスタンドアロン C コードの生成 スタンドアロン C コードを生成するには [ ビルド ] を [ ソースコード ] [ スタティックライブラリ ] [ ダイナミックライブラリ ] または [ 実行ファイル ] のいずれかに切り替えます MATLAB Coder を使用することで MATLAB コードから

More information

本文ALL.indd

本文ALL.indd Intel Xeon プロセッサにおける Cache Coherency 時間の性能測定方法河辺峻田口成美古谷英祐 Intel Xeon プロセッサにおける Cache Coherency 時間の性能測定方法 Performance Measurement Method of Cache Coherency Effects on an Intel Xeon Processor System 河辺峻田口成美古谷英祐

More information

AICS 村井均 RIKEN AICS HPC Summer School /6/2013 1

AICS 村井均 RIKEN AICS HPC Summer School /6/2013 1 AICS 村井均 RIKEN AICS HPC Summer School 2013 8/6/2013 1 背景 OpenMP とは OpenMP の基本 OpenMP プログラミングにおける注意点 やや高度な話題 2 共有メモリマルチプロセッサシステムの普及 共有メモリマルチプロセッサシステムのための並列化指示文を共通化する必要性 各社で仕様が異なり 移植性がない そして いまやマルチコア プロセッサが主流となり

More information

コードのチューニング

コードのチューニング MPI による並列化実装 ~ ハイブリッド並列 ~ 八木学 ( 理化学研究所計算科学研究センター ) KOBE HPC Spring School 2019 2019 年 3 月 14 日 MPI とは Message Passing Interface 分散メモリのプロセス間の通信規格(API) SPMD(Single Program Multi Data) が基本 - 各プロセスが 同じことをやる

More information

Microsoft Word - uv2000manual.docx

Microsoft Word - uv2000manual.docx 大規模可視化システム UV2000 利用マニュアル 名古屋大学情報基盤センター 2014/11/13 版 UV システム利用マニュアル 1 はじめに 本書 大規模可視化システム UV2000 利用者マニュアル は 名古屋大学情報基盤センターの利用マニュアルです ご不明な点やご質問がございましたら 次の連絡先にお問い合わせください 問い合わせ先 名古屋大学情報連携統括本部情報推進部情報基盤共同利用担当

More information

MPI usage

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

More information

Microsoft PowerPoint - 09.pptx

Microsoft PowerPoint - 09.pptx 情報処理 Ⅱ 第 9 回 2014 年 12 月 22 日 ( 月 ) 関数とは なぜ関数 関数の分類 自作関数 : 自分で定義する. ユーザ関数 ユーザ定義関数 などともいう. 本日のテーマ ライブラリ関数 : 出来合いのもの.printf など. なぜ関数を定義するのか? 処理を共通化 ( 一般化 ) する プログラムの見通しをよくする 機能分割 ( モジュール化, 再利用 ) 責任 ( あるいは不具合の発生源

More information

演習1

演習1 神戸市立工業高等専門学校電気工学科 / 電子工学科専門科目 数値解析 2019.5.10 演習 1 山浦剛 (tyamaura@riken.jp) 講義資料ページ http://r-ccs-climate.riken.jp/members/yamaura/numerical_analysis.html Fortran とは? Fortran(= FORmula TRANslation ) は 1950

More information

プログラミング実習I

プログラミング実習I プログラミング実習 I 05 関数 (1) 人間システム工学科井村誠孝 m.imura@kwansei.ac.jp 関数とは p.162 数学的には入力に対して出力が決まるもの C 言語では入出力が定まったひとまとまりの処理 入力や出力はあるときもないときもある main() も関数の一種 何かの仕事をこなしてくれる魔法のブラックボックス 例 : printf() 関数中で行われている処理の詳細を使う側は知らないが,

More information

Fujitsu Standard Tool

Fujitsu Standard Tool 低レベル通信ライブラリ ACP の PGAS ランタイム向け機能 2014 年 10 月 24 日富士通株式会社 JST CREST 安島雄一郎 Copyright 2014 FUJITSU LIMITED 本発表の構成 概要 インタフェース チャネル ベクタ リスト メモリアロケータ アドレス変換 グローバルメモリ参照 モジュール構成 メモリ消費量と性能評価 利用例 今後の課題 まとめ 1 Copyright

More information

POSIXスレッド

POSIXスレッド POSIX スレッド (3) システムプログラミング 2011 年 11 月 7 日 建部修見 同期の戦略 単一大域ロック スレッドセーフ関数 構造的コードロッキング 構造的データロッキング ロックとモジュラリティ デッドロック 単一大域ロック (single global lock) 単一のアプリケーションワイドの mutex スレッドが実行するときに獲得, ブロックする前にリリース どのタイミングでも一つのスレッドが共有データをアクセスする

More information

PowerPoint プレゼンテーション

PowerPoint プレゼンテーション Dell PowerEdge C6320 スケーラブルサーバアプライアンス 仮想化アプライアンスサーバ 最新のプロセッサを搭載したサーバプラットフォーム vsmp Foundation によるサーバ仮想化と統合化の適用 システムはセットアップを完了した状態でご提供 基本構成ではバックプレーン用のスイッチなどが不要 各ノード間を直接接続 冗長性の高いバックプレーン構成 利用するサーバプラットフォームは

More information

ERDAS IMAGINE における処理速度の向上 株式会社ベストシステムズ PASCO CORPORATION 2015

ERDAS IMAGINE における処理速度の向上 株式会社ベストシステムズ PASCO CORPORATION 2015 ERDAS IMAGINE における処理速度の向上 株式会社ベストシステムズ 本セッションの目的 本セッションでは ERDAS IMAGINEにおける処理速度向上を目的として機器 (SSD 等 ) 及び並列処理の比較 検討を行った 1.SSD 及び RAMDISK を利用した処理速度の検証 2.Condorによる複数 PCを用いた並列処理 2.1 分散並列処理による高速化試験 (ERDAS IMAGINEのCondorを使用した試験

More information

OpenMP の概要

OpenMP の概要 OpenMP プログラミング ワークショップ 平成 13 年 3 月 22 日 日本 SGI 株式会社製品技術本部スケーラブルシステムテクノロジーセンター芦澤芳夫 OpenMP の概要 共有メモリ型並列化 API の必要性 標準化による利点 利用者 異機種間の移行が容易 ソフトウェアベンダ 移植性 保守性 品質向上 API の標準化が遅れた理由 各ベンダが独自の API を提案 同様の機能を各社各様の指示行で実現

More information

Fujitsu Standard Tool

Fujitsu Standard Tool XcalableMP ワークショップ COARRAY の便利な使い方 2017 年 10 月 31 日富士通株式会社 ) 次世代 TC 開発本部原口正寿 COARRAY 仕様 Fortran 2008 に組み込まれた分散並列機能 指示文とサービスサブルーチンではなく 文法として組み込まれた [, ] ( 角括弧 ) によるプロセス間通信と 同期のための文 アトミックサブルーチンなど組込み手続 SPMDモデル(Single

More information

PowerPoint プレゼンテーション

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

More information

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

Microsoft PowerPoint MPI.v...O...~...O.e.L.X.g(...Q..) MPI プログラミング Information Initiative Center, Hokkaido Univ. MPI ライブラリを利用した分散メモリ型並列プログラミング 分散メモリ型並列処理 : 基礎 分散メモリマルチコンピュータの構成 プロセッサエレメントが専用のメモリ ( ローカルメモリ ) を搭載 スケーラビリティが高い 例 :HITACHI SR8000 Interconnection

More information

生成された C コードの理解 コメント元になった MATLAB コードを C コード内にコメントとして追加しておくと その C コードの由来をより簡単に理解できることがよくありま [ 詳細設定 ] [ コード外観 ] を選択 C コードのカスタマイズ より効率的な C コードを生成するベストプラクテ

生成された C コードの理解 コメント元になった MATLAB コードを C コード内にコメントとして追加しておくと その C コードの由来をより簡単に理解できることがよくありま [ 詳細設定 ] [ コード外観 ] を選択 C コードのカスタマイズ より効率的な C コードを生成するベストプラクテ MATLAB コードを使用した C コードの生成クイックスタートガイド (R2012a) 最初のスタンドアロン C コードの生成 スタンドアロン C コードを生成するには MATLAB Coder のペインを [ ビルド ] に切り替えて [C/C++ スタティックライブラリ ] [C/C++ ダイナミックライブラリ ] または [C/C++ 実行ファイル ] のいずれかを選択しま MATLAB Coder

More information

この時お使いの端末の.ssh ディレクトリ配下にある known_hosts ファイルから fx.cc.nagoya-u.ac.jp に関する行を削除して再度ログインを行って下さい

この時お使いの端末の.ssh ディレクトリ配下にある known_hosts ファイルから fx.cc.nagoya-u.ac.jp に関する行を削除して再度ログインを行って下さい 20150901 FX10 システムから FX100 システムへの変更点について 共通... 1 Fortran の変更点... 2 C/C++ の変更点... 4 C の変更点... 5 C++ の変更点... 7 共通 1. プログラミング支援ツールの更新 -FX システムについて旧バージョンのプログラミング支援ツールは利用できません 下記からダウンロードの上新規インストールが必要です https://fx.cc.nagoya-u.ac.jp/fsdtfx100/install/index.html

More information

第 2 章インタフェース定義言語 (IDL) IDL とは 言語や OS に依存しないインタフェース定義を行うためのインタフェース定義言語です CORBA アプリケーションを作成する場合は インタフェースを定義した IDL ファイルを作成する必要があります ここでは IDL の文法や IDL ファイ

第 2 章インタフェース定義言語 (IDL) IDL とは 言語や OS に依存しないインタフェース定義を行うためのインタフェース定義言語です CORBA アプリケーションを作成する場合は インタフェースを定義した IDL ファイルを作成する必要があります ここでは IDL の文法や IDL ファイ 第 2 章インタフェース定義言語 (IDL) IDL とは 言語や OS に依存しないインタフェース定義を行うためのインタフェース定義言語です CORBA アプリケーションを作成する場合は インタフェースを定義した IDL ファイルを作成する必要があります ここでは IDL の文法や IDL ファイルの作成方法 コンパイル方法について説明します IDL ファイルの作成にあたっては INTERSTAGE

More information

memo

memo 数理情報工学演習第一 C プログラミング演習 ( 第 5 回 ) 2015/05/11 DEPARTMENT OF MATHEMATICAL INFORMATICS 1 今日の内容 : プロトタイプ宣言 ヘッダーファイル, プログラムの分割 課題 : 疎行列 2 プロトタイプ宣言 3 C 言語では, 関数や変数は使用する前 ( ソースの上のほう ) に定義されている必要がある. double sub(int

More information

appli_HPhi_install

appli_HPhi_install 2018/3/7 HΦ version 3.0.0 インストール手順書 (Linux 64 ビット版 ) 目次 1. アプリケーション概要...- 1-2. システム環境...- 1-3. 必要なツール ライブラリのインストール...- 1-1 cmake...- 2-2 numpy...- 3-4. アプリケーションのインストール...- 4-5. 動作確認の実施...- 5 - 本手順書は HΦ

More information

OpenMP¤òÍѤ¤¤¿ÊÂÎó·×»»¡Ê£²¡Ë

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

More information

1.overview

1.overview 村井均 ( 理研 ) 2 はじめに 規模シミュレーションなどの計算を うためには クラスタのような分散メモリシステムの利 が 般的 並列プログラミングの現状 半は MPI (Message Passing Interface) を利 MPI はプログラミングコストが きい 標 性能と 産性を兼ね備えた並列プログラミング 語の開発 3 並列プログラミング 語 XcalableMP 次世代並列プログラミング

More information

I I / 47

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

More information

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

第8回講義(2016年12月6日) 2016/12/6 スパコンプログラミング (1) (Ⅰ) 1 行列 - 行列積 (2) 東京大学情報基盤センター准教授塙敏博 2016 年 12 月 6 日 ( 火 ) 10:25-12:10 2016/11/29 講義日程 ( 工学部共通科目 ) 1. 9 月 27 日 ( 今日 ): ガイダンス 2. 10 月 4 日 l 並列数値処理の基本演算 ( 座学 ) 3. 10 月 11 日 : スパコン利用開始

More information

Microsoft Word - ユーザ向け利用の手引き_v0.3.doc

Microsoft Word - ユーザ向け利用の手引き_v0.3.doc 京 データポスト処理システム 利用の手引 0.3 版 改版履歴版 更新日付 内容 0.1 2012/4/11 新規作成 0.2 2012/9/6 ログインサーバ名の変更に伴う修正パスワード認証を禁止し 公開鍵認証のみ可能にしたことによる変更本手引きの題目の変更 2 章の名称を変更 京 経由の利用方法 多段接続に関する記述を追加計算ノードでの公開鍵の登録を Fowardagent を行うことで代えられる旨を追加

More information

1. TSUBAME2.0 通常実行まで 1.1. 環境設定 (MPI ライブラリ & コンパイラ ) 最新の Open MPI と Intel コンパイラを使用するため,${HOME}/.bashrc 等で環境変数 ( パス等 ) を設定します. ~ 設定例 ~ export SELECT_MPI

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. コンパイルとソース修正...

More information

Microsoft Word - uv2000manual201603.docx

Microsoft Word - uv2000manual201603.docx 大 規 模 可 視 化 システム UV2000 利 用 マニュアル 2016.3.7 版 名 古 屋 大 学 情 報 基 盤 センター UV システム 利 用 マニュアル 1 はじめに 本 書 大 規 模 可 視 化 システム UV2000 利 用 者 マニュアル は 名 古 屋 大 学 情 報 基 盤 セン ターの 利 用 マニュアルです ご 不 明 な 点 やご 質 問 がございましたら 次 の

More information

スライド 1

スライド 1 知能制御システム学 画像処理の高速化 OpenCV による基礎的な例 東北大学大学院情報科学研究科鏡慎吾 swk(at)ic.is.tohoku.ac.jp 2007.07.03 リアルタイム処理と高速化 リアルタイム = 高速 ではない 目標となる時間制約が定められているのがリアルタイム処理である.34 ms かかった処理が 33 ms に縮んだだけでも, それによって与えられた時間制約が満たされるのであれば,

More information

プレポスト【解説】

プレポスト【解説】 コース名 : シェルの機能とプログラミング ~UNIX/Linux の効率的使用を目指して ~ 1 UNIX および Linux の主な構成要素は シェル コマンド カーネルです プロセスとは コマンドやプログラムを実行する単位のことなので プロセスに関する記述は誤りです UNIX および Linux のユーザーインターフェースは シェル です コマンドを解釈するという機能から コマンドインタープリタであるともいえます

More information

Slides: TimeGraph: GPU Scheduling for Real-Time Multi-Tasking Environments

Slides: TimeGraph: GPU Scheduling for Real-Time Multi-Tasking Environments 計算機アーキテクチャ第 11 回 マルチプロセッサ 本資料は授業用です 無断で転載することを禁じます 名古屋大学 大学院情報科学研究科 准教授加藤真平 デスクトップ ジョブレベル並列性 スーパーコンピュータ 並列処理プログラム プログラムの並列化 for (i = 0; i < N; i++) { x[i] = a[i] + b[i]; } プログラムの並列化 x[0] = a[0] + b[0];

More information

Microsoft Word - Training10_プリプロセッサ.docx

Microsoft Word - Training10_プリプロセッサ.docx Training 10 プリプロセッサ 株式会社イーシーエス出版事業推進委員会 1 Lesson1 マクロ置換 Point マクロ置換を理解しよう!! マクロ置換の機能により 文字列の置き換えをすることが出来ます プログラムの可読性と保守性 ( メンテナンス性 ) を高めることができるため よく用いられます マクロ置換で値を定義しておけば マクロの値を変更するだけで 同じマクロを使用したすべての箇所が変更ができるので便利です

More information