講習会 :MPI 基礎 2 講習会概略 開催日 : 2016 年 9 月 12 日 ( 月 ) 10:30-17: 年 9 月 13 日 ( 火 ) 10:00-17:00 場所 : 東京大学情報基盤センター 4 階 413 遠隔会義室 講習会プログラム : 9 月 12 日 ( 月

Size: px
Start display at page:

Download "講習会 :MPI 基礎 2 講習会概略 開催日 : 2016 年 9 月 12 日 ( 月 ) 10:30-17: 年 9 月 13 日 ( 火 ) 10:00-17:00 場所 : 東京大学情報基盤センター 4 階 413 遠隔会義室 講習会プログラム : 9 月 12 日 ( 月"

Transcription

1 講習会 :MPI 基礎 1 第 63 回お試しアカウント付き並列プログラミング講習会 MPI 基礎 : 並列プログラミング入門 東京大学情報基盤センター 内容に関するご質問は cc.u-tokyo.ac.jp まで お願いします

2 講習会 :MPI 基礎 2 講習会概略 開催日 : 2016 年 9 月 12 日 ( 月 ) 10:30-17: 年 9 月 13 日 ( 火 ) 10:00-17:00 場所 : 東京大学情報基盤センター 4 階 413 遠隔会義室 講習会プログラム : 9 月 12 日 ( 月 ) 10:00-10:30 受付 10:30-12:30 ノートパソコンの設定 テストプログラムの実行など ( 演習 ) ( 講師 : 塙 ) 14:00-15:45 並列プログラミングの基本 ( 座学 )( 講師 : 塙 ) 16:00-17:00 MPI プログラム実習 Ⅰ( 演習 )( 講師 : 塙 ) 9 月 13 日 ( 火 ) 10:00-12:30 プログラミングの基礎 ( 分割コンパイル )( 演習 )( 講師 : 大島 ) 14:00-15:30 MPI プログラミング実習 Ⅱ( 演習 )( 講師 : 塙 ) 15:45-17:00 MPI プログラミング実習 Ⅲ( 演習 )( 講師 : 塙 )

3 講習会 :MPI 基礎 3 有償トライアルユース制度について 安価に当センターの Oakleaf-FX, Reedbush-U スーパーコンピュータシステムが使える 無償トライアルユース および 有償トライアルユース 制度があります アカデミック利用 パーソナルコース グループコースの双方 (1 ヶ月 ~3 ヶ月 ) 企業利用 パーソナルコース (1 ヶ月 ~3 ヶ月 )(FX10: 最大 24 ノード 最大 96 ノード, RB-U: 最大 4 ノード 最大 16 ノード ) 本講習会の受講が必須 審査無 グループコース 無償トライアルユース :(1 ヶ月 ~3 ヶ月 ): 無料 (FX10:12 ノード RB-U: 8 ノード 1 口 ) 有償トライアルユース :(1 ヶ月 ~ 最大通算 9 ヶ月 ) 有償 (FX10:12 ノード RB-U:8 ノード 1 口 ) スーパーコンピュータ利用資格者審査委員会の審査が必要 ( 年 2 回実施 ) 双方のコースともに 簡易な利用報告書の提出が必要 料金体系や利用条件の詳細は 以下の HP をご覧ください

4 講習会 :MPI 基礎 18 スパコンへのログイン テストプログラム起動

5 講習会 :MPI 基礎 19 講義の流れ 1. スパコン利用の仕方 単純な並列プログラムの実行 2. 総和演算

6 講習会 :MPI 基礎 20 Reedbush-U へログイン Ø ターミナルから 以下を入力する $ ssh reedbush-u.cc.u-tokyo.ac.jp -l tyyxxx -l はハイフンと小文字の tyyxxx は利用者番号 ( 数字 ) Ø Ø Ø tyyxxx は 利用者番号を入れる接続するかと聞かれるので yes を入れる鍵の設定時に入れた自分が決めたパスワード ( パスフレーズ ) を入れる 成功すると ログインができる

7 講習会 :MPI 基礎 21 Reedbush-U のデータを PC に取り込む Ø ターミナルから 以下を入力する $ scp tyyxxx@reedbush-u.cc.u-tokyo.ac.jp:~/a.f90./ tyyxxx は利用者番号 ( 数字 ) tyyxxx は 利用者番号を入れる Ø Reedbush 上のホームディレクトリにある a.f90 を PC のカレントディレクトリに取ってくる Ø ディレクトリごと取ってくるには -r を指定 $ scp -r tyyxxx@reedbush-u.cc.utokyo.ac.jp:~/samp./ Ø Reedbush 上のホームディレクトリにあるSAMPフォルダを その中身ごと PCのカレントディレクトリに取ってくる

8 講習会 :MPI 基礎 22 PC のファイルを Reedbush-U に置く Ø ターミナルから 以下を入力する $ scp./a.f90 tyyxxx@reedbush-u.cc.u-tokyo.ac.jp: tyyxxx は利用者番号 ( 数字 ) tyyxxx は 利用者番号を入れる Ø PCのカレントディレクトリにある a.f90 を Reedbush 上のホームディレクトリに置く Ø ディレクトリごと置くには -r を指定 $ scp -r./samp tyyxxx@reedbush-u.cc.u-tokyo.ac.jp: Ø PCのカレントディレクトリにあるSAMPフォルダを その中身ごと Reedbush 上のホームディレクトリに置く

9 講習会 :MPI 基礎 23 Emacs の Tramp 機能 ( 必要な人のみ ) emacs が自分のパソコンに入っている人は Tramp 機能により 遠隔のファイルが操作できます Reedbush の秘密鍵を SSH に登録します emacs を立ち上げます ファイル検索モードにします ^x ^f (^ は control) Find file: の現在のパス名部分を消し 以下を入れます ( ただし t~ は自分のログイン ID にする ) Find file:/ssh:tyyxxx@reedbush-u.cc.u-tokyo.ac.jp: パスフレーズを入れると ローカルファイルのように Reedbush 上のファイルが編集できます

10 講習会 :MPI 基礎 24 Reedbush における注意 /home ファイルシステムは容量が小さく ログインに必要なファイルだけを置くための場所です /home に置いたファイルは計算ノードから参照できません ジョブの実行もできません 転送が終わったら /lustre ファイルシステムに移動 (mv) してください または 直接 /lustre ファイルシステムを指定して転送してください ホームディレクトリ : /home/gt00/t003xx cd コマンドで移動できます ustre ディレクトリ : /lustre/gt00/t003xx cdw コマンドで移動できます

11 講習会 :MPI 基礎 25 UNIX 備忘録 (1/3) emacs の起動 : emacs 編集ファイル名 ^x ^s (^ は control) : テキストの保存 ^x ^c : 終了 ( ^z で終了すると スパコンの負荷が上がる 絶対にしないこと ) ^g : 訳がわからなくなったとき ^k : カーソルより行末まで消す 消した行は 一時的に記憶される ^y : ^k で消した行を 現在のカーソルの場所にコピーする ^s 文字列 : 文字列の箇所まで移動する ^M x goto-line : 指定した行まで移動する

12 講習会 :MPI 基礎 26 UNIX 備忘録 (2/3) rm ファイル名 : ファイル名のファイルを消す rm *~ : test.c~ などの ~ がついたバックアップファイルを消す 使う時は慎重に *~ の間に空白が入ってしまうと 全てが消えます ls : 現在いるフォルダの中身を見る cd フォルダ名 : フォルダに移動する cd.. : 一つ上のフォルダに移動 cd ~ : ホームディレクトリに行く 訳がわからなくなったとき cat ファイル名 : ファイル名の中身を見る make : 実行ファイルを作る (Makefile があるところでしか実行できない ) make clean : 実行ファイルを消す (clean が Makefile で定義されていないと実行できない )

13 講習会 :MPI 基礎 27 UNIX 備忘録 (3/3) less ファイル名 : ファイル名の中身を見る (cat では画面がいっぱいになってしまうとき ) スペースキー : 1 画面スクロール / : 文字列の箇所まで移動する q : 終了 ( 訳がわからなくなったとき )

14 講習会 :MPI 基礎 28 サンプルプログラムの実行 初めての並列プログラムの実行

15 講習会 :MPI 基礎 29 サンプルプログラム名 C 言語版 Fortran90 版共通ファイル : Samples-rb.tar tar で展開後 C 言語と Fortran90 言語のディレクトリが作られる C/ : C 言語用 F/ : Fortran90 言語用 上記のファイルが置いてある場所 /lustre/gt00/z30105 (/home でないので注意 )

16 講習会 :MPI 基礎 30 並列版 Hello プログラムをコンパイルしよう (1/2) 1. cdw コマンドを実行して ustreファイルシステムに移動する 2. /lustre/gt00/z30105 にある Samples-rb.tar を自分のディレクトリにコピーする $ cp /lustre/gt00/z30105/samples-rb.tar./ 3. Samples-rb.tar を展開する $ tar xvf Samples-rb.tar 4. Samples フォルダに入る $ cd Samples 5. C 言語 : $ cd C Fortran90 言語 : $ cd F 6. Hello フォルダに入る $ cd Hello

17 講習会 :MPI 基礎 31 並列版 Hello プログラムをコンパイルしよう (2/2) 6. ピュアMPI 用のMakefileをコピーする $ cp Makefile_pure Makefile 7. make する $ make 8. 実行ファイル (hello) ができていることを確認する $ ls

18 講習会 :MPI 基礎 32 Reedbush-U スーパーコンピュータシステム でのジョブ実行形態 以下の 2 通りがあります インタラクティブジョブ実行 PC での実行のように コマンドを入力して実行する方法 スパコン環境では あまり一般的でない デバック用 大規模実行はできない Reedbush-U では 以下に限定 1 ノード (36 コア )(15 分まで, 9/1 以降は 30 分まで ) 4 ノード (144 コア )(5 分まで 9/1 以降は 10 分まで ) バッチジョブ実行 バッチジョブシステムに処理を依頼して実行する方法 スパコン環境で一般的 大規模実行用 Reedbush-U では 最大 128 ノード (4,608 コア )(6 時間 9/1 以降は 24 時間 )

19 講習会 :MPI 基礎 33 インタラクティブ実行のやり方 コマンドラインで以下を入力 1 ノード実行用 $ qsub -I -q u-interactive -l select=1 -l walltime=01:00 -W group_list=gt00 4 ノード実行用 $ qsub -I -q u-interactive -l select=4 -l walltime=01:00 -W group_list=gt00 インタラクティブ用のノードがすべて使われている場合 資源が空くまで ログインできません 講習会アカウントでは使えません

20 講習会 :MPI 基礎 34 コンパイラの種類とインタラクティブ実行お よびバッチ実行 Reedbush-Uでは コンパイラはバッチ実行 インタラクティブ実行で共通に使えます 例 ) Intelコンパイラ Cコンパイラ : icc, mpiicc (Intel MPIを使う場合 ) Fortran90コンパイラ : ifort, mpiifort (Intel MPIを使う場合 )

21 講習会 :MPI 基礎 35 バッチ処理とは スパコン環境では 通常は インタラクティブ実行 ( コマンドラインで実行すること ) はできません ジョブはバッチ処理で実行します バッチキュー ジョブの依頼 バッチ処理システムがジョブを取り出す 実行 ユーザ スパコン

22 講習会 :MPI 基礎 36 バッチキューの設定のしかた バッチ処理は Altair 社のバッチシステム PBS Professional で管理されています 以下 主要コマンドを説明します ジョブの投入 : qsub < ジョブスクリプトファイル名 > 自分が投入したジョブの状況確認 : rbstat 投入ジョブの削除 : qdel < ジョブ ID> バッチキューの状態を見る : rbstat --rsc バッチキューの詳細構成を見る : rbstat --rsc -x 投げられているジョブ数を見る : rbstat -b 過去の投入履歴を見る : rbstat -H 同時に投入できる数 / 実行できる数を見る : rbstat --limit

23 講習会 :MPI 基礎 37 本お試し講習会でのキュー名 本演習中のキュー名 : u-tutorial 最大 10 分まで 最大ノード数は8ノード (288コア) まで 本演習時間以外 (24 時間 ) のキュー名 : u-lecture 利用条件は演習中のキュー名と同様

24 講習会 :MPI 基礎 38 rbstat --rsc の実行画面例 $ rbstat --rsc QUEUE STATUS NODE u-debug [ENABE,START] 54 u-short [ENABE,START] 16 u-regular [ENABE,START] ---- u-small [ENABE,START] u-medium [ENABE,START] u-large [ENABE,START] u-x-large [ENABE,START] 288 u-interactive [ENABE,START] ---- u-interactive_1 [ENABE,START] u-interactive_4 [ENABE,START] 54 u-lecture [ENABE,START] 54 u-lecture8 [DISABE,START] 54 u-tutorial [ENABE,START] 54 使える キュー名 ( リソースグループ ) 現在使えるか ノードの利用可能数

25 講習会 :MPI 基礎 39 rbstat --rsc -x の実行画面例 $ rbstat --rsc -x QUEUE STATUS MIN_NODE MAX_NODE MAX_EAPSE REMAIN_EAPSE MEM(GB)/NODE PROJECT u-debug [ENABE,START] :30:00 00:30:00 244GB pz0105,gcxx u-short [ENABE,START] :00:00 02:00:00 244GB pz0105,gcxx u-regular [ENABE,START] ---- u-small [ENABE,START] :00:00 12:00:00 244GB gcxx,pz u-medium [ENABE,START] :00:00 12:00:00 244GB gcxx ---- u-large [ENABE,START] :00:00 12:00:00 244GB gcxx ---- u-x-large [ENABE,START] :00:00 06:00:00 244GB gcxx u-interactive [ENABE,START] ---- u-interactive_1 [ENABE,START] :15:00 00:15:00 244GB pz0105,gcxx ---- u-interactive_4 [ENABE,START] :05:00 00:05:00 244GB pz0105,gcxx u-lecture [ENABE,START] :10:00 00:10:00 244GB gt00,gtyy u-lecture8 [DISABE,START] :10:00 00:10:00 244GB gtyy u-tutorial [ENABE,START] :10:00 00:10:00 244GB gt00 使えるキュー名 ( リソースグループ ) 現在使えるか ノードの実行情報 課金情報 ( 財布 ) 実習では 1 つのみ

26 講習会 :MPI 基礎 40 rbstat --rsc -b の実行画面例 $ rbstat --rsc b QUEUE STATUS TOTA RUNNING QUEUED HOD BEGUN WAIT EXIT TRANSIT NODE u-debug [ENABE,START] u-short [ENABE,START] u-regular [ENABE,START] ---- u-small [ENABE,START] u-medium [ENABE,START] u-large [ENABE,START] u-x-large [ENABE,START] u-interactive [ENABE,START] ---- u-interactive_1 [ENABE,START] u-interactive_4 [ENABE,START] u-lecture [ENABE,START] u-lecture8 [DISABE,START] u-tutorial [ENABE,START] 使えるキュー名 ( リソースグループ ) 現在使えるか ジョブの総数 実行しているジョブの数 待たされているジョブの数 ノードの利用可能数

27 講習会 :MPI 基礎 41 JOB スクリプトサンプルの説明 ( ピュア MPI) (hello-pure.bash, C 言語 Fortran 言語共通 ) #!/bin/bash #PBS -q u-lecture #PBS -Wgroup_list=gt00 #PBS -l select=8:mpiprocs=36 #PBS -l walltime=00:01:00 cd $PBS_O_WORKDIR. /etc/profile.d/modules.sh mpirun./hello リソースグループ名 :u-lecture 利用グループ名 :gt00 利用ノード数 ノード内利用コア数 (MPI プロセス数 ) 実行時間制限 :1 分 MPI ジョブを 8*36 = 288 プロセスで実行する カレントディレクトリ設定 環境変数設定 ( 必ず入れておく )

