• 検索結果がありません。

アカウントが手元に渡るまで

N/A
N/A
Protected

Academic year: 2021

シェア "アカウントが手元に渡るまで"

Copied!
70
0
0

読み込み中.... (全文を見る)

全文

(1)

(事前登録者のみです ) 手順

1.

g.ecc.u-tokyo.ac.jp のアカウントで Zoom にログインして ください。念のため学生証を用意してください。

2.

( 教員 ) Zoom のチャットで出席のワンタイムパスワードを 教えます。

3.

LMS の出席管理に入力してください。

4.

( 教員 ) LMS で出席を確認します。

5.

( 教員 ) 出席者に対し、アカウント情報を LMS にアップロー ドします。

6.

LMS 上のアンケートで、コメント欄に利用者番号とパス ワードが表示されているのを確認してください。

授業で指示があるまで、ログイン作業を行わないでください

(2)

スーパーコンピュータを利 用しよう

東京大学情報基盤センター准教授 塙 敏博

20201013日(火)10:25-12:10

(3)

講義の流れ

1. ログイン作業

2. スパコン利用の仕方

• 単純な並列プログラムの実行

3. 総和演算

4. 演習課題(講義中に行う課題)

5. レポート課題

(4)

講義日程(工学部共通科目 )

1. 9月29日(今日): ガイダンス

2. 10月6日

l 並列数値処理の基本演算(座学)

3. 1013日:スパコン利用開始

l ログイン作業、テストプログラム実行

4. 10月20日

l 高性能プログラミング技法の基礎1

(階層メモリ、ループアンローリン グ)

5. 10月27日

l 高性能プログラミング技法の基礎2

(キャッシュブロック化)

6. 11月10日

l 行列-ベクトル積の並列化

7. 1117

l べき乗法の並列化

8. 11月24日

l 行列-行列積の並列化(1)

9. 121

l 行列-行列積の並列化(2)

10. 128

l LU分解法(1)

l コンテスト課題発表

11. 1215

l LU分解法(2) 、非同期通信

12. 1222

l RB-Hログイン、GPUプログラミン グ(1)

13. 15

l GPUプログラミング(2) 、研究紹 介他

202121日(月)24時 厳守

(5)

ログイン作業

はじめてのスパコンログイン

(6)

ユーザ名の確認

• 工学部共通科目(スパコンプログラミング1、Ⅰ)

ユーザ名(利用者番号): t58 xxx

(xxxは 3 桁番号)

グループ名(課金プロジェクト名): gt58

講義時間中のジョブキュー名: lecture8-flat

(7)

Secure Shell (SSH)

暗号化や認証の技術により、遠隔のシステムとの間で安全に 通信をするためのプロトコル、コマンド群

公開鍵暗号方式でユーザ・ホストの認証、共通鍵暗号方式で 通信路を暗号化

リモート端末: ssh

ファイルコピー : scp

ファイル転送 : sftp

(8)

鍵の作成 → もう済んでいるはず

もしまだだったら

以下を参照しながら作業すること

https://www.cspp.cc.u-tokyo.ac.jp/hanawa/class/prepare.pdf

• もし困ったことが起きたら,「手を挙げる」か,チャット

に書き込んでください。ブレークアウト(分科会)にて

対応します。

(9)

鍵の利用 (1/2)

1. 生成した鍵は、以下に入っている

2. 以下を入力する

3. 以下を入力すると、ファイルが見える

4. ここで、以下のファイルを区別する .ssh/

$ cd .ssh/

$ ls

id_rsa id_rsa.pub known_hosts

id_rsa :秘密鍵(決して外には出さないこと)

id_rsa.pub :公開鍵

(10)

鍵の利用(2 / 2)

5. 以下を入力して、公開鍵を表示する

$ cat id_rsa.pub

<公開鍵が表示される>

userX@host:~.ssh $ cat id_rsa.pub

ssh-rsa AAAA… … … … … … … (中略、英数字がしばらく続く)

… … … …nmsbl6jA2N userX@host

(ランダムな文字列の後、空白、ユーザ名@ホスト名で終わる)

(11)

鍵の利用(2 / 2)

6. “ssh-rsa …” で始まる部分を、マウス でドラッグしてコピーしておき、

後の公開鍵の登録に使う 。

(“ userX@host ” まで )

(12)

鍵の登録( 1/2 )

1. ブラウザを立ち上げる

2. 以下のアドレスを入力する