28 ピュア MPI の実行状況 ( ノード内 ) 2016/9/12,13 講習会 :MPI 基礎 42 MPI プロセス 1 ソケットのみを図示 ( もう 1 ソケットある ) QPI x2 PCIe コア当たり 1 データ : 2KB, 2: 256KB, 3: 2.5MB( 共有 ) => 3 は全体で 45MB Core # Core # Core # Core # Core #1 Core # Core #6 Core # Core #10 Core # Core #15 Core # Core # Core # Core # Core # Core # Core # DDR4 DIMM Memory Memory Memory Memory 16GB 2 枚 16GB 2 枚 16GB 2 枚 16GB 2 枚ソケット当たりメモリ量 :16GB 8=128GB 76.8 GB/ 秒 =(8Byte 2400MHz 4 channel)

29 講習会 :MPI 基礎 43 並列版 Hello プログラムを実行しよう ( ピュア MPI) このサンプルの JOB スクリプトは hello-pure.bash です 配布のサンプルでは キュー名が ulecture になっています $ emacs hello-pure.bash で u-lecture u-tutorial に変更してください

30 講習会 :MPI 基礎 44 並列版 Hello プログラムを実行しよう ( ピュア MPI) 1. Hello フォルダ中で以下を実行する $ qsub hello-pure.bash 2. 自分の導入されたジョブを確認する $ rbstat 3. 実行が終了すると 以下のファイルが生成される hello-pure.bash.exxxxxx hello-pure.bash.oxxxxxx (XXXXXX は数字 ) 4. 上記の標準出力ファイルの中身を見てみる $ cat hello-pure.bash.oxxxxxx 5. Hello parallel world! が 36 プロセス *8 ノード =288 表示されていたら成功

31 講習会 :MPI 基礎 45 バッチジョブ実行による標準出力 標準エラー出力 バッチジョブの実行が終了すると 標準出力ファイルと標準エラー出力ファイルが ジョブ投入時のディレクトリに作成されます 標準出力ファイルにはジョブ実行中の標準出力 標準エラー出力ファイルにはジョブ実行中のエラーメッセージが出力されます ジョブ名.oXXXXX --- 標準出力ファイルジョブ名.eXXXXX --- 標準エラー出力ファイル (XXXXX はジョブ投入時に表示されるジョブのジョブ ID)

32 講習会 :MPI 基礎 46 並列版 Hello プログラムをコンパイルしよう 1. ハイブリッド MPI 用の Makefile をコピーする $ cp Makefile_hy36 Makefile 2. make する $ make clean $ make 3. 実行ファイル (hello) ができていることを確認する $ ls 4. JOB スクリプト中 (hello-hy36.bash) のキュー名を変更する u-lecture u-tutorial に変更する $ emacs hello-hy36.bash

33 講習会 :MPI 基礎 47 並列版 Hello プログラムを実行しよう ( ハイブリッド MPI) 1. Hello フォルダ中で以下を実行する $ qsub hello-hy36.bash 2. 自分の導入されたジョブを確認する $ rbstat 3. 実行が終了すると 以下のファイルが生成される hello-hy36.bash.exxxxxx hello-hy36.bash.oxxxxxx (XXXXXX は数字 ) 4. 上記標準出力ファイルの中身を見てみる $ cat hello-hy36.bash.oxxxxxx 5. Hello parallel world! が 1 プロセス *8 ノード =8 個表示されていたら成功

34 講習会 :MPI 基礎 48 JOB スクリプトサンプルの説明 ( ピュア MPI) (hello-hy36.bash, C 言語 Fortran 言語共通 ) #!/bin/bash #PBS -q u-lecture #PBS -Wgroup_list=gt00 #PBS l select=8:mpiprocs=1: ompthreads=36 #PBS -l walltime=00:01:00 cd $PBS_O_WORKDIR. /etc/profile.d/modules.sh mpirun./hello リソースグループ名 :u-lecture 利用グループ名 :gt00 利用ノード数 MPI プロセス数 ノード内利用スレッド数 実行時間制限 :1 分 MPI ジョブを 1*8 = 8 プロセスで実行する カレントディレクトリ設定 環境変数設定 ( 必ず入れておく )

35 ハイブリッド MPI の実行状況 ( ノード内 ) 2016/9/12,13 講習会 :MPI 基礎 49 1 ソケットのみを図示 ( もう 1 ソケットある ) あと18スレッド分 QPI x2 PCIe コア当たり1データ : 2KB, 2: 256KB, 3: 2.5MB( 共有 ) => 3 は全体で45MB Core # Core # Core # Core # Core #1 Core # Core #6 Core # Core #10 Core # Core #15 Core # Core # Core # Core # Core # Core # Core # DDR4 DIMM Memory Memory Memory Memory MPIプロセス 16GB 2 枚 16GB 2 枚スレッド 16GB 2 枚 16GB 2 枚ソケット当たりメモリ量 :16GB 8=128GB 76.8 GB/ 秒 =(8Byte 2400MHz 4 channel)

36 講習会 :MPI 基礎 50 並列版 Hello プログラムの説明 (C 言語 ) #include <stdio.h> #include <mpi.h> int main(int argc, char* argv[]) { int int myid, numprocs; ierr, rc; このプログラムは 全 PE で起動される MPI の初期化 ierr = MPI_Init(&argc, &argv); ierr = MPI_Comm_rank(MPI_COMM_WORD, &myid); ierr = MPI_Comm_size(MPI_COMM_WORD, &numprocs); 自分の ID 番号を取得 : 各 PE で値は異なる } printf("hello parallel world! Myid:%d n", myid); rc = MPI_Finalize(); exit(0); MPI の終了 全体のプロセッサ台数を取得 : 各 PE で値は同じ ( 演習環境では 288 もしくは 8)

37 講習会 :MPI 基礎 51 並列版 Hello プログラムの説明 (Fortran 言語 ) program main このプログラムは 全 PE で起動される common /mpienv/myid,numprocs integer myid, numprocs integer ierr MPI の初期化 call MPI_INIT(ierr) call MPI_COMM_RANK(MPI_COMM_WORD, myid, ierr) call MPI_COMM_SIZE(MPI_COMM_WORD, numprocs, ierr) 自分の ID 番号を取得 : 各 PE で値は異なる print *, "Hello parallel world! Myid:", myid call MPI_FINAIZE(ierr) stop end MPI の終了 全体のプロセッサ台数を取得 : 各 PE で値は同じ ( 演習環境では 288 もしくは 8)

38 講習会 :MPI 基礎 52 時間計測方法 (C 言語 ) double t0, t1, t2, t_w;.. ierr = MPI_Barrier(MPI_COMM_WORD); t1 = MPI_Wtime(); バリア同期後時間を習得し保存 < ここに測定したいプログラムを書く > ierr = MPI_Barrier(MPI_COMM_WORD); t2 = MPI_Wtime(); t0 = t2 - t1; ierr = MPI_Reduce(&t0, &t_w, 1, MPI_DOUBE,MPI_MAX, 0, MPI_COMM_WORD); 各プロセッサーで t0 の値は異なる この場合は 最も遅いものの値をプロセッサ 0 番が受け取る

39 講習会 :MPI 基礎 53 時間計測方法 (Fortran 言語 ) double precision t0, t1, t2, t_w double precision MPI_WTIME.. call MPI_BARRIER(MPI_COMM_WORD, ierr) t1 = MPI_WTIME(ierr) バリア同期後時間を習得し保存 < ここに測定したいプログラムを書く > call MPI_BARRIER(MPI_COMM_WORD, ierr) t2 = MPI_WTIME(ierr) t0 = t2 - t1 call MPI_REDUCE(t0, t_w, 1, & MPI_DOUBE_PRECISION, & MPI_MAX, 0, MPI_COMM_WORD, ierr) 各プロセッサーで t0 の値は異なる この場合は 最も遅いものの値をプロセッサ 0 番が受け取る

40 講習会 :MPI 基礎 54 MPI 実行時のリダイレクトについて Reedbush スーパーコンピュータシステムでは MPI 実行時の入出力のリダイレクトができます 例 )mpirun./a.out < in.txt > out.txt

41 講習会 :MPI 基礎 55 依存関係のあるジョブの投げ方 ( ステップジョブ チェーンジョブ ) あるジョブスクリプト go1.sh の後に go2.sh を投げたい さらに go2.sh の後に go3.sh を投げたい ということがある 以上を ステップジョブまたはチェーンジョブという Reedbush におけるステップジョブの投げ方 1. $qsub go1.sh reedbush-pbsadmin0 2. 上記のジョブ番号 を覚えておき 以下の入力をする $qsub -W depend=afterok:12345 go2.sh reedbush-pbsadmin0 3. 以下同様 $qsub -W depend=afterok:12346 go3.sh reedbush-pbsadmin0 afterok: 前のジョブが正常に終了したら実行する afternotok: 前のジョブが正常終了しなかった場合に実行する afterany: どのような状態でも実行する

42 講習会 :MPI 基礎 56 並列プログラミングの基礎 ( 座学 ) 東京大学情報基盤センター准教授塙敏博

43 講習会 :MPI 基礎 57 教科書 ( 演習書 ) スパコンプログラミング入門 - 並列処理と MPI の学習 - 片桐孝洋著 東大出版会 ISBN 発売日 :2013 年 3 月 12 日 判型 :A5, 200 頁 本書の特徴 C 言語で解説 C 言語 Fortran90 言語のサンプルプログラムが付属 数値アルゴリズムは 図でわかりやすく説明 本講義の内容を全てカバー 内容は初級 初めて並列数値計算を学ぶ人向けの入門書

44 講習会 :MPI 基礎 58 教科書 ( 演習書 ) 並列プログラミング入門 : サンプルプログラムで学ぶ OpenMP と OpenACC ( 仮題 ) 片桐孝洋著 東大出版会 ISBN-10: ISBN-13: 発売日 : 2015 年 5 月 25 日 本書の特徴 C 言語 Fortran90 言語で解説 C 言語 Fortran90 言語の複数のサンプルプログラムが入手可能 ( ダウンロード形式 ) 本講義の内容を全てカバー Windows PC 演習可能 (Cygwin 利用 ) スパコンでも演習可能 内容は初級 初めて並列プログラミングを学ぶ人向けの入門書

45 講習会 :MPI 基礎 59 参考書 スパコンを知る : その基礎から最新の動向まで 岩下武史 片桐孝洋 高橋大介著 東大出版会 ISBN-10: ISBN-13: 発売日 :2015 年 2 月 20 日 176 頁 本書の特徴 スパコンの解説書です 以下を分かりやすく解説します スパコンは何に使えるか スパコンはどんな仕組みで なぜ速く計算できるのか 最新技術 今後の課題と将来展望 など

46 講習会 :MPI 基礎 60 参考書 並列数値処理 - 高速化と性能向上のために - 金田康正東大教授理博編著 片桐孝洋東大特任准教授博士 ( 理学 ) 著 黒田久泰愛媛大准教授博士 ( 理学 ) 著 山本有作神戸大教授博士 ( 工学 ) 著 五百木伸洋 日立製作所著 コロナ社 発行年月日 :2010/04/30, 判型 : A5, ページ数 :272 頁 ISBN: , 定価 :3,990 円 ( 本体 3,800 円 + 税 5%) 本書の特徴 Fortran 言語で解説 数値アルゴリズムは 数式などで厳密に説明 本講義の内容に加えて 固有値問題の解法 疎行列反復解法 FFT ソート など 主要な数値計算アルゴリズムをカバー 内容は中級 ~ 上級 専門として並列数値計算を学びたい人向き

47 講習会 :MPI 基礎 61 本講義の流れ 1. 東大スーパーコンピュータの概略 2. 並列プログラミングの基礎 3. 性能評価指標 4. 基礎的なMPI 関数 5. データ分散方式 6. ベクトルどうしの演算 7. ベクトル- 行列積 8. リダクション演算

48 講習会 :MPI 基礎 62 東大スーパーコンピュータ の概略

49 講習会 :MPI 基礎 63 東京大学情報基盤センター スパコン (1/3) 2014 年 3 月 10 日運用終了 HITACHI SR16000 T2K 東大 (HA8000 クラスタシステム ) Total Peak performance : 54.9 TFOPS Total Peak performance : 140 TFOPS Total number of nodes : 56 Total number of nodes : 952 Total memory : GB Total memory : GB Peak performance per node : GFOPS Peak performance per node : GFOPS Main memory per node : 200GB Main memory per node : 32 GB, 128 GB Disk capacity : 556 TB Disk capacity : 1 PB IBM POWER7 3.83GHz (30.64GFOPS) AMD Quad Core Opteron 2.3GHz (9.2GFOPS) 2011 年 10 月 ~ 試験運用開始 ノード製品名 :HITACHI HA8000-tc/RS425 63

50 講習会 :MPI 基礎 64 東京大学情報基盤センター スパコン (2/3) Fujitsu PRIMEHPC FX10 (FX10スーパーコンピュータシステム) Total Peak performance : 1.13 PFOPS Total number of nodes : 4,800 Total memory : 150TB Peak performance per node : GFOPS Main memory per node : 32 GB Disk capacity : 2.1 PB SPARC64 IXfx 1.848GHz 2012 年 4 月 2 日試験運転開始 2012 年 7 月 2 日正式運用開始 Oakbridge-FX : 長時間ジョブ用の FX10 ノード数 :24~576 制限時間 : 最大 168 時間 (1 週間 ) 64

51 講習会 :MPI 基礎 65 東京大学情報基盤センター スパコン (3/3) Reedbush-U (SGI Rackable クラスタシステム ) Total Peak performance : 508 TFOPS Total number of nodes : 420 Total memory : 105 TB Peak performance per node : GFOPS Main memory per node : 256 GB Disk capacity : 5.04 PB Intel Xeon E5-2695v4 2.1GHz 18 core x2 socket Reedbush-H: GPU クラスタ 2017 年 3 月 1 日試験運転開始予定 2016 年 7 月 1 日試験運転開始 2016 年 9 月 1 日正式運用開始 65

52 講習会 :MPI 基礎 66 Core #0 Core #1 FX10 計算ノードの構成 Core #2 Core #3 各 CPU の内部構成 Core #12 1 ソケットのみ Core #13 Core # : 1データキャッシュ32KB GB/ 秒 Core #15 TOFU Network ICC 2 (16 コアで共有 12MB) 85GB/ 秒 =(8Byte 1333MHz 8 channel) Memory Memory Memory Memory DDR3 DIMM 4GB 2 枚 4GB 2 枚 4GB 2 枚 4GB 2 枚 ノード内合計メモリ量 :8GB 4=32GB

53 講習会 :MPI 基礎 FX10 の通信網 (1TOFU 単位 ) 1TOFU 単位計算ノード内 ノード ノード ノード ノード ノード ノード ノード ノード ノード 1TOFU 単位間の結合用 6 本それぞれ 5GB/ 秒 ( 双方向 ) ノード ノード ノード ノード 67

54 講習会 :MPI 基礎 68 FX10 の通信網 (1TOFU 単位間の結合 ) 3 次元接続 1 TOFU 単位 1 TOFU 単位 1 TOFU 単位 1 TOFU 単位 1 TOFU 単位 1 TOFU 単位 1 TOFU 単位 1 1 TOFU 単位単位 1 1 TOFU 単位単位 1 TOFU 単位 1 TOFU 単位 1 TOFU 単位 1 TOFU 単位 1 TOFU 単位 1 1 TOFU 単位単位 1 1 TOFU 単位単位 1 TOFU 単位 1 TOFU 単位 1 TOFU 単位 1 TOFU 単位 1 TOFU 単位 1 TOFU 単位 1 TOFU 単位 l ユーザから見ると X 軸 Y 軸 Z 軸について 奥の1TOFUと 手前の 1TOFUは 繋がってみえます (3 次元トーラス接続 ) l ただし物理結線では l X 軸はトーラス l l Y 軸はメッシュ Z 軸はメッシュまたは トーラス になっています

55 講習会 :MPI 基礎 69 Reedbush-U ノードのブロック図 メモリのうち 近い メモリと 遠い メモリがある => NUMA (Non-Uniform Memory Access) (FX10 はフラット ) メモリ 128GB DDR4 DDR4 DDR4 DDR4 76.8GB/s Intel Xeon E v4 (Broadwell- EP) G3 x GB/s 76.8GB/s QPI QPI 76.8GB/s Intel Xeon E v4 (Broadwell- EP) DDR4 DDR4 DDR4 DDR4 76.8GB/s メモリ 128GB IB EDR HCA

56 講習会 :MPI 基礎 70 Broadwell-EP の構成 1 ソケットのみを図示 QPI x2 PCIe コア当たり 1 データ : 2KB, 2: 256KB, 3: 2.5MB( 共有 ) => 3 は全体で 45MB Core # Core # Core # Core # Core # Core # Core # Core # Core # Core # Core # Core # Core # Core # Core # Core # Core # Core # DDR4 DIMM Memory Memory Memory Memory 16GB 2 枚 16GB 2 枚 16GB 2 枚 16GB 2 枚 ソケット当たりメモリ量 :16GB 8=128GB 76.8 GB/ 秒 =(8Byte 2400MHz 4 channel)

57 講習会 :MPI 基礎 71 Reedbush-U の通信網 フルバイセクションバンド幅を持つ Fat Tree 網 どのように計算ノードを選んでも互いに無衝突で通信が可能 Mellanox InfiniBand EDR 4x CS7500: 648 ポート 内部は 36 ポートスイッチ (SB7800) を (36+18) 台組み合わせたものと等価 Uplink: 18 Downlink: ポート Director スイッチ 1 台の中身 ポート Spine スイッチ 18 台 36 ポート eaf スイッチ 36 台

58 講習会 :MPI 基礎 72 東大情報基盤センター FX10スーパーコンピュータシステムの料金表 (2016 年 4 月 1 日 ) パーソナルコース ( 年間 ) コース1: 120,000 円 : 12ノード ( 優先 ) 最大 24ノードまで コース2: 250,000 円 : 24ノード ( 優先 ) 最大 96ノードまで グループコース 500,000 円 ( 企業 600,000 円 ) :1 口 12 ノード ( 優先 ) 最大 1440 ノードまで 以上は トークン制 で運営 申し込みノード数 360 日 24 時間の トークン が与えられる 優先ノードまでは トークン消費係数が1.0 優先ノードを超えると 超えた分は 消費係数が2.0になる Reedbush-Uとの相互トークン移行も可能

59 講習会 :MPI 基礎 73 東大情報基盤センター Reedbush-U スーパーコ ンピュータシステムの料金表 (2016 年 7 月 1 日 ) パーソナルコース ( 年間 ) 200,000 円 : 4 ノード ( 優先 ) 最大 16 ノードまで グループコース 400,000 円 ( 企業 480,000 円 ) : 4 ノード ( 優先 ) 最大 128 ノードまで 700,000 円 ( 企業 840,000 円 ) : 1 口 8 ノード ( 優先 ) 最大 128 ノードまで 以上は トークン制 で運営 申し込みノード数 360 日 24 時間の トークン が与えられる 優先ノードまでは トークン消費係数が 1.0 優先ノードを超えると 超えた分は 消費係数が 2.0 になる FX10 との相互トークン移行も可能

60 講習会 :MPI 基礎 74 スーパーコンピュータシステムの詳細 以下のページをご参照ください 利用申請方法 運営体系 料金体系 利用の手引などがご覧になれます

61 講習会 :MPI 基礎 75 並列プログラミングの基礎

62 講習会 :MPI 基礎 76 並列プログラミングとは何か? 逐次実行のプログラム ( 実行時間 T ) を p 台の計算機を使って T / p にすること T 素人考えでは自明 T / p 実際は できるかどうかは 対象処理の内容 ( アルゴリズム ) で大きく難しさが違う アルゴリズム上 絶対に並列化できない部分の存在 通信のためのオーバヘッドの存在 通信立ち上がり時間 データ転送時間

63 講習会 :MPI 基礎 77 並列と並行 並列 (Parallel) 物理的に並列 ( 時間的に独立 ) ある時間に実行されるものは多数 T 並行 (Concurrent) 論理的に並列 ( 時間的に依存 ) ある時間に実行されるものは1つ (=1プロセッサで実行) T 時分割多重 疑似並列 OS によるプロセス実行スケジューリング ( ラウンドロビン方式 )

64 講習会 :MPI 基礎 78 並列計算機の分類 Michael J. Flynn 教授 ( スタンフォード大 ) の分類 (196 6) 単一命令 単一データ流 (SISD, Single Instruction Single Data Stream) 単一命令 複数データ流 (SIMD, Single Instruction Multiple Data Stream) 複数命令 単一データ流 (MISD, Multiple Instruction Single Data Stream) 複数命令 複数データ流 (MIMD, Multiple Instruction Multiple Data Stream)

65 並列計算機のメモリ型による分類 A) メモリアドレスを共有している : 互いのメモリがアクセス可能 1. 共有メモリ型 (SMP: Symmetric Multiprocessor, UMA: Uniform Memory Access) 講習会 :MPI 基礎 分散共有メモリ型 (DSM: Distributed Shared Memory) 共有 非対称メモリ型 (ccnuma Cache Coherent Non-Uniform Memory Access)

66 講習会 :MPI 基礎 80 並列計算機のメモリ型による分類 B) メモリアドレスは独立 : 互いのメモリはアクセス不可 3. 分散メモリ型 ( メッセージパッシング )

67 講習会 :MPI 基礎 81 並列プログラミングのモデル 実際の並列プログラムの挙動はMIMD アルゴリズムを考えるときは<SIMDが基本 > 複雑な挙動は人間には想定し難い

68 講習会 :MPI 基礎 82 並列プログラミングのモデル 多くの MIMD 上での並列プログラミングのモデル 1. SPMD(Single Program Multiple Data) 1 つの共通のプログラムが 並列処理開始時に 全プロセッサ上で起動する MPI( バージョン 1) のモデル 2. Master / Worker(Master / Slave) 1つのプロセス (Master) が 複数のプロセス (Worker) を管理 ( 生成 消去 ) する

69 講習会 :MPI 基礎 83 並列プログラムの種類 マルチプロセス MPI (Message Passing Interface) HPF (High Performance Fortran) 自動並列化 Fortran コンパイラ ユーザがデータ分割方法を明示的に記述 マルチスレッド Pthread (POSIX スレッド ) Solaris Thread (Sun Solaris OS 用 ) NT thread (Windows NT 系 Windows95 以降 ) スレッドの Fork( 分離 ) と Join( 融合 ) を明示的に記述 Java 言語仕様としてスレッドを規定 OpenMP ユーザが並列化指示行を記述 プロセスとスレッドの違い メモリを意識するかどうかの違い 別メモリは プロセス 同一メモリは スレッド マルチプロセスとマルチスレッドは共存可能 ハイブリッド MPI/OpenMP 実行

70 講習会 :MPI 基礎 84 並列処理の実行形態 (1) データ並列 データを分割することで並列化する データの操作 (= 演算 ) は同一となる データ並列の例 : 行列 - 行列積 SIMD の考え方と同じ æ1 ç ç4 ç è7 並列化 CPU0 CPU1 CPU2 æ1 ç ç4 ç è ö 6 9 ø 3ö 6 9 ø æ9 ç ç6 ç è3 æ9 ç ç6 ç è ö 4 1 ø 8 7ö ø = 全 CPU で共有 æ1*9 + 2*6 + 3*3 1*8+ 2*5 + 3*2 1*7 + 2*4 + 3*1ö ç ç4*9 + 5*6 + 6*3 4*8 + 5*5 + 6*2 4*7 + 5*4 + 6*1 ç è7*9 + 8*6 + 9*3 7*8 + 8*5 + 9*2 7*7 + 8*4 + 9*1ø æ1*9 + 2*6 + 3*3 1*8+ 2*5 + 3*2 1*7 + 2*4 + 3*1ö ç = ç4*9 + 5*6 + 6*3 4*8 + 5*5 + 6*2 4*7 + 5*4 + 6*1 ç è7*9 + 8*6 + 9*3 7*8 + 8*5 + 9*2 7*7 + 8*4 + 9*1ø 並列に計算 : 初期データは異なるが演算は同一

71 講習会 :MPI 基礎 85 並列処理の実行形態 (2) タスク並列 タスク ( ジョブ ) を分割することで並列化する データの操作 (= 演算 ) は異なるかもしれない タスク並列の例 : カレーを作る 仕事 1: 野菜を切る 仕事 2: 肉を切る 仕事 3: 水を沸騰させる 仕事 4: 野菜 肉を入れて煮込む 仕事 5: カレールゥを入れる 並列化 仕事 1 仕事 2 仕事 4 仕事 5 仕事 3 時間

72 講習会 :MPI 基礎 86 MPI の特徴 メッセージパッシング用のライブラリ規格の 1 つ メッセージパッシングのモデルである コンパイラの規格 特定のソフトウエアやライブラリを指すものではない! 分散メモリ型並列計算機で並列実行に向く 大規模計算が可能 1 プロセッサにおけるメモリサイズやファイルサイズの制約を打破可能 プロセッサ台数の多い並列システム (Massively Parallel Processing (MPP) システム ) を用いる実行に向く 1 プロセッサ換算で膨大な実行時間の計算を 短時間で処理可能 移植が容易 API(Application Programming Interface) の標準化 スケーラビリティ 性能が高い 通信処理をユーザが記述することによるアルゴリズムの最適化が可能 プログラミングが難しい ( 敷居が高い )