https://ofp-www.jcahpc.jp/

3. ( “English/Japanese” メニューで言語を変 更)

4. 「ユーザ名」に、配布された

“利用者番号”をいれる。

5. 「パスワード」に、配布された

“パスワード”を入力する。

渡される情報(例)

利用者番号:t58000 パスワード: $abc1ABC

(13)

ポータル画面(ログイン前)

配られた

利用者番号 と パスワード

を入力する

(14)

パスワード変更

最初のログイン時にパスワード変更を求められるので、新しい パスワードを入力してください。

パスワード規約に従わないと 受け付けられないので注意!!

(15)

鍵の登録

1.

左側メニューの「 SSH 公開鍵登録」を クリックする

2.

登録方式で「直接入力」をクリックする

3.

コピーしてあった公開鍵をペーストする

4.

「登録」ボタンを押す

(16)

ポータル画面

ここをクリック

(17)

ポータル画面(公開鍵登録)

ペースト後 クリック 公開鍵をペースト

cat ~/.ssh/id_rsa.pub

(18)

ポータル画面(公開鍵登録)

ここを確認 !!

(19)

Oakforest-PACS へログイン

• ターミナルから、以下を入力する

$ ssh ofp.jcahpc.jp -l txxxxx

「 -l 」はハイフンと小文字のL、

「 txxxxx 」は利用者番号

• 接続するかと尋ねられるので、 yes を入力する

• 鍵の設定時に入れた

自分が決めたパスワード(パスフレーズ)

を入力する

• 成功すると、ログインができる

(20)

Oakforest-PACS のデータを PC に取り込む

• ターミナルで scp コマンドを使う

$ scp [email protected]:~/a.f90 ./

「 txxxxx 」は利用者番号

OFP 上のホームディレクトリにある a.f90 を PC のカレント ディレクトリに取ってくる

ディレクトリごと取ってくる場合は -r を指定する

$ scp -r [email protected]:~/SAMP ./

OFP 上のホームディレクトリにある SAMP フォルダを、その

中身ごと、 PC のカレントディレクトリに取ってくる

(21)

PC のファイルを Oakforest-PACS に置く

• 同様にターミナルで scp コマンドを使う

$ scp ./a.f90 [email protected]:

「 txxxxx 」は利用者番号

PC のカレントディレクトリにある a.f90 を、 OFP 上のホーム ディレクトリに置く

ディレクトリごと置くには、 -r を指定する

$ scp -r ./SAMP [email protected]:

PC のカレントディレクトリにある SAMP フォルダを、

その中身ごと、 OFP 上のホームディレクトリに置く

(22)

Emacs の Tramp 機能

(必要な人のみ)

Emacs が自分のパソコンに入っている人は、

Tramp 機能により、遠隔のファイルが操作できます

Oakforest-PACS の秘密鍵を、 SSH に登録します

emacs を立ち上げます

ファイル検索モードにします

^x ^f (^は control )

• “Find file: ” の現在のパス名部分を消し、以下を 入れます

Find file:/ssh:[email protected]:

• パスフレーズを入れると、ローカルファイルのように

Oakforest-PACS 上のファイルが編集できます。

(23)

異なる PC の公開鍵登録

• OFP 上の ~/.ssh/authorized_keys に公開鍵を追加 します。

• 操作を誤ると、それまで使えていた SSH ログインがで きなくなるので注意!!

ポータルから公開鍵を再アップロードすれば直ります。

(24)

Oakforest-PACS における注意

/home ファイルシステムは容量が小さく、ログインに必要な

ファイルだけを置くための場所です。

/home に置いたファイルは計算ノードから参照できません。ジョブの実

行もできません。

転送が終わったら、 /work ファイルシステムに移動 (mv) してくだ さい。

または、直接 /work ファイルシステムを指定して転送してくださ い。

ホームディレクトリ : /home/t58xxx

cd コマンドで移動できます。

Work ディレクトリ : /work/gt58/t58xxx

(25)

スパコンへのログイン・

テストプログラム起動

東京大学 情報基盤センター 准教授 塙 敏博

(26)

講義の流れ

1. スパコン利用の仕方

• 単純な並列プログラムの実行

2. 総和演算

(27)

テストプログラム起動

(28)

UNIX備忘録

• emacs の起動: emacs 編集ファイル名

^x ^s (^は control ) :テキストの保存

^x ^c : 終了

( ^z で終了すると、スパコンの負荷が上がる。絶対にしないこと。)