73 講習会 :MPI 基礎 87 MPI の経緯 ( これまで ) MPI フォーラム ( が仕様策定 1994 年 5 月 1.0 版 (MPI-1) 1995 年 6 月 1.1 版 1997 年 7 月 1.2 版 および 2.0 版 (MPI-2) 2008 年 5 月 1.3 版 2008 年 6 月 2.1 版 2009 年 9 月 2.2 版 日本語版 MPI-2 では 以下を強化 : 並列 I/O C++ Fortran 90 用インターフェース 動的プロセス生成 / 消滅 主に 並列探索処理などの用途

74 講習会 :MPI 基礎 88 MPI の経緯 MPI-3.1 MPI 年 9 月 MPI 年 6 月 以下のページで現状 ドキュメントを公開中 注目すべき機能 ノン ブロッキング集団通信機能 (MPI_IAREDUCE など ) 高性能な片方向通信 (RMA Remote Memory Access) Fortran2008 対応 など

75 講習会 :MPI 基礎 89 MPI の経緯 MPI-4.0 策定中 以下のページで経緯 ドキュメントを公開 検討されている機能 ハイブリッドプログラミングへの対応 MPI アプリケーションの耐故障性 (Fault Tolerance, FT) いくつかのアイデアを検討中 Active Messages ( メッセージ通信のプロトコル ) 計算と通信のオーバラップ 最低限の同期を用いた非同期通信 低いオーバーヘッド パイプライン転送 バッファリングなしで インタラプトハンドラで動く Stream Messaging 新プロファイル インターフェース

76 講習会 :MPI 基礎 90 MPI の実装 MPICH( エム ピッチ ) 米国アルゴンヌ国立研究所が開発 MVAPICH ( エムヴァピッチ ) 米国オハイオ州立大学で開発 MPICH をベース InfiniBand 向けの優れた実装 OpenMPI オープンソース ベンダ MPI 大抵 上のどれかがベースになっている例 : 富士通 京 FX10 用の MPI: Open-MPI ベース Intel MPI: MPICH MVAPICH ベース 注意点 : メーカ独自機能拡張がなされていることがある

77 講習会 :MPI 基礎 91 MPI による通信 郵便物の郵送に同じ 郵送に必要な情報 : 1. 自分の住所 送り先の住所 2. 中に入っているものはどこにあるか 3. 中に入っているものの分類 4. 中に入っているものの量 5. ( 荷物を複数同時に送る場合の ) 認識方法 ( タグ ) MPIでは : 1. 自分の認識 ID および 送り先の認識 ID 2. データ格納先のアドレス 3. データ型 4. データ量 5. タグ番号

78 講習会 :MPI 基礎 92 MPI 関数 システム関数 MPI_Init; MPI_Comm_rank; MPI_Comm_size; MPI_Finalize; 1 対 1 通信関数 ブロッキング型 MPI_Send; MPI_Recv; ノンブロッキング型 MPI_Isend; MPI_Irecv; 1 対全通信関数 MPI_Bcast 集団通信関数 MPI_Reduce; MPI_Allreduce; MPI_Barrier; 時間計測関数 MPI_Wtime

79 講習会 :MPI 基礎 93 コミュニケータ MPI_COMM_WORD は コミュニケータとよばれる概念を保存する変数 コミュニケータは 操作を行う対象のプロセッサ群を定める 初期状態では 0 番 ~numprocs 1 番までのプロセッサが 1 つのコミュニケータに割り当てられる この名前が MPI_COMM_WORD プロセッサ群を分割したい場合 MPI_Comm_split 関数を利用 メッセージを 一部のプロセッサ群に放送するときに利用 マルチキャスト で利用

80 講習会 :MPI 基礎 94 性能評価指標 並列化の尺度

81 講習会 :MPI 基礎 95 性能評価指標 - 台数効果 台数効果 式 : T S : 逐次の実行時間 :P 台での実行時間 P 台用いて のとき 理想的な (ideal) 速度向上 P 台用いてのとき スーパリニア スピードアップ 主な原因は 並列化により データアクセスが局所化されて キャッシュヒット率が向上することによる高速化 並列化効率 式 : 飽和性能 速度向上の限界 S P = TS / TP (0 S p) S P = P S P > P Saturation さちる T P E P = SP / P 100 (0 E p) [%] P

82 講習会 :MPI 基礎 96 アムダールの法則 逐次実行時間を K とする そのうち 並列化ができる割合を α とする このとき 台数効果は以下のようになる S P = K /( Ka / P + K(1 -a)) = 1/( a / P + (1 -a)) = 1/( a(1/ P -1) + 1) 上記の式から たとえ無限大の数のプロセッサを使っても (P ) 台数効果は 高々 1/(1-α) である ( アムダールの法則 ) 全体の 90% が並列化できたとしても 無限大の数のプロセッサをつかっても 1/(1-0.9) = 10 倍にしかならない! 高性能を達成するためには 少しでも並列化効率を上げる実装をすることがとても重要である

83 講習会 :MPI 基礎 97 アムダールの法則の直観例 逐次実行 並列化できない部分 (1 ブロック ) 並列化できる部分 (8 ブロック ) =88.8% が並列化可能 並列実行 (4 並列 ) 9/3=3 倍 並列実行 (8 並列 ) 9/2=4.5 倍 6 倍

84 講習会 :MPI 基礎 98 略語と MPI 用語 MPI は プロセス 間の通信を行います プロセスは ( 普通は ) プロセッサ ( もしくは コア ) に一対一で割り当てられます 今後 MPI プロセス と書くのは長いので ここでは PE (Processer Elements の略 ) と書きます ただし用語として PE は現在はあまり使われていません ランク (Rank) 各 MPI プロセス の 識別番号 のこと 通常 MPI では MPI_Comm_rank 関数で設定される変数 ( サンプルプログラムでは myid) に 0~ 全 PE 数 -1 の数値が入る 世の中の全 MPI プロセス数を知るには MPI_Comm_size 関数を使う ( サンプルプログラムでは numprocs に この数値が入る )

85 講習会 :MPI 基礎 99 基本的な MPI 関数 送信 受信のためのインタフェース

86 講習会 :MPI 基礎 100 C 言語インターフェースと Fortran インターフェースの違い C 版は 整数変数 ierr が戻り値 ierr = MPI_Xxxx(.); Fortran 版は 最後に整数変数 ierr が引数 call MPI_XXXX(., ierr) システム用配列の確保の仕方 C 言語 MPI_Status istatus; Fortran 言語 integer istatus(mpi_status_size)

87 講習会 :MPI 基礎 101 C 言語インターフェースと Fortran インターフェースの違い MPI における データ型の指定 C 言語 MPI_CHAR ( 文字型 ) MPI_INT ( 整数型 ) MPI_FOAT ( 実数型 ) MPI_DOUBE( 倍精度実数型 ) Fortran 言語 MPI_CHARACTER ( 文字型 ) MPI_INTEGER ( 整数型 ) MPI_REA ( 実数型 ) MPI_DOUBE_PRECISION( 倍精度実数型 ) MPI_COMPEX( 複素数型 ) 以降は C 言語インタフェースで説明する

88 講習会 :MPI 基礎 102 基礎的な MPI 関数 MPI_Recv (1/2) ierr = MPI_Recv(recvbuf, icount, idatatype, isource, itag, icomm, istatus); recvbuf : 受信領域の先頭番地を指定する icount : 整数型 受信領域のデータ要素数を指定する idatatype : 整数型 受信領域のデータの型を指定する MPI_CHAR ( 文字型 ) MPI_INT ( 整数型 ) MPI_FOAT ( 実数型 ) MPI_DOUBE( 倍精度実数型 ) isource : 整数型 受信したいメッセージを送信する PE のランクを指定する 任意の PE から受信したいときは MPI_ANY_SOURCE を指定する

89 講習会 :MPI 基礎 103 基礎的な MPI 関数 MPI_Recv (2/2) itag : 整数型 受信したいメッセージに付いているタグの値を指定 任意のタグ値のメッセージを受信したいときは MPI_ANY_TAG を指定 icomm : 整数型 PE 集団を認識する番号であるコミュニケータを指定 通常では MPI_COMM_WORD を指定すればよい istatus : MPI_Status 型 ( 整数型の配列 ) 受信状況に関する情報が入る かならず専用の型宣言をした配列を確保すること 要素数が MPI_STATUS_SIZE の整数配列が宣言される 受信したメッセージの送信元のランクが istatus[mpi_source] タグが istatus[mpi_tag] に代入される C 言語 : MPI_Status istatus; Fortran 言語 : integer istatus(mpi_status_size) ierr( 戻り値 ) : 整数型 エラーコードが入る

90 講習会 :MPI 基礎 104 基礎的な MPI 関数 MPI_Send ierr = MPI_Send(sendbuf, icount, idatatype, idest, itag, icomm); sendbuf : 送信領域の先頭番地を指定 icount : 整数型 送信領域のデータ要素数を指定 idatatype : 整数型 送信領域のデータの型を指定 idest : 整数型 送信したい PE の icomm 内でのランクを指定 itag : 整数型 受信したいメッセージに付けられたタグの値を指定 icomm : 整数型 プロセッサー集団を認識する番号であるコミュニケータを指定 ierr ( 戻り値 ) : 整数型 エラーコードが入る

91 講習会 :MPI 基礎 105 Send-Recv の概念 (1 対 1 通信 ) PE0 PE1 PE2 PE3 MPI_Send MPI_Recv

92 講習会 :MPI 基礎 106 基礎的な MPI 関数 MPI_Bcast ierr = MPI_Bcast(sendbuf, icount, idatatype, iroot, icomm); sendbuf : 送信および受信領域の先頭番地を指定する icount : 整数型 送信領域のデータ要素数を指定する idatatype : 整数型 送信領域のデータの型を指定する iroot : 整数型 送信したいメッセージがある PE の番号を指定する 全 PE で同じ値を指定する必要がある icomm : 整数型 PE 集団を認識する番号であるコミュニケータを指定する ierr ( 戻り値 ) : 整数型 エラーコードが入る

93 講習会 :MPI 基礎 107 MPI_Bcast の概念 ( 集団通信 ) PE0 PE1 PE2 PE3 MPI_Bcast() MPI_Bcast() MPI_Bcast() MPI_Bcast() iroot 全 PE が同じように関数を呼ぶこと!!

94 講習会 :MPI 基礎 108 基本演算 逐次処理では データ構造 が重要 並列処理においては データ分散方法 が重要になる! 1. 各 PE の 演算負荷 を均等にする ロード バランシング : 並列処理の基本操作の一つ 粒度調整 2. 各 PE の 利用メモリ量 を均等にする 3. 演算に伴う通信時間を短縮する 4. 各 PE の データ アクセスパターン を高速な方式にする (= 逐次処理におけるデータ構造と同じ ) 行列データの分散方法 < 次元レベル >: 1 次元分散方式 2 次元分散方式 < 分割レベル >: ブロック分割方式 サイクリック ( 循環 ) 分割方式

95 講習会 :MPI 基礎 次元分散 N/4 行 N/4 行 N/4 行 N/4 行 1 行 PE=0 PE=1 PE=2 PE=3 N 列 ( 行方向 ) ブロック分割方式 (Block, *) 分散方式 ( 行方向 ) サイクリック分割方式 (Cyclic, *) 分散方式 2 行 ( 行方向 ) ブロック サイクリック分割方式 (Cyclic(2), *) 分散方式 この例の 2 : < ブロック幅 > とよぶ

96 講習会 :MPI 基礎 110 N/2 N/2 2 次元分散 N/2 N/2 PE=0 PE=2 PE=1 PE= ブロック ブロック分割方式 (Block, Block) 分散方式 二次元ブロック サイクリック分割方式 (Cyclic(2), Cyclic(2)) 分散方式 サイクリック サイクリック分割方式 (Cyclic, Cyclic) 分散方式

97 講習会 :MPI 基礎 111 ベクトルどうしの演算 以下の演算 z = a x + y ここで α はスカラ z x y はベクトル どのようなデータ分散方式でも並列処理が可能 ただし スカラ α は全 PE で所有する ベクトルはO(n) のメモリ領域が必要なのに対し スカラは O(1) のメモリ領域で大丈夫 スカラメモリ領域は無視可能 計算量 :O(N/P) あまり面白くない = + z α x y

98 講習会 :MPI 基礎 112 行列とベクトルの積 < 行方式 > と < 列方式 > がある <データ分散方式 >と< 方式 > 組のみ合わせがあり 少し面白い = = 1 2 for(i=0;i<n;i++){ y[i]=0.0; for(j=0;j<n;j++){ y[i] += a[i][j]*x[j]; } } < 行方式 >: 自然な実装 C 言語向き for(j=0; j<n; j++) y[j]=0.0; for(j=0; j<n; j++) { for (i=0; i<n; i++) { y[i] += a[i][j]*x[j]; } } < 列方式 >: Fortran 言語向き

99 行列とベクトルの積 < 行方式の場合 > < 行方向分散方式 > : 行方式に向く分散方式 PE=0 PE=1 PE=2 PE=3 講習会 :MPI 基礎 113 = PE=0 PE=1 PE=2 PE=3 右辺ベクトルを MPI_Allgather 関数を利用し 全 PE で所有する < 列方向分散方式 > : ベクトルの要素すべてがほしいときに向く 各 PE 内で行列ベクトル積を行う = 各 PE 内で行列 - ベクトル積を行う MPI_Reduce 関数で総和を求める ( ある 1PE にベクトルすべてが集まる )

100 講習会 :MPI 基礎 114 行列とベクトルの積 < 列方式の場合 > < 行方向分散方式 > : 無駄が多く使われない PE=0 PE=0 PE=1 PE=2 = = PE=1 PE=2 PE=3 PE=3 右辺ベクトルを MPI_Allgather 関数を利用して 全 PE で所有する < 列方向分散方式 > : 列方式に向く分散方式 結果を MPI_Reduce 関数により総和を求める = 各 PE 内で行列 - ベクトル積を行う MPI_Reduce 関数で総和を求める ( ある 1PE にベクトルすべてが集まる )

101 講習会 :MPI 基礎 115 リダクション演算 < 操作 > によって < 次元 > を減少 ( リダクション ) させる処理 例 : 内積演算ベクトル (n 次元空間 ) スカラ (1 次元空間 ) リダクション演算は 通信と計算を必要とする 集団通信演算 (collective communication operation) と呼ばれる 演算結果の持ち方の違いで 2 種のインタフェースが存在する

102 講習会 :MPI 基礎 116 リダクション演算 演算結果に対する所有 PE の違い MPI_Reduce 関数 リダクション演算の結果を ある一つの PE に所有させる PE0 PE1 PE2 操作 PE0 MPI_Allreduce 関数 リダクション演算の結果を 全ての PE に所有させる PE0 操作 PE0 PE1 PE2 PE1 PE2

103 講習会 :MPI 基礎 117 基礎的な MPI 関数 MPI_Reduce ierr = MPI_Reduce(sendbuf, recvbuf, icount, idatatype, iop, iroot, icomm); sendbuf : 送信領域の先頭番地を指定する recvbuf : 受信領域の先頭番地を指定する iroot で指定した PE のみで書き込みがなされる 送信領域と受信領域は 同一であってはならない すなわち 異なる配列を確保しなくてはならない icount : 整数型 送信領域のデータ要素数を指定する idatatype : 整数型 送信領域のデータの型を指定する (Fortran)< 最小 / 最大値と位置 > を返す演算を指定する場合は MPI_2INTEGER( 整数型 ) MPI_2REA ( 単精度型 ) MPI_2DOUBE_PRECISION( 倍精度型 ) を指定する

104 講習会 :MPI 基礎 118 基礎的な MPI 関数 MPI_Reduce iop : 整数型 演算の種類を指定する MPI_SUM ( 総和 ) MPI_PROD ( 積 ) MPI_MAX ( 最大 ) MPI_MIN ( 最小 ) MPI_MAXOC ( 最大とその位置 ) MPI_MINOC ( 最小とその位置 ) など iroot : 整数型 結果を受け取る PE の icomm 内でのランクを指定する 全ての icomm 内の PE で同じ値を指定する必要がある icomm : 整数型 PE 集団を認識する番号であるコミュニケータを指定する ierr : 整数型 エラーコードが入る

105 講習会 :MPI 基礎 119 MPI_Reduce の概念 ( 集団通信 ) PE0 PE1 PE2 PE3 MPI_Reduce() MPI_Reduce() MPI_Reduce() MPI_Reduce() iroot データ1 データ2 データ3 データ4 iop( 指定された演算 )

106 講習会 :MPI 基礎 120 MPI_Reduce による 2 リスト処理例 (MPI_2DOUBE_PRECISION と MPI_MAXOC) PE0 PE1 PE2 PE3 MPI_Reduce() MPI_Reduce() MPI_Reduce() MPI_Reduce() iroot MPI_MAXOC U 分解の枢軸選択処理

107 講習会 :MPI 基礎 121 基礎的な MPI 関数 MPI_Allreduce ierr = MPI_Allreduce(sendbuf, recvbuf, icount, idatatype, iop, icomm); sendbuf : 送信領域の先頭番地を指定する recvbuf : 受信領域の先頭番地を指定する iroot で指定した PE のみで書き込みがなされる 送信領域と受信領域は 同一であってはならない すなわち 異なる配列を確保しなくてはならない icount : 整数型 送信領域のデータ要素数を指定する idatatype : 整数型 送信領域のデータの型を指定する 最小値や最大値と位置を返す演算を指定する場合は MPI_2INT( 整数型 ) MPI_2FOAT ( 単精度型 ) MPI_2DOUBE( 倍精度型 ) を指定する

108 講習会 :MPI 基礎 122 基礎的な MPI 関数 MPI_Allreduce iop : 整数型 演算の種類を指定する MPI_SUM ( 総和 ) MPI_PROD ( 積 ) MPI_MAX ( 最大 ) MPI_MIN ( 最小 ) MPI_MAXOC ( 最大と位置 ) MPI_MINOC ( 最小と位置 ) など icomm : 整数型 PE 集団を認識する番号であるコミュニケータを指定する ierr : 整数型 エラーコードが入る

109 講習会 :MPI 基礎 123 MPI_Allreduce の概念 ( 集団通信 ) PE0 PE1 PE2 PE3 MPI_Allreduce() MPI_Allreduce() MPI_Allreduce() MPI_Allreduce() データ0 データ1 データ2 データ3 iop( 指定された演算 ) 演算済みデータの放送

110 講習会 :MPI 基礎 124 リダクション演算 性能について リダクション演算は 1 対 1 通信に比べ遅い プログラム中で多用すべきでない! MPI_Allreduce は MPI_Reduce に比べ遅い MPI_Allreduce は 放送処理が入る なるべく MPI_Reduce を使う

111 講習会 :MPI 基礎 125 行列の転置 行列 A A が (Block,*) 分散されているとする T A 行列の転置行列を作るには MPIでは次の2 通りの関数を用いる MPI_Gather 関数 a bc a b c 集めるメッセージサイズが各 PE で均一のとき使う MPI_Scatter 関数 集めるサイズが各 PE で均一でないときは : MPI_GatherV 関数 MPI_ScatterV 関数 a b c a bc

112 講習会 :MPI 基礎 126 基礎的な MPI 関数 MPI_Gather ierr = MPI_Gather (sendbuf, isendcount, isendtype, recvbuf, irecvcount, irecvtype, iroot, icomm); sendbuf : isendcount: 送信領域の先頭番地を指定する 整数型 送信領域のデータ要素数を指定する isendtype : 整数型 送信領域のデータの型を指定する recvbuf : 受信領域の先頭番地を指定する iroot で指定したPEのみで書き込みがなされる なお原則として 送信領域と受信領域は 同一であってはならない すなわち 異なる配列を確保しなくてはならない irecvcount: 整数型 受信領域のデータ要素数を指定する この要素数は 1PE 当たりの送信データ数を指定すること MPI_Gather 関数では各 PE で異なる数のデータを収集することはできないので 同じ値を指定すること

113 講習会 :MPI 基礎 127 基礎的な MPI 関数 MPI_Gather irecvtype : 整数型 受信領域のデータ型を指定する iroot : 整数型 収集データを受け取る PE の icomm 内でのランクを指定する 全ての icomm 内の PE で同じ値を指定する必要がある icomm : 整数型 PE 集団を認識する番号であるコミュニケータを指定する ierr : 整数型 エラーコードが入る

114 講習会 :MPI 基礎 128 MPI_Gather の概念 ( 集団通信 ) PE0 PE1 PE2 PE3 MPI_Gather() MPI_Gather() MPI_Gather() MPI_Gather() iroot データA データB データC データD 収集処理 データA データB データC データD

115 講習会 :MPI 基礎 129 基礎的な MPI 関数 MPI_Scatter ierr = MPI_Scatter ( sendbuf, isendcount, isendtype, recvbuf, irecvcount, irecvtype, iroot, icomm); sendbuf : 送信領域の先頭番地を指定する isendcount: 整数型 送信領域のデータ要素数を指定する この要素数は 1PE 当たりに送られる送信データ数を指定すること MPI_Scatter 関数では各 PEで異なる数のデータを分散することはできないので 同じ値を指定すること isendtype : 整数型 送信領域のデータの型を指定する iroot で指定したPEのみ有効となる recvbuf : 受信領域の先頭番地を指定する なお原則として 送信領域と受信領域は 同一であってはならない すなわち 異なる配列を確保しなくてはならない irecvcount: 整数型 受信領域のデータ要素数を指定する

116 講習会 :MPI 基礎 130 基礎的な MPI 関数 MPI_Scatter irecvtype : 整数型 受信領域のデータ型を指定する iroot : 整数型 収集データを受け取る PE の icomm 内でのランクを指定する 全ての icomm 内の PE で同じ値を指定する必要がある icomm : 整数型 PE 集団を認識する番号であるコミュニケータを指定する ierr : 整数型 エラーコードが入る

117 講習会 :MPI 基礎 131 MPI_Scatter の概念 ( 集団通信 ) PE0 PE1 PE2 PE3 MPI_Scatter() MPI_Scatter() MPI_Scatter() MPI_Scatter() iroot データA データB データC データD 分配処理 データ A データ B データ C データ D

118 講習会 :MPI 基礎 132 MPI_Scatter の概念 ( 集団通信 ) PE0 PE1 PE2 PE3 MPI_Scatter() MPI_Scatter() MPI_Scatter() MPI_Scatter() iroot データA データB データC データD 分配処理 データ A データ B データ C データ D

119 講習会 :MPI 基礎 133 参考文献 1. MPI 並列プログラミング P. パチェコ著 / 秋葉博訳 2. 並列プログラミング虎の巻 MPI 版 青山幸也著 理化学研究所情報基盤センタ ( ) 3. Message Passing Interface Forum ( ) 4. MPI-Jメーリングリスト ( ) 5. 並列コンピュータ工学 富田眞治著 昭晃堂 (1996)

120 講習会 :MPI 基礎 134 MPI プログラム実習 Ⅰ( 演習 ) 東京大学情報基盤センター准教授塙敏博

121 講習会 :MPI 基礎 135 実習課題

122 講習会 :MPI 基礎 136 サンプルプログラムの説明 Hello/ 並列版 Hello プログラム hello-pure.bash, hello-hy??.bash : ジョブスクリプトファイル Cpi/ 円周率計算プログラム cpi-pure.bash ジョブスクリプトファイル Wa1/ 逐次転送方式による総和演算 wa1-pure.bash ジョブスクリプトファイル Wa2/ 二分木通信方式による総和演算 wa2-pure.bash ジョブスクリプトファイル Cpi_m/ 円周率計算プログラムに時間計測ルーチンを追加したもの cpi_m-pure.bash ジョブスクリプトファイル

123 講習会 :MPI 基礎 137 総和演算プログラム ( 逐次転送方式 ) 各プロセスが所有するデータを 全プロセスで加算し あるプロセス 1 つが結果を所有する演算を考える 素朴な方法 ( 逐次転送方式 ) 1. (0 番でなければ ) 左隣のプロセスからデータを受信する ; 2. 左隣のプロセスからデータが来ていたら ; 1. 受信する ; 2. < 自分のデータ>と< 受信データ>を加算する ; 3. (191 番でなければ ) 右隣のプロセスに<2の加算した結果を> 送信する ; 4. 処理を終了する ; 実装上の注意 左隣りとは (myid-1) のIDをもつプロセス 右隣りとは (myid+1) のIDをもつプロセス myid=0のプロセスは 左隣りはないので 受信しない myid=p-1のプロセスは 右隣りはないので 送信しない

124 講習会 :MPI 基礎 138 逐次転送方式 ( バケツリレー方式 ) による加算 所有データ 所有データ所有データ所有データ CPU0 CPU1 CPU2 CPU3 送信送信送信 = = = 6 最終結果

125 講習会 :MPI 基礎 対 1 通信利用例 ( 逐次転送方式 C 言語 ) void main(int argc, char* argv[]) { MPI_Status istatus;. dsendbuf = myid; drecvbuf = 0.0; if (myid!= 0) { ierr = MPI_Recv(&drecvbuf, 1, MPI_DOUBE, myid-1, 0, MPI_COMM_WORD, &istatus); } dsendbuf = dsendbuf + drecvbuf; if (myid!= nprocs-1) { ierr = MPI_Send(&dsendbuf, 1, MPI_DOUBE, myid+1, 0, MPI_COMM_WORD); } if (myid == nprocs-1) printf ("Total = %4.2lf n", dsendbuf);. } 受信用システム配列の確保 自分より一つ少ない ID 番号 (myid-1) から double 型データ 1 つを受信し drecvbuf 変数に代入 自分より一つ多い ID 番号 (myid+1) に dsendbuf 変数に入っている double 型データ 1 つを送信

126 講習会 :MPI 基礎 140 & & 1 対 1 通信利用例 ( 逐次転送方式 Fortran 言語 ) program main integer istatus(mpi_status_size). dsendbuf = myid drecvbuf = 0.0 if (myid.ne. 0) then call MPI_RECV(drecvbuf, 1, MPI_DOUBE_PRECISION, myid-1, 0, MPI_COMM_WORD, istatus, ierr) endif dsendbuf = dsendbuf + drecvbuf if (myid.ne. numprocs-1) then call MPI_SEND(dsendbuf, 1, MPI_DOUBE_PRECISION, myid+1, 0, MPI_COMM_WORD, ierr) endif if (myid.eq. numprocs-1) then print *, "Total = ", dsendbuf endif. stop end 受信用システム配列の確保 自分より一つ少ない ID 番号 (myid-1) から double 型データ 1 つを受信し drecvbuf 変数に代入 自分より一つ多い ID 番号 (myid+1) に dsendbuf 変数に入っている double 型データ 1 つを送信

127 講習会 :MPI 基礎 141 総和演算プログラム ( 二分木通信方式 ) 二分木通信方式 1. k = 1; 2. for (i=0; i < log2(nprocs); i++) 3. if ( (myid & k) == k) (myid k) 番プロセスからデータを受信 ; 自分のデータと 受信データを加算する ; k = k * 2; 4. else (myid + k) 番プロセスに データを転送する ; 処理を終了する ;

128 講習会 :MPI 基礎 142 総和演算プログラム ( 二分木通信方式 ) 3 段目 =log2(8) 段目 段目 段目

129 講習会 :MPI 基礎 143 総和演算プログラム ( 二分木通信方式 ) 実装上の工夫 要点 : プロセス番号の 2 進数表記の情報を利用する 第 i 段において 受信するプロセスの条件は 以下で書ける : myid & k が k と一致 ここで k = 2^(i-1) つまり プロセス番号の 2 進数表記で右から i 番目のビットが立っているプロセスが 送信することにする また 送信元のプロセス番号は 以下で書ける : myid + k つまり 通信が成立するプロセス番号の間隔は 2^(i-1) 二分木なので 送信プロセスについては 上記の逆が成り立つ

130 講習会 :MPI 基礎 144 総和演算プログラム ( 二分木通信方式 ) 逐次転送方式の通信回数 明らかに nprocs-1 回 二分木通信方式の通信回数 見積もりの前提 各段で行われる通信は 完全に並列で行われる ( 通信の衝突は発生しない ) 段数の分の通信回数となる つまり log2(nprocs) 回 両者の通信回数の比較 プロセッサ台数が増すと 通信回数の差 (= 実行時間 ) がとても大きくなる 1024 プロセス構成では 1023 回対 10 回! でも 必ずしも二分木通信方式がよいとは限らない ( 通信衝突が多発する可能性 )

131 講習会 :MPI 基礎 145 性能プロファイラ

132 講習会 :MPI 基礎 146 性能プロファイラ Reedbush-U Intel VTune Amplifier PAPI (Performance API) Web ポータルから 利用の手引き チューニングガイド性能評価ツール編 を参照してください

133 講習会 :MPI 基礎 147 演習課題 1. 逐次転送方式のプログラムを実行 Wa1 のプログラム 2. 二分木通信方式のプログラムを実行 Wa2 のプログラム 3. 時間計測プログラムを実行 Cpi_m のプログラム 4. プロセス数を変化させて サンプルプログラムを実行 5. Hello プログラムを 以下のように改良 MPI_Send を用いて プロセス 0 から Char 型のデータ Hello World!! を その他のプロセスに送信する その他のプロセスでは MPI_Recv で受信して表示する

134 講習会 :MPI 基礎 148 MPI プログラミング実習 Ⅱ ( 演習 ) 東京大学情報基盤センター准教授塙敏博

135 講習会 :MPI 基礎 149 講義の流れ 1. 行列 - 行列とは (30 分 ) 2. 行列 - 行列積のサンプルプログラムの実行 3. サンプルプログラムの説明 4. 演習課題 (1): 簡単なもの

136 講習会 :MPI 基礎 150 行列 - 行列積の演習の流れ 演習課題 (Ⅱ) 簡単なもの (30 分程度で並列化 ) 通信関数が一切不要 演習課題 (Ⅲ) ちょっと難しい (1 時間以上で並列化 ) 1 対 1 通信関数が必要 演習課題 (Ⅱ) が早く終わってしまった方は やってみてください

137 講習会 :MPI 基礎 151 行列 - 行列積とは 実装により性能向上が見込める基本演算

138 講習会 :MPI 基礎 152 行列の積 行列積 C = A B は コンパイラや計算機のベンチマークに使われることが多い 理由 1: 実装方式の違いで性能に大きな差がでる 理由 2: 手ごろな問題である ( プログラムし易い ) 理由 3: 科学技術計算の特徴がよく出ている 1. 非常に長い < 連続アクセス > がある 2. キャッシュに乗り切らない < 大規模なデータ > に対する演算である 3. メモリバンド幅を食う演算 ( メモリ インテンシブ ) な処理である

139 講習会 :MPI 基礎 153 行列積コード例 (C 言語 ) l コード例 for (i=0; i<n; i++) for (j=0; j<n; j++) for (k=0; k<n; k++) C[i][j] += A[i][k] *B[k][j]; j k j C A B i i k

140 講習会 :MPI 基礎 154 行列の積 n c = å a b ( i, j = 行列積 ij ik kj k = 1 の実装法は 次の二通りが知られている : 1,2,..., n) 1. ループ交換法 連続アクセスの方向を変える目的で 行列 - 行列積を実現する 3 重ループの順番を交換する 2. ブロック化 ( タイリング ) 法 キャッシュにあるデータを再利用する目的で あるまとまった行列の部分データを 何度もアクセスするように実装する

141 講習会 :MPI 基礎 155 行列の積 (C 言語 ) ループ交換法 行列積のコードは 以下のような 3 重ループになる for(i=0; i<n; i++) { for(j=0; j<n; j++) { for(k=0; k<n; k++) { c[ i ][ j ] = c[ i ][ j ] + a[ i ][ k ] * b[ k][ j ]; } } } 最内部の演算は 外側の 3 ループを交換しても 計算結果が変わらない 6 通りの実現の方法がある

142 講習会 :MPI 基礎 156 行列の積 (Fortran 言語 ) ループ交換法 行列積のコードは 以下のような 3 重ループになる do i=1, n do j=1, n do k=1, n c( i, j ) = c( i, j) + a( i, k ) * b( k, j ) enddo enddo enddo 最内部の演算は 外側の 3 ループを交換しても 計算結果が変わらない 6 通りの実現の方法がある

143 講習会 :MPI 基礎 157 行列の積 行列データへのアクセスパターンから 以下の 3 種類に分類できる 1. 内積形式 (inner-product form) 最内ループのアクセスパターンが < ベクトルの内積 > と同等 2. 外積形式 (outer-product form) 最内ループのアクセスパターンが < ベクトルの外積 > と同等 3. 中間積形式 (middle-product form) 内積と外積の中間

144 講習会 :MPI 基礎 158 行列の積 (C 言語 ) 内積形式 (inner-product form) ijk, jik ループによる実現 for (i=0; i<n; i++) { for (j=0; j<n; j++) { dc = 0.0; for (k=0; k<n; k++){ dc = dc + A[ i ][ k ] * B[ k ][ j ]; } C[ i ][ j ]= dc; } } 以降 最外のループからの変数の順番で実装法を呼ぶ たとえば上記のコードは <ijk ループ > A B. 行方向と列方向のアクセスあり 行方向 列方向格納言語の両方で性能低下要因解決法 : A, B どちらか一方を転置しておく

145 講習会 :MPI 基礎 159 行列の積 (Fortran 言語 ) 内積形式 (inner-product form) ijk, jik ループによる実現 do i=1, n do j=1, n dc = 0.0d0 do k=1, n dc = dc + A( i, k ) * B( k, j ) enddo C( i, j ) = dc enddo enddo 以降 最外のループからの変数の順番で実装法を呼ぶ たとえば上記のコードは <ijk ループ > A B. 行方向と列方向のアクセスあり 行方向 列方向格納言語の両方で性能低下要因解決法 : A, B どちらか一方を転置しておく

146 講習会 :MPI 基礎 160 行列の積 (C 言語 ) 外積形式 (outer-product form) kij, kji ループによる実現 for (i=0; i<n; i++) { for (j=0; j<n; j++) { C[ i ][ j ] = 0.0; } } for (k=0; k<n; k++) { for (j=0; j<n; j++) { db = B[ k ][ j ]; for (i=0; i<n; i++) { C[ i ][ j ]= C[ i ][ j ]+ A[ i ][ k ]* db; } } } A B. kji ループでは列方向アクセスがメイン 列方向格納言語向き (Fortran 言語 )

147 講習会 :MPI 基礎 161 行列の積 (Fortran 言語 ) 外積形式 (outer-product form) kij, kji ループによる実現 do i=1, n do j=1, n C( i, j ) = 0.0d0 enddo enddo do k=1, n do j=1, n db = B( k, j ) do i=1, n C( i, j ) = C( i, j )+ A( i, k ) * db enddo enddo enddo A B. kji ループでは列方向アクセスがメイン 列方向格納言語向き (Fortran 言語 )

148 講習会 :MPI 基礎 162 行列の積 (C 言語 ) 中間積形式 (middle-product form) ikj, jki ループによる実現 for (j=0; j<n; j++) { for (i=0; i<n; i++) { C[ i ][ j ] = 0.0; } for (k=0; k<n; k++) { db = B[ k ][ j ]; for (i=0; i<n; i++) { C[ i ][ j ] = C[ i ][ j ] + A[ i ][ k ] * db; } } } A B jki ループでは全て列方向アクセス 列方向格納言語に最も向いている (Fortran 言語 )..

149 講習会 :MPI 基礎 163 行列の積 (Fortran 言語 ) 中間積形式 (middle-product form) ikj, jki ループによる実現 do j=1, n do i=1, n C( i, j ) = 0.0d0 enddo do k=1, n db = B( k, j ) do i=1, n C( i, j ) = C( i, j ) + A( i, k ) * db enddo enddo enddo A B jki ループでは全て列方向アクセス 列方向格納言語に最も向いている (Fortran 言語 )..

150 講習会 :MPI 基礎 164 行列の積 小行列ごとの計算に分けて ( 配列を用意し ) 計算 ( ブロック化 タイリング : コンパイラ用語 ) 以下の計算 n ~ n C ij = å k= 1 ~ A ik ~ B ~ C ~ = ij i 1 kj A A ~ i p ~ B 1 B ~ n / j p j p n / p

151 講習会 :MPI 基礎 165 行列の積 各小行列をキャッシュに収まるサイズにする 1. ブロック単位で高速な演算が行える 2. 並列アルゴリズムの変種が構築できる 並列行列積アルゴリズムは データ通信の形態から 以下の 2 種に分類可能 : 1. セミ シストリック方式 行列 A B の小行列の一部をデータ移動 (Cannon のアルゴリズム ) 2. フル シストリック方式 行列 A B の小行列のすべてをデータ移動 (Fox のアルゴリズム )

152 講習会 :MPI 基礎 166 サンプルプログラムの実行 ( 行列 - 行列積 )

153 講習会 :MPI 基礎 167 行列 - 行列積のサンプルプログラムの注意点 C 言語版 /Fortran 言語版の共通ファイル名 Mat-Mat-rb.tar ジョブスクリプトファイル mat-mat.bash 中のキュー名を u-lecture から u-tutorial に変更してから qsub してください u-lecture : 実習時間外のキュー u-tutorial : 実習時間内のキュー

154 講習会 :MPI 基礎 168 行列 - 行列積のサンプルプログラムの実行 以下のコマンドを実行する $ cp /lustre/gt00/z30105/mat-mat-rb.tar./ $ tar xvf Mat-Mat-rb.tar $ cd Mat-Mat 以下のどちらかを実行 $ cd C : C 言語を使う人 $ cd F : Fortran 言語を使う人 以下共通 $ make $ qsub mat-mat.bash 実行が終了したら 以下を実行する $ cat mat-mat.bash.oxxxxxx

155 講習会 :MPI 基礎 169 行列 - 行列積のサンプルプログラムの実行 (C 言語 ) 以下のような結果が見えれば成功 N = 1000 Mat-Mat time = [sec.] [MFOPS] OK! 1 コアのみで 20GFOPS の性能

156 講習会 :MPI 基礎 170 行列 - 行列積のサンプルプログラムの実行 (Fortran 言語 ) 以下のような結果が見えれば成功 NN = 1000 Mat-Mat time[sec.] = MFOPS = OK! 1 コアのみで 20GFOPS の性能

157 講習会 :MPI 基礎 171 サンプルプログラムの説明 #define N 1000 の 数字を変更すると 行列サイズが変更できます #define DEBUG 0 の 0 を 1 にすると 行列- 行列積の演算結果が検証できます MyMatMat 関数の仕様 Double 型 N N 行列 A と B の行列積をおこない D ouble 型 N N 行列 C にその結果が入ります

158 講習会 :MPI 基礎 172 Fortran 言語のサンプルプログラムの注意 行列サイズNの宣言は 以下のファイルにあります mat-mat.inc 行列サイズ変数が NNとなっています integer NN parameter (NN=1000)

159 講習会 :MPI 基礎 173 演習課題 (1) MyMatMat 関数を並列化してください #define N 288 #define DEBUG 1 として デバッグをしてください 行列 A B C は 各 PE で重複して かつ全部 (N N) 所有してよいです

160 講習会 :MPI 基礎 174 演習課題 (1) サンプルプログラムでは 行列 A B の要素を全部 1 として 行列 - 行列積の結果をもつ行列 C の全要素が N であるか調べ 結果検証しています デバックに活用してください 行列 C の分散方式により 演算結果チェックルーチンの並列化が必要 になります 注意してください

161 講習会 :MPI 基礎 175 並列化のヒント 以下のようなデータ分割にすると とても簡単です C A B N/4 PE0 N/4 PE0 PE1 PE2 PE3 = PE1 PE2 PE3 * PE0 PE1 PE2 PE3 N 通信関数は一切不要です 行列 - ベクトル積の演習と同じ方法で並列化できます N 演習環境は異なります 全 PE で重複して全要素を所有

162 講習会 :MPI 基礎 176 MPI 並列化の大前提 ( 再確認 ) SPMD 対象のメインプログラム (mat-mat) は すべての PE で かつ 同時に起動された状態 から処理が始まる 分散メモリ型並列計算機 各 PE は 完全に独立したメモリを持っている ( 共有メモリではない )

163 講習会 :MPI 基礎 177 MPI 並列化の大前提 ( 再確認 ) 各 PE では < 同じプログラムが同時に起動 > されて開始されます mpirun mat-mat PE0 PE1 PE2 PE3 mat-mat mat-mat mat-mat mat-mat

164 講習会 :MPI 基礎 178 MPI 並列化の大前提 ( 再確認 ) 各 PE では < 別配列が個別に確保 > されます PE0 PE1 PE2 PE3 A[N][N] A[N][N] A[N][N] A[N][N] myid 変数は MPI_Init() 関数 ( もしくは サブルーチン ) が呼ばれた段階で < 各 PE 固有の値 > になっています PE0 PE1 PE2 PE3 myid = 0 myid = 1 myid = 2 myid = 3

165 講習会 :MPI 基礎 179 各 PE での配列の確保状況 実際は 以下のように配列が確保されていて 部分的に使うだけになります N/4 PE0 PE1 PE2 PE3 A A A A PE0 PE1 PE2 PE3 N N N N

166 講習会 :MPI 基礎 180 本実習プログラムの TIPS myid, numprocs は大域変数です myid (= 自分の ID) および numprocs(= 世の中の PE 台数 ) の変数は大域変数です MyMatVec 関数内で 引数設定や宣言なしに 参照できます myid, numprocs の変数を使う必要があります MyMatMat 関数を並列化するには myid および numprocs 変数を利用しないと 並列化ができません

167 講習会 :MPI 基礎 181 並列化の考え方 ( 行列 - ベクトル積の場合 C 言語 ) SIMD アルゴリズムの考え方 (4PE の場合 ) n 行列 A for ( j=0; j<n/4; j++) { 内積 ( j, i ) } PE0 各 PE で重複して所有する for ( j=0; j<n; j++) { 内積 ( j, i ) } n for ( j=n/4; j<(n/4)*2; j++) { 内積 ( j, i ) } PE1 for ( j=(n/4)*2; j<(n/4)*3; j++) { 内積 ( j, i ) } PE2 for ( j=(n/4)*3; j<n; j++) { 内積 ( j, i ) } ベクトル x PE3

168 講習会 :MPI 基礎 182 並列化の考え方 ( 行列 - ベクトル積の場合 Fortran 言語 ) SIMD アルゴリズムの考え方 (4PE の場合 ) n 行列 A PE0 do j=1, n/4 内積 ( j, i ) enddo 各 PE で重複して所有する do j=1, n 内積 ( j, i ) enddo n PE1 PE2 PE3 do j=n/4+1, (n/4)*2 内積 ( j, i ) enddo do j=(n/4)*2+1, (n/4)*3 内積 ( j, i ) enddo do j=(n/4)*3+1, n 内積 ( j, i ) enddo ベクトル x

169 講習会 :MPI 基礎 183 並列化の方針 (C 言語 ) 1. 全 PE で行列 A を N N の大きさ ベクトル x y を N の大きさ 確保してよいとする 2. 各 PE は 担当の範囲のみ計算するように ループの開始値と終了値を変更する ブロック分散方式では 以下になる (n が numprocs で割り切れる場合 ) ib = n / numprocs; for ( j=myid*ib; j<(myid+1)*ib; j++) { } 3. (2 の並列化が完全に終了したら ) 各 PE で担当のデータ部分しか行列を確保しないように変更する 上記のループは 以下のようになる for ( j=0; j<ib; j++) { }

170 講習会 :MPI 基礎 184 並列化の方針 (Fortran 言語 ) 1. 全 PE で行列 A を N N の大きさ ベクトル x y を N の大きさ 確保してよいとする 2. 各 PE は 担当の範囲のみ計算するように ループの開始値と終了値を変更する ブロック分散方式では 以下になる (n が numprocs で割り切れる場合 ) ib = n / numprocs do j=myid*ib+1, (myid+1)*ib. enddo 3. (2 の並列化が完全に終了したら ) 各 PE で担当のデータ部分しか行列を確保しないように変更する 上記のループは 以下のようになる do j=1, ib. enddo

171 講習会 :MPI 基礎 185 実装上の注意 ループ変数をグローバル変数にすると 性能が出ません 必ずローカル変数か 定数 ( 2 など ) にしてください ローカル変数にすること for (i=i_start; i<i_end; i++) { }

172 講習会 :MPI 基礎 186 MPI プログラミング実習 (Ⅲ) ( 演習 ) 実習 (Ⅱ) が早く終わってしまった方のための演習です

173 講習会 :MPI 基礎 187 講義の流れ 1. 行列 - 行列積 (2) のサンプルプログラムの実行 2. サンプルプログラムの説明 3. 演習課題 (2): ちょっと難しい完全分散版 4. 並列化のヒント

174 講習会 :MPI 基礎 188 サンプルプログラムの実行 ( 行列 - 行列積 (2))

175 講習会 :MPI 基礎 189 行列 - 行列積のサンプルプログラムの注意点 C 言語版 /Fortran 言語版のファイル名 Mat-Mat-d-rb.tar ジョブスクリプトファイル mat-mat-d.bash 中のキュー名を u-lecture から u-tutorial に変更してから qsub してください u-lecture : 実習時間外のキュー u-tutorial: 実習時間内のキュー

176 講習会 :MPI 基礎 190 行列 - 行列積 (2) のサンプルプログラムの実行 以下のコマンドを実行する $ cp /lustre/gt00/z30105/mat-mat-d-fx.tar./ $ tar xvf Mat-Mat-d-fx.tar $ cd Mat-Mat-d 以下のどちらかを実行 $ cd C : C 言語を使う人 $ cd F : Fortran 言語を使う人 以下共通 $ make $ pjsub mat-mat-d.bash 実行が終了したら 以下を実行する $ cat mat-mat-d.bash.oxxxxxx

177 講習会 :MPI 基礎 191 行列 - 行列積のサンプルプログラムの実行 (C 言語版 ) 以下のような結果が見えれば成功 N = 576 Mat-Mat time = [sec.] [MFOPS] Error! in ( 0, 2 )-th argument in PE 0 Error! in ( 0, 2 )-th argument in PE 61 Error! in ( 0, 2 )-th argument in PE 51 Error! in ( 0, 2 )-th argument in PE 59 Error! in ( 0, 2 )-th argument in PE 50 Error! in ( 0, 2 )-th argument in PE 58 並列化が完成していないのでエラーが出ます ですが これは正しい動作です

178 講習会 :MPI 基礎 192 行列 - 行列積のサンプルプログラムの実行 (Fortran 言語 ) 以下のような結果が見えれば成功 NN = 576 Mat-Mat time = E-003 MFOPS = Error! in ( 1, 3 )-th argument in PE 0 Error! in ( 1, 3 )-th argument in PE 61 Error! in ( 1, 3 )-th argument in PE 51 Error! in ( 1, 3 )-th argument in PE 58 Error! in ( 1, 3 )-th argument in PE 55 Error! in ( 1, 3 )-th argument in PE 63 Error! in ( 1, 3 )-th argument in PE 60 並列化が完成していないのでエラーが出ます ですが これは正しい動作です

179 講習会 :MPI 基礎 193 サンプルプログラムの説明 #define N 576 数字を変更すると 行列サイズが変更できます #define DEBUG 1 0 を 1 にすると 行列 - 行列積の演算結果が検証できます MyMatMat 関数の仕様 Double 型の行列 A((N/NPROCS) N 行列 ) と B((N (N/NPROCS) 行列 )) の行列積をおこない Double 型の (N/NPROCS) N 行列 C に その結果が入ります

180 講習会 :MPI 基礎 194 Fortran 言語のサンプルプログラムの注意 行列サイズNの宣言は 以下のファイルにあります mat-mat-d.inc 行列サイズ変数が NNとなっています integer NN parameter (NN=576)

181 講習会 :MPI 基礎 195 演習課題 (1) MyMatMat 関数 ( 手続き ) を並列化してください デバック時は #define N 576 としてください 行列 A B C の初期配置 ( データ分散 ) を 十分に考慮してください

182 講習会 :MPI 基礎 196 行列 A B C の初期配置 行列 A B C の配置は以下のようになっています ( ただし以下は 4PE の場合で 実習環境は異なります ) N/ NPROCS C A B PE0 PE1 PE2 N/ NPROCS = PE0 PE1 PE2 * PE 0 PE 1 PE 2 PE 3 N PE3 PE3 N N N/NPROCS 1 対 1 通信関数が必要です 行列 A B Cの配列のほかに 受信用バッファの配列が必要です

183 講習会 :MPI 基礎 197 入力と出力仕様 N / NPROCS A PE0 B 入力 : PE1 PE2 PE 0 PE 1 PE 2 PE 3 N PE3 N / NPROCS C PE0 PE1 PE2 N : 出力 N / NPROCS l この例は 4PE の場合ですが 実習環境は異なります PE3 N

184 講習会 :MPI 基礎 198 並列化の注意 (C 言語 ) i 各配列は 完全に分散されています 各 PEでは 以下のようなインデックスの配列となっています j N-1 0 A[i][j] i N/NPROCS-1 j N/NPROCS-1 j 0 0 N-1 B[i][j] i C[i][j] N/NPROCS-1 N-1 各 PE で行う ローカルな行列 - 行列積演算時のインデックス指定に注意してください

185 講習会 :MPI 基礎 199 並列化の注意 (Fortran 言語 ) i 各配列は 完全に分散されています 各 PEでは 以下のようなインデックスの配列となっています j N 1 A( i, j ) i B i ( i, j ) N/NPROCS j N/NPROCS j 1 N 1 C( i, j ) N/NPROCS 各 PE で行う ローカルな行列 - 行列積演算時のインデックス指定に注意してください N

186 講習会 :MPI 基礎 200 並列化のヒント 行列積を計算するには 各 PE で完全な行列 B のデータがないので 行列 B のデータについて通信が必要です たとえば 以下のように計算する方法があります ステップ 1 N/NPROCS C A B N/ NPROCS PE0 PE1 PE2 = PE0 PE1 PE2 * PE 0 PE 1 PE 2 PE 3 PE3 PE3 ローカルなデータを使って得られた行列 - 行列積結果

187 講習会 :MPI 基礎 201 並列化のヒント B ステップ 2 PE 0 PE 1 PE 2 PE 3 自分の持っているデータをひとつ左隣りに転送する (PE0 は PE3 に送る ) 循環左シフト転送 C A B PE0 PE0 PE1 PE2 = PE1 PE2 * PE 0 PE 1 PE 2 PE 3 PE3 PE3 ローカルなデータを使って得られた行列 - 行列積結果

188 講習会 :MPI 基礎 202 並列化のヒント B ステップ 3 PE 0 PE 1 PE 2 PE 3 自分の持っているデータをひとつ左隣りに転送する (PE0 は PE3 に送る ) 循環左シフト転送 C A B PE0 PE0 PE1 PE2 = PE1 PE2 * PE 0 PE 1 PE 2 PE 3 PE3 PE3 ローカルなデータを使って得られた行列 - 行列積結果

189 講習会 :MPI 基礎 203 並列化の注意 循環左シフト転送を実装する際 全員が MPI_Send を先に発行すると その場所で処理が止まる ( 正確には 動いたり 動かなかったり する ) MPI_Sendの処理中で 場合により バッファ領域がなくなる バッファ領域が空くまで待つ ( スピンウェイトする ) しかし バッファ領域不足から 永遠に空かない これを回避するため 以下の実装を行う PE 番号が2で割り切れるPE: MPI_Send(); MPI_Recv(); それ以外のPE: MPI_Recv(); MPI_Send(); それぞれに対応

190 講習会 :MPI 基礎 204 デットロック回避の通信パターン 以下の 2 ステップで 循環左シフト通信をする B ステップ 1: 2 で割り切れる PE がデータを送る PE 0 PE 1 PE 2 PE 3 ステップ 2: 2 で割り切れない PE がデータを送る

191 講習会 :MPI 基礎 205 基礎的な MPI 関数 MPI_Recv (1/2) ierr = MPI_Recv(recvbuf, icount, idatatype, isource, itag, icomm, istatus); recvbuf : 受信領域の先頭番地を指定する icount : 整数型 受信領域のデータ要素数を指定する idatatype : 整数型 受信領域のデータの型を指定する MPI_CHAR ( 文字型 ) MPI_INT ( 整数型 ) MPI_FOAT ( 実数型 ) MPI_DOUBE( 倍精度実数型 ) isource : 整数型 受信したいメッセージを送信する PE のランクを指定する 任意の PE から受信したいときは MPI_ANY_SOURCE を指定する

192 講習会 :MPI 基礎 206 基礎的な MPI 関数 MPI_Recv (2/2) itag : 整数型 受信したいメッセージに付いているタグの値を指定する 任意のタグ値のメッセージを受信したいときは MPI_ANY_TAG を指定する icomm : 整数型 PE 集団を認識する番号であるコミュニケータを指定する 通常では MPI_COMM_WORD を指定すればよい istatus : MPI_Status 型 ( 整数型の配列 ) 受信状況に関する情報が入る 要素数が MPI_STATUS_SIZE の整数配列が宣言される 受信したメッセージの送信元のランクが istatus[mpi_source] タグが istatus[mpi_tag] に代入される ierr( 戻り値 ) : 整数型 エラーコードが入る

193 講習会 :MPI 基礎 207 実装上の注意 タグ (itag) について MPI_Send(), MPI_Recv() で現れるタグ (itag) は 任意の int 型の数字を指定してよいです ただし 同じ値 (0 など ) を指定すると どの通信に対応するかわからなくなり 誤った通信が行われるかもしれません 循環左シフト通信では MPI_Send() と MPI_Recv() の対が 2 つでてきます これらを別のタグにした方が より安全です たとえば 一方は最外ループの値 iloop として もう一方を iloop+nprocs とすれば 全ループ中でタグがぶつかることがなく 安全です

194 講習会 :MPI 基礎 208 さらなる並列化のヒント 以降 本当にわからない人のための資料です ほぼ回答が載っています

195 講習会 :MPI 基礎 209 並列化のヒント 1. 循環左シフトは PE 総数 -1 回必要 2. 行列 B のデータを受け取るため 行列 B[][] に関するバッファ行列 B_T[][] が必要 3. 受け取った B_T[][] を ローカルな行列 - 行列積で使うため B[][] へコピーする 4. ローカルな行列 - 行列積をする場合の 対角ブロックの初期値 : ブロック幅 *myid ループ毎にブロック幅だけ増やしていくが N を超えたら 0 に戻さなくてはいけない

第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

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

内容に関するご質問は まで お願いします [Oakforest-PACS(OFP) 編 ] 第 85 回お試しアカウント付き並列プログラミング講習会 ライブラリ利用 : 科学技術計算の効率化入門 スパコンへのログイン テストプログラム起動 東京大学情報基盤セ 内容に関するご質問は ida@cc.u-tokyo.ac.jp まで お願いします [Oakforest-PACS(OFP) 編 ] 第 85 回お試しアカウント付き並列プログラミング講習会 ライブラリ利用 : 科学技術計算の効率化入門 スパコンへのログイン テストプログラム起動 東京大学情報基盤センター特任准教授伊田明弘 1 講習会 : ライブラリ利用 [FX10] スパコンへのログイン ファイル転送

More information

Reedbush 利用の手引き 2 ノートパソコンの設定 : 公開鍵の生成 登録 ネットワーク環境に接続してから行ってください

Reedbush 利用の手引き 2 ノートパソコンの設定 : 公開鍵の生成 登録 ネットワーク環境に接続してから行ってください Reedbush 利用の手引き 1 お試しアカウント付き 並列プログラミング講習会 Reedbush 利用の手引き 東京大学情報基盤センター Reedbush 利用の手引き 2 ノートパソコンの設定 : 公開鍵の生成 登録 ネットワーク環境に接続してから行ってください Reedbush 利用の手引き 3 鍵の作成 1. ターミナルを起動する 2. 以下を入力する $ ssh- keygen t rsa

More information

Microsoft PowerPoint - 阪大CMSI pptx

Microsoft PowerPoint - 阪大CMSI pptx 内容に関する質問は katagiri@cc.nagaoya-u.ac.jp まで 第 2 回 MPI の基礎 名古屋大学情報基盤センター 片桐孝洋 1 講義日程と内容について (1 学期 : 木曜 3 限 ) 第 1 回 : プログラム高速化の基礎 2017 年 4 月 13 日 イントロダクション ループアンローリング キャッシュブロック化 数値計算ライブラリの利用 その他第 2 回 :MPIの基礎

More information

Oakforest-PACS 利用の手引き 2 ノートパソコンの設定 : 公開鍵の生成 登録

Oakforest-PACS 利用の手引き 2 ノートパソコンの設定 : 公開鍵の生成 登録 Oakforest-PACS 利用の手引き 1 お試しアカウント付き 並列プログラミング講習会 Oakforest-PACS 利用の手引き 東京大学情報基盤センター Oakforest-PACS 利用の手引き 2 ノートパソコンの設定 : 公開鍵の生成 登録 Oakforest-PACS 利用の手引き 3 鍵の作成 1. ターミナルを起動する 2. 以下を入力する $ ssh-keygen t rsa

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

講習会 :MPI 基礎 2 講習会概略 開催日 : 2017 年 3 月 6 日 ( 月 ) 10:30-17: 年 3 月 7 日 ( 火 ) 10:00-17:00 場所 : 東京大学情報基盤センター 4 階 413 遠隔会義室 講習会プログラム : 3 月 6 日 ( 月 ) 1

講習会 :MPI 基礎 2 講習会概略 開催日 : 2017 年 3 月 6 日 ( 月 ) 10:30-17: 年 3 月 7 日 ( 火 ) 10:00-17:00 場所 : 東京大学情報基盤センター 4 階 413 遠隔会義室 講習会プログラム : 3 月 6 日 ( 月 ) 1 講習会 :MPI 基礎 1 第 72 回お試しアカウント付き並列プログラミング講習会 MPI 基礎 : 並列プログラミング入門 東京大学情報基盤センター 内容に関するご質問は hanawa @ cc.u-tokyo.ac.jp まで お願いします 講習会 :MPI 基礎 2 講習会概略 開催日 : 2017 年 3 月 6 日 ( 月 ) 10:30-17:00 2017 年 3 月 7 日 ( 火

More information

NUMAの構成

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

More information

Reedbush-Uアカウントの発行

Reedbush-Uアカウントの発行 計算科学概論 ( 第 9 回 ):6 月 12 日 ( 月 ) Reedbush-U スーパーコンピュータシステム の利用と MPI プログラムの実行 松本正晴 大学院情報理工学系研究科コンピュータ科学専攻 本日の講義資料 ITC-LMS の授業スライドにある 計算科学概論 0612.pdf を 各自ダウンロードしてください Reedbush-U アカウントの発行 ( 先週までに名簿登録した者のみです

More information

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

Microsoft PowerPoint - 第10回講義(2015年12月22日)-1 .pptx 非同期通信 東京大学情報基盤センター准教授片桐孝洋 1 2015 年 12 月 22 日 ( 火 )10:25-12:10 講義日程 ( 工学部共通科目 ) 10 月 6 日 : ガイダンス 1. 10 月 13 日 並列数値処理の基本演算 ( 座学 ) 2. 10 月 20 日 : スパコン利用開始 ログイン作業 テストプログラム実行 3. 10 月 27 日 高性能演算技法 1 ( ループアンローリング

More information

演習準備

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

More information

Reedbush-Uアカウントの発行

Reedbush-Uアカウントの発行 計算科学概論 ( 第 2 回 ):4 月 16 日 ( 月 ) Reedbush スーパーコンピュータシステム の利用と MPI プログラムの実行 松本正晴 大学院情報理工学系研究科コンピュータ科学専攻 本日の講義資料 ITC-LMSの授業スライドにある 計算科学概論 0409.pdf ( 前回分の資料 ) と 計算科学概論 0416.pdf ( 今回の資料 ) を各自ダウンロードしてください https://itc-lms.ecc.u-tokyo.ac.jp/portal/login

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

<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

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

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

コードのチューニング

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

More information

about MPI

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

More information

スライド 1

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

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

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

Microsoft PowerPoint - 講義:コミュニケータ.pptx コミュニケータとデータタイプ (Communicator and Datatype) 2019 年 3 月 15 日 神戸大学大学院システム情報学研究科横川三津夫 2019/3/15 Kobe HPC Spring School 2019 1 講義の内容 コミュニケータ (Communicator) データタイプ (Datatype) 演習問題 2019/3/15 Kobe HPC Spring School

More information

並列計算導入.pptx

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

More information

スライド 1

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

More information

2018/10/18 講習会 :MPI 基礎 1 第 105 回お試しアカウント付き並列プログラミング講習会 MPI 基礎 : 並列プログラミング入門 東京大学情報基盤センター 内容に関するご質問は cc.u-tokyo.ac.jp まで お願いします

2018/10/18 講習会 :MPI 基礎 1 第 105 回お試しアカウント付き並列プログラミング講習会 MPI 基礎 : 並列プログラミング入門 東京大学情報基盤センター 内容に関するご質問は cc.u-tokyo.ac.jp まで お願いします 講習会 :MPI 基礎 1 第 105 回お試しアカウント付き並列プログラミング講習会 MPI 基礎 : 並列プログラミング入門 東京大学情報基盤センター 内容に関するご質問は ymiki @ cc.u-tokyo.ac.jp まで お願いします 講習会 :MPI 基礎 2 講習会概略 開催日 : 2018 年 10 月 18 日 ( 木 ) 10:00-17:00 場所 : 東京大学情報基盤センター

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

演習1: 演習準備

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

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

講 習 会 概 略 開 催 日 : 2013 年 3 月 24 日 ( 月 )10:30-18:00 2013 年 3 月 25 日 ( 火 )10:30-18:00 場 所 : 東 京 大 学 情 報 基 盤 センター 4 階 413 遠 隔 講 義 室 講 習 会 プログラム: 3 月 24 日

講 習 会 概 略 開 催 日 : 2013 年 3 月 24 日 ( 月 )10:30-18:00 2013 年 3 月 25 日 ( 火 )10:30-18:00 場 所 : 東 京 大 学 情 報 基 盤 センター 4 階 413 遠 隔 講 義 室 講 習 会 プログラム: 3 月 24 日 内 容 に 関 するご 質 問 は katagiri @ cc.u-tokyo.ac.jp まで お 願 いします 第 35 回 お 試 しアカウント 付 き 並 列 プログラミング 講 習 会 ライブラリ 利 用 : 高 性 能 プログラミング 初 級 入 門 東 京 大 学 情 報 基 盤 センター 3 講 習 会 概 略 開 催 日 : 2013 年 3 月 24 日 ( 月 )10:30-18:00

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

memo

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

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

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

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

More information

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

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

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

第 125 回お試しアカウント付き並列プログラミング講習会 MPI 基礎 : 並列プログラミング入門 東京大学情報基盤センター 内容に関するご質問は cc.u-tokyo.ac.jp まで お願いします

第 125 回お試しアカウント付き並列プログラミング講習会 MPI 基礎 : 並列プログラミング入門 東京大学情報基盤センター 内容に関するご質問は cc.u-tokyo.ac.jp まで お願いします 第 125 回お試しアカウント付き並列プログラミング講習会 MPI 基礎 : 並列プログラミング入門 東京大学情報基盤センター 内容に関するご質問は ymiki @ cc.u-tokyo.ac.jp まで お願いします 2019/10/21 講習会 :MPI 基礎 2 講習会概略 開催日 : 2019 年 10 月 21 日 ( 月 ) 10:00-17:00 場所 : 東京大学情報基盤センター 4

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

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

情報処理概論(第二日目) 実習資料 Linux 入門講習会 九州大学情報基盤研究開発センター 注意 : この内容は wisdom.cc.kyushu-u.ac.jp の任意の ID で利用できますが, ファイルの削除等を含んでいるので各コマンドの意味を理解するまでは講習会用 ID で利用することをお勧めします. 1 実習 1 ログイン ファイル操作 ディレクトリの作成 ファイルの移動, コピー, 削除 ログアウト 2 ログイン

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

Microsoft PowerPoint - 09.pptx

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

More information

FX10利用準備

FX10利用準備 π-computer(fx10) 利用準備 2018 年 3 月 14 日理化学研究所計算科学研究機構八木学 1 KOBE HPC Spring School 2018 2018/3/14 内容 本スクールの実習で利用するスーパーコンピュータ神戸大学 π-computer (FX10) について システム概要 ログイン準備 2 神戸大学 π-computer: システム概要 富士通 PRIMEHPC

More information

Microsoft PowerPoint - 阪大CMSI pptx

Microsoft PowerPoint - 阪大CMSI pptx 内容に関する質問は katagiri@cc.nagoya-u.ac.jp まで 第 4 回 Hybrid 並列化技法 (MPIとOpenMPの応用) 名古屋大学情報基盤センター 片桐孝洋 207 年度計算科学技術特論 A 講義日程と内容について 207 年度計算科学技術特論 A( 学期 : 木曜 3 限 ) 第 回 : プログラム高速化の基礎 207 年 4 月 3 日 イントロダクション ループアンローリング

More information

2006年10月5日(木)実施

2006年10月5日(木)実施 2010 年 7 月 2 日 ( 金 ) 実施 ファイル処理ファイルとはファイル (file) は日常用語では紙などを綴じたものを表すが, コンピュータ用語ではデータの集合体を指す言葉である ファイルは例えば, 文書ファイルやプログラムファイルのように, 用途によって分類されることもあれば, また, テキストファイルやバイナリファイルのように, ファイルの作り方によって分類されることもある なお,

More information

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

(Microsoft PowerPoint \211\211\217K3_4\201i\216R\226{_\211\272\215\342\201j.ppt [\214\335\212\267\203\202\201[\203h]) RIKEN AICS Summer School 演習 3 4 MPI による並列計算 2012 年 8 月 8 日 神戸大学大学院システム情報学研究科山本有作理化学研究所計算科学研究機構下坂健則 1 演習の目標 講義 6 並列アルゴリズム基礎 で学んだアルゴリズムのいくつかを,MPI を用いて並列化してみる これを通じて, 基本的な並列化手法と,MPI 通信関数の使い方を身に付ける 2 取り上げる例題と学習項目

More information

Prog1_12th

Prog1_12th 2013 年 7 月 4 日 ( 木 ) 実施 ファイル処理ファイルとはファイル (file) は日常用語では紙などを綴じたものを表すが, コンピュータ用語ではデータの集合体を指す言葉である ファイルは例えば, 文書ファイルやプログラムファイルのように, 用途によって分類されることもあれば, また, テキストファイルやバイナリファイルのように, ファイルの作り方によって分類されることもある なお,

More information

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

演習 II 2 つの講義の演習 奇数回 : 連続系アルゴリズム 部分 偶数回 : 計算量理論 部分 連続系アルゴリズム部分は全 8 回を予定 前半 2 回 高性能計算 後半 6 回 数値計算 4 回以上の課題提出 ( プログラム + 考察レポート ) で単位 演習 II ( 連続系アルゴリズム ) 第 1 回 : MPI 須田研究室 M2 本谷徹 motoya@is.s.u-tokyo.ac.jp 2012/10/05 2012/10/18 補足 訂正 演習 II 2 つの講義の演習 奇数回 : 連続系アルゴリズム 部分 偶数回 : 計算量理論 部分 連続系アルゴリズム部分は全 8 回を予定 前半 2 回 高性能計算 後半 6 回 数値計算 4 回以上の課題提出

More information

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

研究背景 大規模な演算を行うためには 分散メモリ型システムの利用が必須 Message Passing Interface MPI 並列プログラムの大半はMPIを利用 様々な実装 OpenMPI, MPICH, MVAPICH, MPI.NET プログラミングコストが高いため 生産性が悪い 新しい並 XcalableMPによる NAS Parallel Benchmarksの実装と評価 中尾 昌広 李 珍泌 朴 泰祐 佐藤 三久 筑波大学 計算科学研究センター 筑波大学大学院 システム情報工学研究科 研究背景 大規模な演算を行うためには 分散メモリ型システムの利用が必須 Message Passing Interface MPI 並列プログラムの大半はMPIを利用 様々な実装 OpenMPI,

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

NUMAの構成

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

More information

cp-7. 配列

cp-7. 配列 cp-7. 配列 (C プログラムの書き方を, パソコン演習で学ぶシリーズ ) https://www.kkaneko.jp/cc/adp/index.html 金子邦彦 1 本日の内容 例題 1. 月の日数配列とは. 配列の宣言. 配列の添え字. 例題 2. ベクトルの内積例題 3. 合計点と平均点例題 4. 棒グラフを描く配列と繰り返し計算の関係例題 5. 行列の和 2 次元配列 2 今日の到達目標

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

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

para02-2.dvi

para02-2.dvi 2002 2 2002 4 23 : MPI MPI 1 MPI MPI(Message Passing Interface) MPI UNIX Windows Machintosh OS, MPI 2 1 1 2 2.1 1 1 1 1 1 1 Fig. 1 A B C F Fig. 2 A B F Fig. 1 1 1 Fig. 2 2.2 Fig. 3 1 . Fig. 4 Fig. 3 Fig.

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

PowerPoint Presentation

PowerPoint Presentation 工学部 6 7 8 9 10 組 ( 奇数学籍番号 ) 担当 : 長谷川英之 情報処理演習 第 7 回 2010 年 11 月 18 日 1 今回のテーマ 1: ポインタ 変数に値を代入 = 記憶プログラムの記憶領域として使用されるものがメモリ ( パソコンの仕様書における 512 MB RAM などの記述はこのメモリの量 ) RAM は多数のコンデンサの集合体 : 電荷がたまっている (1)/ いない

More information

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

情報処理概論(第二日目) 実習資料 Linux 入門講習会 九州大学情報基盤研究開発センター 注意 : この内容は najima.cc.kyushu-u.ac.jp の任意の ID で利用できますが, ファイルの削除等を含んでいるので各コマンドの意味を理解するまでは講習会用 ID で利用することをお勧めします. 1 実習 1 ログイン ファイル操作 ディレクトリの作成 ファイルの移動, コピー, 削除 ログアウト 2 ログイン

More information

コードのチューニング

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

More information

memo

memo 計数工学プログラミング演習 ( 第 3 回 ) 2016/04/26 DEPARTMENT OF MATHEMATICAL INFORMATICS 1 内容 ポインタ malloc 構造体 2 ポインタ あるメモリ領域 ( アドレス ) を代入できる変数 型は一致している必要がある 定義時には値は不定 ( 何も指していない ) 実際にはどこかのメモリを指しているので, #include

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

コードのチューニング

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

More information

プログラミング実習I

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

More information

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

Gfarm/MPI-IOの 概要と使い方 MPI-IO/Gfarm のご紹介と現在の開発状況 鷹津冬将 2018/3/2 Gfarm ワークショップ 2018 1 目次 MPI-IO/Gfarm 概要 MPI-IO/Gfarm の開発状況 MVAPICH2 向け MPI-IO/Gfarm MPI-IO/Gfarm の使い方 かんたんなサンプルプログラムと動作確認の方法 既知の不具合 まとめと今後の展望 2018/3/2 Gfarm ワークショップ

More information

Microsoft PowerPoint - exp2-02_intro.ppt [互換モード]

Microsoft PowerPoint - exp2-02_intro.ppt [互換モード] 情報工学実験 II 実験 2 アルゴリズム ( リスト構造とハッシュ ) 実験を始める前に... C 言語を復習しよう 0. プログラム書ける? 1. アドレスとポインタ 2. 構造体 3. 構造体とポインタ 0. プログラム書ける? 講義を聴いているだけで OK? 言語の要素技術を覚えれば OK? 目的のプログラム? 要素技術 データ型 配列 文字列 関数 オブジェクト クラス ポインタ 2 0.

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

Microsoft PowerPoint ppt

Microsoft PowerPoint ppt 並列アルゴリズム 2005 年後期火曜 2 限 高見利也 ( 青柳睦 ) Aoyagi@cc.kyushu-u.ac.jp http://server-500.cc.kyushu-u.ac.jp/ 12 月 20 日 ( 火 ) 9. PC クラスタによる並列プログラミング ( 演習 ) つづき 1 もくじ 1. 序並列計算機の現状 2. 計算方式およびアーキテクチュアの分類 3. 並列計算の目的と課題

More information

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

講義の流れ 並列プログラムの概要 通常のプログラムと並列プログラムの違い 並列プログラム作成手段と並列計算機の構造 OpenMP による並列プログラム作成 処理を複数コアに分割して並列実行する方法 MPI による並列プログラム作成 ( 午後 ) プロセス間通信による並列処理 処理の分割 + データの ( 財 ) 計算科学振興財団 大学院 GP 大学連合による計算科学の最先端人材育成 第 1 回社会人向けスパコン実践セミナー資料 29 年 2 月 17 日 13:15~14:45 九州大学情報基盤研究開発センター 南里豪志 1 講義の流れ 並列プログラムの概要 通常のプログラムと並列プログラムの違い 並列プログラム作成手段と並列計算機の構造 OpenMP による並列プログラム作成 処理を複数コアに分割して並列実行する方法

More information

PowerPoint プレゼンテーション

PowerPoint プレゼンテーション 計算機実習 Ⅰ FORTRAN 担当 2018.05.29 本日の課題 プログラムの基本ルールを理解し 以下が含まれるプログラムを作成する (1) 文法の基礎 ( フローチャートなど ) (2) 変数宣言 (3) 入出力 (4) 四則演算 (5) 組込関数 (6) 判定文 (7) リダイレクション PROGRAM MAIN INTEGER I, J, K REAL A, B, C CHARACTER

More information

スライド 1

スライド 1 ver. 2018/4/13 プログラミング 計算機利用上の Tips 補足資料 分類 項目 ページ 計算機利用 ホスト計算機への接続方法 Unix (Linux) の基本的なコマンド容量制限についてターミナルで文字を大きくする方法 xtermで文字を大きくする方法 Fortran プログラミングについて最近あった事例 : コンパイル 実行時のエラーコンパイルオプションプログラムは正しそうなのに エラーが出る場合データファイルは正しそうなのに

More information

プログラミング基礎

プログラミング基礎 C プログラミング Ⅰ 授業ガイダンス C 言語の概要プログラム作成 実行方法 授業内容について 授業目的 C 言語によるプログラミングの基礎を学ぶこと 学習内容 C 言語の基礎的な文法 入出力, 変数, 演算, 条件分岐, 繰り返し, 配列,( 関数 ) C 言語による簡単な計算処理プログラムの開発 到達目標 C 言語の基礎的な文法を理解する 簡単な計算処理プログラムを作成できるようにする 授業ガイダンス

More information

Microsoft PowerPoint - 計算機言語 第7回.ppt

Microsoft PowerPoint - 計算機言語 第7回.ppt 計算機言語第 7 回 長宗高樹 目的 関数について理解する. 入力 X 関数 f 出力 Y Y=f(X) 関数の例 関数の型 #include int tasu(int a, int b); main(void) int x1, x2, y; x1 = 2; x2 = 3; y = tasu(x1,x2); 実引数 printf( %d + %d = %d, x1, x2, y);

More information

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

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

More information

TopSE並行システム はじめに

TopSE並行システム はじめに はじめに 平成 23 年 9 月 1 日 トップエスイープロジェクト 磯部祥尚 ( 産業技術総合研究所 ) 2 本講座の背景と目標 背景 : マルチコア CPU やクラウドコンピューティング等 並列 / 分散処理環境が身近なものになっている 複数のプロセス ( プログラム ) を同時に実行可能 通信等により複数のプロセスが協調可能 並行システムの構築 並行システム 通信 Proc2 プロセス ( プログラム

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/ 10 月 11 日 ( 火 ) 1. 序並列計算機の現状 2. 計算方式およびアーキテクチュアの分類 ( 途中から ) 3. 並列計算の目的と課題 4. 数値計算における各種の並列化 1 講義の概要 並列計算機や計算機クラスターなどの分散環境における並列処理の概論

More information

MPI コミュニケータ操作

MPI コミュニケータ操作 コミュニケータとデータタイプ 辻田祐一 (RIKEN AICS) 講義 演習内容 MPI における重要な概念 コミュニケータ データタイプ MPI-IO 集団型 I/O MPI-IO の演習 2 コミュニケータ MPI におけるプロセスの 集団 集団的な操作などにおける操作対象となる MPI における集団的な操作とは? 集団型通信 (Collective Communication) 集団型 I/O(Collective

More information

ex04_2012.ppt

ex04_2012.ppt 2012 年度計算機システム演習第 4 回 2012.05.07 第 2 回課題の補足 } TSUBAMEへのログイン } TSUBAMEは学内からのログインはパスワードで可能 } } } } しかし 演習室ではパスワードでログインできない設定 } 公開鍵認証でログイン 公開鍵, 秘密鍵の生成 } ターミナルを開く } $ ssh-keygen } Enter file in which to save