^g : 訳がわからなくなったとき。

^k : カーソルより行末まで消す。

消した行は、一時的に記憶される。

^y : ^k で消した行を、現在のカーソルの場所にコピーする。

^s 文字列 : 文字列の箇所まで移動する。

^M x goto-line : 指定した行まで移動する。

(29)

UNIX備忘録

• rm ファイル名: ファイル名のファイルを消す。

rm *~ : test.c~ などの、~がついたバックアップファイルを消す。使う時は 慎重に。*~ の間に空白が入ってしまうと、全てが消えます。

• ls : 現在いるフォルダの中身を見る。

• cd フォルダ名: フォルダに移動する。

cd .. : 一つ上のフォルダに移動。

cd ~ :ホームディレクトリに行く。訳がわからなくなったとき。

• cat ファイル名: ファイル名の中身を見る

• make : 実行ファイルを作る

( Makefile があるところでしか実行できない)

make clean : 実行ファイルを消す。

( clean が Makefile で定義されていないと実行できない)

(30)

UNIX備忘録その 2

• less ファイル名: ファイル名の中身を見る (cat では 画面がいっぱいになってしまうとき)

スペースキー : 1画面スクロール

/ : 文字列の箇所まで移動する。

q : 終了 (訳がわからなくなったとき)

(31)

サンプルプログラムの実行

初めての並列プログラムの実行

(32)

サンプルプログラム名

• C言語版・Fortran 90 版共通ファイル:

Samples-ofp.tar.gz

• tar で展開後、C言語とFortran 90 言語の ディレクトリが作られる

• C/ : C 言語用

• F/ : Fortran90 言語用

• 上記のファイルが置いてある場所

/work/gt58/z30105

(33)

(1/2)

1.

cd コマンドを実行して Lustre ファイルシステムに移動する

$ cd /work/gt58/t58XXX ( 下線部は自分の ID に変えること )

2.

/work/gt58/z30105 にある Samples-ofp.tar.gz を 自分のディレクトリにコピーする

$ cp /work/gt58/z30105/Samples-ofp.tar.gz ./

3.

Samples-ofp.tar を展開する

$ tar xvfz Samples-ofp.tar.gz

4.

Samples ディレクトリに入る

$ cd Samples

5.

C 言語 : $ cd C Fortran90 言語 : $ cd F

6.

Hello ディレクトリに入る

$ cd Hello

(34)

並列版 Hello プログラムをコンパイルしよう (2/2)

6. ピュア MPI 用の Makefile (Makefile_pure) を 使って make する

$ make -f Makefile_pure

7. 実行ファイル (hello) ができていることを確認 する

$ ls

(35)

テムでのジョブ実行形態

以下の2通りがあります

インタラクティブジョブ実行

PCでの実行のように、コマンドを入力して実行する方法

スパコン環境では、あまり一般的でない

デバック用、大規模実行はできない

OFPでは、以下に限定

1ノード(68コア):2時間まで

16ノード(1,088コア):10分まで

バッチジョブ実行

バッチジョブシステムに処理を依頼して実行する方法

実行させたい処理をファイル(ジョブスクリプト)で指示する

スパコン環境で一般的

大規模実行用

OFPでは、最大2048ノード(139,264コア)(24時間)

※講義アカウントでは バッチジョブ実行のみ、

最大 16 ノード 15 分まで

(36)

Oakforest-PACS スーパーコンピュータシス テムでのジョブ実行形態 (2)

• 2 つの異なるメモリモードを用意

Flat モード

MCDRAMとDDR4メモリを個別にアクセス可能

Cache モード

MCDRAMはDDR4メモリのキャッシュとして働く

• 各ジョブキューには、 -flat, -cache をそれぞれ用意

講義アカウントでは、Flatモードだけが使えます。

(37)

( 本講義では使えません)

コマンドラインで以下を入力

1ノード実行用

$ pjsub --interact –g グループ名 –L rg=interactive- {flat,cache},elapse=01:00

16ノード実行用

$ pjsub --interact –g グループ名 –L rg=interactive- {flat,cache},node=16,elapse=01:00

※インタラクティブ用のノードがすべて使われている場合、

資源が空くまで、ログインできません。

※講習会アカウントでは使えません。

※コマンドは改行せず1行で入力すること

(38)

コンパイラの種類とインタラクティブ実行お よびバッチ実行