More information

情報処理演習 II

情報処理演習 II 2004 年 6 月 15 日 長谷川秀彦 情報処理演習 II Parallel Computing on Distributed Memory Machine 1. 分散メモリ方式並列計算の基礎 複数の CPU がそれぞれのメモリを持ち 独立に動作するコンピュータを分散メモリ方式並列コンピュータ 正確には Distributed Memory Parallel Computer という これには複数の

More information

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

情報処理概論(第二日目) 実習資料 Linux 入門講習会 九州大学情報基盤研究開発センター 注意 : この内容は najima.cc.kyushu-u.ac.jp の任意の ID で利用できますが, ファイルの削除等を含んでいるので各コマンドの意味を理解するまでは講習会用 ID で利用することをお勧めします. 1 実習 1 ログイン ファイル操作 ディレクトリの作成 ファイルの移動, コピー, 削除 ログアウト 2 ログイン

More information

02: 変数と標準入出力

02: 変数と標準入出力 C プログラミング入門 基幹 7 ( 水 5) 12: コマンドライン引数 Linux にログインし 以下の講義ページを開いておくこと http://www-it.sci.waseda.ac.jp/ teachers/w483692/cpr1/ 2016-06-29 1 まとめ : ポインタを使った処理 内容呼び出し元の変数を書き換える文字列を渡す 配列を渡すファイルポインタ複数の値を返す大きな領域を確保する

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