OFP では、コンパイラはバッチ実行、インタラクティブ実行で共 通に使えます。

例) Intel コンパイラ

Cコンパイラ: icc, mpiicc (Intel MPIを使う場合)

Fortran90コンパイラ: ifort, mpiifort (Intel MPIを使う場合)

KNL向け最適化: -xMIC-AVX512

ログインノードやプレポスト用ノードで実行する可能性もある場合:

-axMIC-AVX512

(39)

バッチ処理とは

スパコン環境では、通常は、インタラクティブ実行(コマンドライ ンで実行すること)はできません。

ジョブはバッチ処理で実行します。

キュー: 待ち行列

ユーザ スパコン

バッチ処理 システムが

ジョブを取り出す

実行

バッチキュー

ジョブの依頼

(40)

バッチキューの設定のしかた

• OFP でのバッチ処理は、富士通のバッチシステムで 管理されています。

• 以下、主要コマンドを説明します。

ジョブの投入: pjsub < ジョブスクリプトファイル名 >

自分が投入したジョブの状況確認: pjstat

投入ジョブの削除: pjdel < ジョブ ID>

バッチキューの状態を見る: pjstat --rsc

バッチキューの詳細構成を見る: pjstat --rsc -x

投げられているジョブ数を見る: pjstat -b

過去の投入履歴を見る: pjstat -H

同時に投入できる数/実行できる数を見る: pjstat --limit

(41)

本講義でのキュー名

• 本演習中のキュー名:

• lecture8-flat

最大 15 分まで

最大ノード数は 16 ノード (1088 コア ) まで

• 本演習時間以外( 24 時間)のキュー名:

• lecture-flat

利用条件は演習中のキュー名と同様

(42)

pjstat --rsc の実行画面例

$ pjstat --rsc

RSCGRP STATUS NODE regular-cache

|---- small-cache [ENABLE,START] 3846

`---- medium-cache [ENABLE,START] 3846 regular-flat

|---- small-flat [ENABLE,START] 3846

`---- medium-flat [ENABLE,START] 3846 interactive-cache

|---- interactive_n1-cache [ENABLE,START] 100

`---- interactive_n16-cache [ENABLE,START] 100 interactive-flat

|---- interactive_n1-flat [ENABLE,START] 100

`---- interactive_n16-flat [ENABLE,START] 100 debug-cache [ENABLE,START] 234

debug-flat [ENABLE,START] 234

prepost [ENABLE,START] 12

使える キュー名 ( リソース

グループ ) 現在

使えるか

ノードの

利用可能数

(43)

pjstat --rsc -x の実行画面例

$ pjstat --rsc -x

RSCGRP STATUS MIN_NODE MAX_NODE MAX_ELAPSE REMAIN_ELAPSE MEM(GB) PROJECT regular-cache

|---- small-cache [ENABLE,START] 1 128 48:00:00 48:00:00 82 pz0105

`---- medium-cache [ENABLE,START] 129 512 48:00:00 48:00:00 82 pz0105 regular-flat

|---- small-flat [ENABLE,START] 1 128 48:00:00 48:00:00 96 pz0105

`---- medium-flat [ENABLE,START] 129 512 48:00:00 48:00:00 96 pz0105 interactive-cache

|---- interactive_n1-cache [ENABLE,START] 1 1 02:00:00 02:00:00 82 pz0105

`---- interactive_n16-cache [ENABLE,START] 2 16 00:10:00 00:10:00 82 pz0105 interactive-flat

|---- interactive_n1-flat [ENABLE,START] 1 1 02:00:00 02:00:00 96 pz0105

`---- interactive_n16-flat [ENABLE,START] 2 16 00:10:00 00:10:00 96 pz0105 debug-cache [ENABLE,START] 1 128 00:30:00 00:30:00 82 pz0105 debug-flat [ENABLE,START] 1 128 00:30:00 00:30:00 96 pz0105 prepost [ENABLE,START] 1 1 06:00:00 06:00:00 222 pz0105

使える キュー名 ( リソース グループ )

現在

使えるか ノードの 実行情報

課金情報(財布)

実習では1つのみ

(44)

pjstat --rsc -b の実行画面例

$ pjstat --rsc –b

RSCGRP STATUS TOTAL RUNNING QUEUED HOLD OTHER NODE regular-cache

|---- small-cache [ENABLE,START] 45 40 5 0 0 3846