memo

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

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

演習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

PowerPoint Presentation

PowerPoint Presentation プログラミング基礎 第 2 週 (4,5,6 回 ) 2011-10-07 出村公成 この資料の再配布を禁止します 予定 プログラミング入門 (45 分 ) 変数 入出力 分岐 演習 (90 分 ) タッチタイプ練習 統合開発環境 Codeblocksの使い方 教科書例題の打ち込みと実行 プログラミング入門 C 言語の簡単な例を体験 変数 入出力 分岐 プログラムの例リスト 2.1 改 #include

More information

Microsoft PowerPoint - prog03.ppt

Microsoft PowerPoint - prog03.ppt プログラミング言語 3 第 03 回 (2007 年 10 月 08 日 ) 1 今日の配布物 片面の用紙 1 枚 今日の課題が書かれています 本日の出欠を兼ねています 2/33 今日やること http://www.tnlab.ice.uec.ac.jp/~s-okubo/class/java06/ にアクセスすると 教材があります 2007 年 10 月 08 日分と書いてある部分が 本日の教材です

More information

今回のプログラミングの課題 ( 前回の課題で取り上げた )data.txt の要素をソートして sorted.txt というファイルに書出す ソート (sort) とは : 数の場合 小さいものから大きなもの ( 昇順 ) もしくは 大きなものから小さなもの ( 降順 ) になるよう 並び替えること