`---- medium-cache [ENABLE,START] 1 1 0 0 0 3846 regular-flat

|---- small-flat [ENABLE,START] 150 120 30 0 0 3846

`---- medium-flat [ENABLE,START] 7 3 4 0 0 3846 interactive-cache

|---- interactive_n1-cache [ENABLE,START] 0 0 0 0 0 100

`---- interactive_n16-cache [ENABLE,START] 0 0 0 0 0 100 interactive-flat

|---- interactive_n1-flat [ENABLE,START] 1 1 0 0 0 100

`---- interactive_n16-flat [ENABLE,START] 0 0 0 0 0 100 debug-cache [ENABLE,START] 7 4 3 0 0 234 debug-flat [ENABLE,START] 0 0 0 0 0 234 prepost [ENABLE,START] 0 0 0 0 0 12

使える キュー名 ( リソース グループ )

現在 使え るか

ジョブ の総数

実行して いるジョブ の数

待たされて いるジョブ の数

ノードの

利用可能

(45)

#!/bin/bash

#PJM -L rscgrp=lecture8-flat

#PJM -L node=16

#PJM --mpi proc=1088

#PJM -L elapse=0:01:00

#PJM -g gt58

mpiexec.hydra –n

${PJM_MPI_PROC} ./hello

JOB スクリプトサンプルの説明(ピュアMPI)

( hello-pure.bash, C 言語、 Fortran 言語共通)

リソースグループ名

: lecture8-flat

利用グループ名

: gt58

MPIジョブを68*16 = 1088 プロセス で実行する。

利用ノード数、

MPI プロセス数 実行時間制限

:1分

(46)

46

Intel Xeon Phi (Knights Landing)

Knights Landing Overview

1ノード1ソケット, 68コア

Chip: 36 Tiles interconnected by 2D Mesh Tile: 2 Cores + 2 VPU/core + 1 MB L2

Memory: MCDRAM: 16 GB on-package; High BW DDR4: 6 channels @ 2400 up to 384GB IO: 36 lanes PCIe Gen3. 4 lanes of DMI for chipset Node: 1-Socket only

Fabric: Omni-Path on-package (not shown)

Vector Peak Perf: 3+TF DP and 6+TF SP Flops Scalar Perf: ~3x over Knights Corner

Streams Triad (GB/s): MCDRAM : 400+; DDR: 90+

TILE

4

2 VPU Core

2 VPU Core 1MB L2

CHA

Package

Source Intel: All products, computer systems, dates and figures specified are preliminary based on current expectations, and are subject to change without notice. KNL data are preliminary based on current expectations and are subject to change without notice. 1Binary Compatible with Intel Xeon processors using Haswell Instruction Set (except TSX). 2Bandwidth numbers are based on STREAM-like memory access pattern when MCDRAM used as flat memory. Results have been estimated based on internal Intel analysis and are provided for informational purposes only. Any difference in system hardware or software design or configuration may affect actual performance.

Omni-path not shown

EDC EDC

PCIe Gen 3

EDC EDC

Tile

DDR MC DDR MC

EDC EDC misc EDC EDC

36 Tiles connected by

2D Mesh Interconnect

MCDRAM MCDRAM MCDRAM MCDRAM

3 D D R 4 C H A N N E L S

3 D D R 4 C H A N N E L S

MCDRAM MCDRAM MCDRAM MCDRAM

D M

I 2 x16

1 x4

X4 DMI

HotChips27 KNLスライド

より

compatible with main line IA. Boots standard OS.

Significant improvement in scalar and vector performance Integration of Memory on package: innovative memory architecture for high bandwidth and high capacity Integration of Fabric on package

Potential future options subject to change without notice.

All timeframes, features, products and dates are preliminary forecasts and subject to change without further notification.

Three products

KNL Self-Boot KNL Self-Boot w/ Fabric KNL Card (Baseline) (Fabric Integrated) (PCIe-Card)

2 VPU 2 VPU

Core 1MB Core L2

MCDRAM: 490GB/ 以上 (実測)

DDR4: 115.2 GB/

=(8Byte×2400MHz× 6 channel)

ピュアMPIの実行状況(ノード内)

MPIプロセス 無効のタイル()

MCDRAM: オンパッケージ の高バンド幅メモリ16GB + DDR4メモリ 16GBx6

= 16 + 96 GB

(47)

KNL の動作モード

メモリモード: 3 種類

Flat: MCDRAMとDDR4 が独立したアドレス

Cache: MCDRAMはDDR4メモリのキャッシュとして動作

Hybrid

クラスタリングモード : 5 種類

(All-to-all: アドレス情報が全体に分散… 非推奨)

Quadrant, Hemisphere: 内部でアドレス情報が4(または2)に分割(ユー ザからは見えない)

SNC-4, SNC-2: NUMAドメインが明示的に4 (or 2)に分割

モードの変更には再起動が必要

=> 現時点では、各モード (Flat, Cache) のジョブ

キューを用意 (regular-flat / regular-cache 等 )

(48)

メモリモード

• Cache モード

MCDRAM は L3 キャッ シュとして動作

• Flat モード

MCDRAM を明示的に使 い分け

DDR4 96 GB MCDRAM

16 GB

MCDRAM 16 GB

DDR4 96 GB

物理 アドレス

(49)

(ピュア MPI )

• このサンプルの JOB スクリプトは

hello-pure.bash

です。

• 配布のサンプルでは、キュー名が ” lecture-flat” になっています

• $ emacs hello-pure.bash

で、 “lecture-flat” → “lecture8-flat”

に変更してください

• gt00=>gt58

(50)

並列版 Hello プログラムを実行しよう

(ピュア MPI )

1. Hello フォルダ中で以下を実行する

$ pjsub hello-pure.bash

2. 自分の導入されたジョブを確認する

$ pjstat

3. 実行が終了すると、以下のファイルが生成される hello-pure.bash.e XXXXXX

hello-pure.bash.o XXXXXX ( XXXXXX は数字)

4. 上記の標準出力ファイルの中身を見てみる

$ cat hello-pure.bash.o XXXXXX

5. “ Hello parallel world! ”が、

68 プロセス *16 ノード =1088 表示されていたら成功。

(51)

標準エラー出力

バッチジョブの実行が終了すると、標準出力ファイルと標準エ ラー出力ファイルが、ジョブ投入時のディレクトリに作成されま す。

標準出力ファイルにはジョブ実行中の標準出力、標準エラー 出力ファイルにはジョブ実行中のエラーメッセージが出力され ます。

ジョブ名 .oXXXXX --- 標準出力ファイル

ジョブ名 .eXXXXX --- 標準エラー出力ファイル

(XXXXX はジョブ投入時に表示されるジョブのジョブ ID)

(52)

並列版 Hello プログラムの説明( C 言語)

#include <stdio.h>

#include <mpi.h>

int main(int argc, char* argv[]) { int myid, numprocs;

int ierr, rc;

ierr = MPI_Init(&argc, &argv);

ierr = MPI_Comm_rank(MPI_COMM_WORLD, &myid);

ierr = MPI_Comm_size(MPI_COMM_WORLD, &numprocs);

printf("Hello parallel world! Myid:%d ¥n", myid);

rc = MPI_Finalize();

exit(0);

}

MPI の初期化

自分の ID 番号を取得

:各PEで値は異なる

全体のプロセッサ台数 を取得

:各PEで値は同じ

(演習環境では 1088 、もしくは 16 ) MPI の終了

このプログラムは、全PEで起動される

(53)

並列版 Hello プログラムの説明( Fortran90 言語)

program main use mpi

implicit none

integer :: myid, numprocs integer :: ierr

call MPI_INIT(ierr)

call MPI_COMM_RANK(MPI_COMM_WORLD, myid, ierr) call MPI_COMM_SIZE(MPI_COMM_WORLD, numprocs, ierr) print *, "Hello parallel world! Myid:", myid

call MPI_FINALIZE(ierr) stop

end program main

MPI の初期化

自分の ID 番号を取得

:各PEで値は異なる

全体のプロセッサ台数 を取得

:各PEで値は同じ

(演習環境では

1088 、もしくは 16 ) MPI の終了

このプログラムは、全PEで起動される

(54)

時間計測方法( C 言語)

double t0, t1, t2, t_w;

..

ierr = MPI_Barrier(MPI_COMM_WORLD);

t1 = MPI_Wtime();

<ここに測定したいプログラムを書く>

t2 = MPI_Wtime();

t0 = t2 - t1;

ierr = MPI_Reduce(&t0, &t_w, 1, MPI_DOUBLE,MPI_MAX, 0, MPI_COMM_WORLD);

バリア同期後

時間を習得し保存

各プロセッサーで、t 0 の値は 異なる。

この場合は、最も遅いものの

値をプロセッサ0番が受け取る

(55)