今回のプログラミングの課題 ( 前回の課題で取り上げた )data.txt の要素をソートして sorted.txt というファイルに書出す ソート (sort) とは : 数の場合 小さいものから大きなもの ( 昇順 ) もしくは 大きなものから小さなもの ( 降順 ) になるよう 並び替えること C プログラミング演習 1( 再 ) 4 講義では C プログラミングの基本を学び 演習では やや実践的なプログラミングを通して学ぶ 今回のプログラミングの課題 ( 前回の課題で取り上げた )data.txt の要素をソートして sorted.txt というファイルに書出す ソート (sort) とは : 数の場合 小さいものから大きなもの ( 昇順 ) もしくは 大きなものから小さなもの ( 降順

More information

Microsoft PowerPoint - OS07.pptx

Microsoft PowerPoint - OS07.pptx この資料は 情報工学レクチャーシリーズ松尾啓志著 ( 森北出版株式会社 ) を用いて授業を行うために 名古屋工業大学松尾啓志 津邑公暁が作成しました 主記憶管理 主記憶管理基礎 パワーポイント 27 で最終版として保存しているため 変更はできませんが 授業でお使いなる場合は松尾 (matsuo@nitech.ac.jp) まで連絡いただければ 編集可能なバージョンをお渡しする事も可能です 復習 OS

More information

書式に示すように表示したい文字列をダブルクォーテーション (") の間に書けば良い ダブルクォーテーションで囲まれた文字列は 文字列リテラル と呼ばれる プログラム中では以下のように用いる プログラム例 1 printf(" 情報処理基礎 "); printf("c 言語の練習 "); printf

書式に示すように表示したい文字列をダブルクォーテーション () の間に書けば良い ダブルクォーテーションで囲まれた文字列は 文字列リテラル と呼ばれる プログラム中では以下のように用いる プログラム例 1 printf( 情報処理基礎 ); printf(c 言語の練習 ); printf 情報処理基礎 C 言語についてプログラミング言語は 1950 年以前の機械語 アセンブリ言語 ( アセンブラ ) の開発を始めとして 現在までに非常に多くの言語が開発 発表された 情報処理基礎で習う C 言語は 1972 年にアメリカの AT&T ベル研究所でオペレーションシステムである UNIX を作成するために開発された C 言語は現在使われている多数のプログラミング言語に大きな影響を与えている

More information

untitled

untitled OS 2007/4/27 1 Uni-processor system revisited Memory disk controller frame buffer network interface various devices bus 2 1 Uni-processor system today Intel i850 chipset block diagram Source: intel web

More information

k_seminar_hands_on_for_linux_beginner.pptx

k_seminar_hands_on_for_linux_beginner.pptx 京 初級者向けハンズオン Linux 初心者向け資料 一般財団法人高度情報科学技術研究機構神戸センター 2017 年 5 月 16 日 2 Linux 初心者の方へ ハンズオン講習会では RIST FX10(OSはLinuxベース ) を使って 実習して頂きます Linuxに不慣れであまり自信がない方は 必須となる以下に示すコマンドについて 機能と使用方法を事前にご確認下さい cat cd cp ls

More information

2 T 1 N n T n α = T 1 nt n (1) α = 1 100% OpenMP MPI OpenMP OpenMP MPI (Message Passing Interface) MPI MPICH OpenMPI 1 OpenMP MPI MPI (trivial p

2 T 1 N n T n α = T 1 nt n (1) α = 1 100% OpenMP MPI OpenMP OpenMP MPI (Message Passing Interface) MPI MPICH OpenMPI 1 OpenMP MPI MPI (trivial p 22 6 22 MPI MPI 1 1 2 2 3 MPI 3 4 7 4.1.................................. 7 4.2 ( )................................ 10 4.3 (Allreduce )................................. 12 5 14 5.1........................................

More information

Microsoft Word ●MPI性能検証_志田_ _更新__ doc

Microsoft Word ●MPI性能検証_志田_ _更新__ doc 2.2.2. MPI 性能検証 富士通株式会社 志田直之 ここでは,Open MPI および富士通 MPI を用いて,MPI 性能の評価結果について報告する 1. 性能評価のポイント MPI の性能評価は, 大きく 3 つに分けて評価を行った プロセス数増加に向けた検証 ノード内通信とノード間通信の検証 性能検証 - 連続データ転送 - ストライド転送 2. プロセス数増加に向けた検証 評価に用いたシステムを以下に示す

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

LS-DYNA 利用の手引 第 1 版 東京工業大学学術国際情報センター 2017 年 9 月 25 日

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. インタラクティブノードでの

More information

Fujitsu Standard Tool

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

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

Microsoft PowerPoint - 11.pptx

Microsoft PowerPoint - 11.pptx ポインタと配列 ポインタと配列 配列を関数に渡す 法 課題 : 配列によるスタックの実現 ポインタと配列 (1/2) a が配列であるとき, 変数の場合と同様に, &a[0] [] の値は配列要素 a[0] のアドレス. C 言語では, 配列は主記憶上の連続領域に割り当てられるようになっていて, 配列名 a はその配列に割り当てられた領域の先頭番地となる. したがって,&a[0] と a は同じ値.

More information

Microsoft Word - 3new.doc

Microsoft Word - 3new.doc プログラミング演習 II 講義資料 3 ポインタ I - ポインタの基礎 1 ポインタとは ポインタとはポインタは, アドレス ( データが格納されている場所 ) を扱うデータ型です つまり, アドレスを通してデータを間接的に処理します ポインタを使用する場合の, 処理の手順は以下のようになります 1 ポインタ変数を宣言する 2 ポインタ変数へアドレスを割り当てる 3 ポインタ変数を用いて処理 (

More information

東大センターのスパコン 2 基の大型システム,6 年サイクル (?) FY Yayoi: Hitachi SR16000/M1 IBM Power TFLOPS, 1152 TB T2K To

東大センターのスパコン 2 基の大型システム,6 年サイクル (?) FY Yayoi: Hitachi SR16000/M1 IBM Power TFLOPS, 1152 TB T2K To Reedbush-U の概要 ログイン方法 東京大学情報基盤センタースーパーコンピューティング研究部門 http://www.cc.u-tokyo.ac.jp/ 東大センターのスパコン 2 基の大型システム,6 年サイクル (?) FY 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 2 Yayoi: Hitachi SR16000/M1 IBM Power-7

More information

UNIX 初級講習会 (第一日目)

UNIX 初級講習会 (第一日目) 情報処理概論 工学部物質科学工学科応用化学コース機能物質化学クラス 第 3 回 2005 年 4 月 28 日 計算機に関する基礎知識 Fortranプログラムの基本構造 文字や数値を画面に表示する コンパイル時のエラーへの対処 ハードウェアとソフトウェア ハードウェア 計算, 記憶等を行う機械 ソフトウェア ハードウェアに対する命令 データ ソフトウェア ( 命令 ) がないとハードウェアは動かない

More information

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

Microsoft PowerPoint 並列アルゴリズム04.ppt 並列アルゴリズム 2005 年後期火曜 2 限 青柳睦 Aoyagi@cc.kyushu-u.ac.jp http://server-500.cc.kyushu-u.ac.jp/ 11 月 8 日 ( 火 ) 5. MPI の基礎 6. 並列処理の性能評価 1 もくじ 1. 序並列計算機の現状 2. 計算方式およびアーキテクチュアの分類 3. 並列計算の目的と課題 4. 数値計算における各種の並列化

More information

C#の基本

C#の基本 C# の基本 ~ 開発環境の使い方 ~ C# とは プログラミング言語のひとつであり C C++ Java 等に並ぶ代表的な言語の一つである 容易に GUI( グラフィックやボタンとの連携ができる ) プログラミングが可能である メモリ管理等の煩雑な操作が必要なく 比較的初心者向きの言語である C# の利点 C C++ に比べて メモリ管理が必要ない GUIが作りやすい Javaに比べて コードの制限が少ない

More information