時間計測方法( Fortran90 言語)

double precision t0, t1, t2, t_w double precision MPI_WTIME ..

call MPI_BARRIER(MPI_COMM_WORLD, ierr) t1 = MPI_WTIME(ierr)

<ここに測定したいプログラムを書く>

t2 = MPI_WTIME(ierr) t0 = t2 - t1

call MPI_REDUCE(t0, t_w, 1, &

& MPI_DOUBLE_PRECISION, &

& MPI_MAX, 0, MPI_COMM_WORLD, ierr)

バリア同期後

時間を習得し保存

各プロセッサーで、t 0 の値 は異なる。

この場合は、最も遅いも

のの値をプロセッサ0番

が受け取る

(56)

サンプルプログラムの説明

Hello/

並列版Helloプログラム

hello-pure.bash, hello-hy68.bash : ジョブスクリプトファイル

Cpi/

円周率計算プログラム

cpi-pure.bash ジョブスクリプトファイル

Wa1/

逐次転送方式による総和演算

wa1-pure.bash ジョブスクリプトファイル

Wa2/

二分木通信方式による総和演算

wa2-pure.bash ジョブスクリプトファイル

Cpi_m/

円周率計算プログラムに時間計測ルーチンを追加したもの

cpi_m-pure.bash ジョブスクリプトファイル

(57)

MPI 実行時のリダイレクトについて

• Oakforest-PACS スーパーコンピュータシステムでは、

MPI 実行時の入出力のリダイレクトができます。

• 例) mpiexec.hydra -n

${PJM_MPI_PROC} ./a.out < in.txt > out.txt

• < 参考 > システムによっては、 mpirun のオプ

ションを使う必要があります。

(58)

実習課題

(59)

演習課題

1.

逐次転送方式のプログラムを実行

Wa1 のプログラム

2.

二分木通信方式のプログラムを実行

Wa2のプログラム

3.

時間計測プログラムを実行

Cpi_mのプログラム

4.

プロセス数を変化させて、サンプルプログラムを実行

5.

Hello プログラムを、以下のように改良

MPI_Sendを用いて、プロセス0からChar型のデータ

“Hello World!!”を、その他のプロセスに送信する

その他のプロセスでは、MPI_Recvで受信して表示する

(60)

総和演算プログラム(逐次転送方式)

各プロセスが所有するデータを、全プロセスで加算し、

あるプロセス1つが結果を所有する演算を考える。

素朴な方法(逐次転送方式)

1. (0番でなければ)左隣のプロセスからデータを受信する;

2. 左隣のプロセスからデータが来ていたら;

1. 受信する;

2. <自分のデータ>と<受信データ>を加算する;

3. (1023番でなければ)右隣のプロセスに<2の加算した結果を>送信す ;

4. 処理を終了する;

実装上の注意

左隣りとは、(myid-1)のIDをもつプロセス

右隣りとは、(myid+1)のIDをもつプロセス

myid=0のプロセスは、左隣りはないので、受信しない

myid=p-1のプロセスは、右隣りはないので、送信しない

(61)

による加算

CPU0 CPU CPU CPU

所有データ

送信 送信 送信

最終結果

所有データ 所有データ 所有データ

(62)

1対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_DOUBLE, myid-1, 0, MPI_COMM_WORLD, &istatus);

}

dsendbuf = dsendbuf + drecvbuf;

if (myid != nprocs-1) {

ierr = MPI_Send(&dsendbuf, 1, MPI_DOUBLE, myid+1, 0, MPI_COMM_WORLD);

}

if (myid == nprocs-1) printf ("Total = %4.2lf ¥n", dsendbuf);

….

}

受信用システム配列の確保

自分より一つ少ない ID番号(myid-1)から、

double型データ1つを 受信しdrecvbuf変数に 代入

自分より一つ多い ID番号(myid+1)に、

dsendbuf変数に入っ ているdouble型データ 1つを送信

(63)

(逐次転送方式、 Fortran 言語)

program main

….

integer :: istatus(MPI_STATUS_SIZE)

….

dsendbuf = myid drecvbuf = 0.0

if (myid .ne. 0) then

call MPI_RECV(drecvbuf, 1, MPI_REAL8, &

myid-1, 0, MPI_COMM_WORLD, istatus, ierr) endif

dsendbuf = dsendbuf + drecvbuf if (myid .ne. numprocs-1) then

call MPI_SEND(dsendbuf, 1, MPI_REAL8, &

myid+1, 0, MPI_COMM_WORLD, ierr) endif

if (myid .eq. numprocs-1) then print *, "Total = ", dsendbuf endif

….

stop

end program main

受信用システム配列の確保

自分より一つ少ない ID番号(myid-1)から、

double型データ1つを 受信しdrecvbuf変数に 代入

自分より一つ多い ID番号(myid+1)に、

dsendbuf変数に 入っているdouble型 データ1つを送信

(64)

総和演算プログラム(二分木通信方式)

二分木通信方式

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)番プロセスに、データを転送する;

処理を終了する;

(65)

総和演算プログラム(二分木通信方式)

0 1 2 3 4 5 6 7

1段目

1 3 5 7

2段目

3 7

3段目=log2(8)段目

0 1 2 3 4 5 6 7

1 3 5 7

3 7

7

(66)

総和演算プログラム(二分木通信方式)

実装上の工夫

要点: プロセス番号の2進数表記の情報を利用する

第i段において、受信するプロセスの条件は、以下で書ける:

myid & k が k と一致

ここで、k = 2^(i-)

つまり、プロセス番号の2進数表記で右からi番目のビットが立っている プロセスが、送信することにする

また、送信元のプロセス番号は、以下で書ける:

myid + k

つまり 、通信が成立するプロセス番号の間隔は2^(i-)←二分木なので

送信プロセスについては、上記の逆が成り立つ。

(67)

総和演算プログラム(二分木通信方式)

逐次転送方式の通信回数

明らかに、nprocs-1 回

二分木通信方式の通信回数

見積もりの前提

各段で行われる通信は、完全に並列で行われる

(通信の衝突は発生しない)

段数の分の通信回数となる

つまり、log2(nprocs) 回

両者の通信回数の比較

プロセッサ台数が増すと、通信回数の差(=実行時間)が とても大きくなる

1024プロセス構成では、1023回 対 10回!

でも、必ずしも二分木通信方式がよいとは限らない(通信衝突の多発

(68)

性能プロファイラ

Oakforest-PACS

Intel VTune Amplifier

PAPI (Performance API)

Oakforest-PACS PAライブラリ

Web ポータルから「 ドキュメント閲覧 」 ⇨ Oakforest-PACS システム利用手引書 7.1. パフォーマンス分析ツール

または

Oakforest-PACS PA ライブラリ利用ガイド

を参照してください。

(69)

レポート課題

7.

[L05] MPI とは何か説明せよ。

8.

[L10] 逐次転送方式、2分木通信方式の実行時間を計測し、ど

の方式が何台のプロセッサ台数で有効となるかを明らかにせよ。

また、その理由について、考察せよ。

9.

[L15] 二分木通信方式について、プロセッサ台数が2のべき乗

でないときにも動作するように、プログラムを改良せよ。

問題のレベルに関する記述:

•L00: きわめて簡単な問題。

•L10: ちょっと考えればわかる問題。

•L20 標準的な問題。

•L30 数時間程度必要とする問題。

•L40 数週間程度必要とする問題。複雑な実装を必要とする。

•L50 数か月程度必要とする問題。未解決問題を含む。

※L40以上は、論文を出版するに値する問題。

(70)

来週へつづく

単体性能チューニング

参照

関連したドキュメント

In the computation of integrals and in the numerical solution of integral equations, one often has to deal with the numerical integration of functions with endpoint weak

We give a new and self-contained proof of the existence and unicity of the flow for an arbitrary (not necessarily homogeneous) smooth vector field on a real supermanifold, and

In the non-Archimedean case, the spectral theory differs from the classical results of Gelfand-Mazur, because quotients of commutative Banach algebras over a field K by maximal ideals

In the non-Archimedean case, the spectral theory differs from the classical results of Gelfand-Mazur, because quotients of commutative Banach algebras over a field K by maximal ideals

 Adjustable soft--start: Every time the controller starts to operate (power on), the switching frequency is pushed to the programmed maximum value and slowly moves down toward

Amount of Remuneration, etc. The Company does not pay to Directors who concurrently serve as Executive Officer the remuneration paid to Directors. Therefore, “Number of Persons”

To synchronize the receiver frequency to a carrier signal, the oscillator frequency could be tuned using the capacitor bank however, the recommended method to implement

(1) The T stock is acquired in a transaction that does not result in P taking a carryover basis (in whole or in part) from T's former shareholders.. regard to