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

アカウントを発行します

N/A
N/A
Protected

Academic year: 2021

シェア "アカウントを発行します"

Copied!
78
0
0

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

全文

(1)

(事前登録者のみです )

1. 本人証明ができるものを用意します

• 学生証、運転免許証、など

• いずれも無い場合は、学内サービス (UTokyo- Wifi など)にログインできることで証明する

2. 名前が呼ばれます

3. 本人確認の上、アカウントが記載され た紙を配布します

4. 授業で指示があるまで、ログイン作業

を行わないでください

(2)

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

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

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

(3)

講義の流れ

1. ログイン作業

2. スパコン利用の仕方

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

3. 総和演算

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

5. レポート課題

(4)

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

1. 9

24

日: ガイダンス

2. 10

1

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

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

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

4. 10

15

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

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

5. 10

29

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

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

6. 11

5

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

7. 11

12

l べき乗法の並列化

8. 11

26

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

9. 12

3

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

10. 12

10

l LU分解法(1)

l コンテスト課題発表

11. 12

17

l LU分解法(2)

12. 1

7

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

13. 1

14

l RB-Hお試し、研究紹介他

202023日(月)24時 厳守

(5)

ログイン作業

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

(6)

ユーザ名の確認

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

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

(xxxは 3 桁番号)

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

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

(7)

鍵の作成

すでに作成済みの人は改めて作る必要はありません。

1. ターミナルを起動する

2. 以下を入力する

$ ssh-keygen -t rsa

3. 鍵の収納先を聞かれるので、リターンを押す

4. 鍵を使うためのパスワードを聞かれるので、

センターのパスワードではない、自分の好きな パスワードを入れる(パスフレーズとよぶ)

5. もう一度、上記のパスフレーズを入れる

6. 鍵が生成される

(8)

鍵の利用 (1/2)

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

2. 以下を入力する

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

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

$ cd .ssh/

$ ls

id_rsa id_rsa.pub known_hosts id_rsa :秘密鍵

id_rsa.pub :公開鍵

(9)

鍵の利用(2 / 2)

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

$ cat id_rsa.pub

<公開鍵が表示される>

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

登録に使う 。

(“.u-tokyo.ac.jp” まで )

(10)

鍵の登録( 1/2 )

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

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

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

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

4. 「ユーザ名」にセンターから配布された、

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

5. 「パスワード」に、センターから配布された

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

(11)

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

センターから配られた

利用者番号 と パスワード

を入力する

(12)

パスワード変更

最初のログイン時にパスワード変更を求められるので、新しい

パスワードを入力してください。

(13)

鍵の登録

1.

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

2.

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

3.

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

4.

「登録」ボタンを押す

(14)

ポータル画面

ここをクリック

(15)

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

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

cat ~/.ssh/id_rsa.pub

(16)

ポータル画面(公開鍵登録:別のやり方)

指定後クリック

~/.ssh/id_rsa.pub

“RSA” である

ことを確認

(17)

Oakforest-PACS へログイン

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

$ ssh ofp.jcahpc.jp -l txxxxx

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

「 txxxxx 」は利用者番号

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

• 鍵の設定時に入れた

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

を入力する

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

(18)

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

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

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

「 txxxxx 」は利用者番号

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

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

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

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

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

(19)

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

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

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

「 txxxxx 」は利用者番号

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

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

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

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

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

(20)

Emacs の Tramp 機能

(必要な人のみ)

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

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

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

emacs を立ち上げます

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

^x ^f (^は control )

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

Find file:/ssh:[email protected]:

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

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

(21)

異なる PC の公開鍵登録

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

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

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

(22)

Oakforest-PACS における注意

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

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

/home

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

行もできません。

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

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

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

cd

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

Work ディレクトリ : /work/gt34/t34xxx

(23)

スパコンへのログイン・

テストプログラム起動

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

(24)

講義の流れ

1. スパコン利用の仕方

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

2. 総和演算

(25)

テストプログラム起動

(26)

UNIX備忘録

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

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

^x ^c : 終了

^z

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

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

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

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

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

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

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

(27)

UNIX備忘録

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

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

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

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

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

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

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

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

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

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

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

(28)

UNIX備忘録その 2

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

スペースキー

: 1

画面スクロール

/ :

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

q

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

(29)

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

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

(30)

サンプルプログラム名

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

Samples-ofp.tar.gz

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

• C/ : C 言語用

• F/ : Fortran90 言語用

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

/work/gt34/z30105

(31)

(1/2)

1.

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

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

2.

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

$ cp /work/gt34/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

(32)

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

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

$ make -f Makefile_pure

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

$ ls

(33)

テムでのジョブ実行形態

以下の2通りがあります

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

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

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

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

OFPでは、以下に限定

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

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

バッチジョブ実行

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

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

スパコン環境で一般的

大規模実行用

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

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

最大 16 ノード 15 分まで

(34)

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

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

Flat モード

MCDRAM

DDR4

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

Cache モード

MCDRAM

DDR4

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

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

講義アカウントでは、

Flat

モードだけが使えます。

(35)

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

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

1

ノード実行用

$ pjsub --interact –g gt34 –L rg=interactive- {flat,cache},elapse=01:00

16

ノード実行用

$ pjsub --interact –g gt34 –L rg=interactive- {flat,cache},node=16,elapse=01:00

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

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

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

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

(36)

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

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

例) Intel コンパイラ

C

コンパイラ

: icc, mpiicc (Intel MPI

を使う場合)

Fortran90

コンパイラ

: ifort, mpiifort (Intel MPI

を使う場合)

KNL

向け最適化:

-xMIC-AVX512

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

-axMIC-AVX512

(37)

バッチ処理とは

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

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

キュー

:

待ち行列

ユーザ スパコン

バッチ処理 システムが

ジョブを取り出す

実行

バッチキュー

ジョブの依頼

(38)

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

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

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

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

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

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

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

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

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

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

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

(39)

本講義でのキュー名

• 本演習中のキュー名:

• lecture4-flat

最大 15 分まで

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

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

• lecture-flat

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

(40)

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

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

グループ ) 現在

使えるか

ノードの

利用可能数

(41)

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つのみ

(42)

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

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

現在 使え るか

ジョブ の総数

実行して いるジョブ の数

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

ノードの

利用可能

(43)

#!/bin/bash

#PJM -L rscgrp=lecture4-flat

#PJM -L node=16

#PJM --mpi proc=1088

#PJM -L elapse=0:01:00

#PJM -g gt34

mpiexec.hydra –n

${PJM_MPI_PROC} ./hello

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

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

リソースグループ名

: lecture-flat

利用グループ名

: gt34

MPI

ジョブを

68*16 = 1088

プロセス で実行する。

利用ノード数、

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

:1分

(44)

44

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

(45)

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

(46)

メモリモード

• Cache モード

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

• Flat モード

MCDRAM を明示的に使 い分け

DDR4 96 GB MCDRAM

16 GB

MCDRAM 16 GB

DDR4 96 GB

物理 アドレス

(47)

(ピュア MPI )

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

hello-pure.bash

です。

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

• $ emacs hello-pure.bash

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

に変更してください

• gt00=>gt34

(48)

並列版 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 表示されていたら成

功。

(49)

標準エラー出力

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

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

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

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

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

(50)

並列版 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で起動される

(51)

並列版 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で起動される

(52)

時間計測方法( 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番が受け取る

(53)

時間計測方法( 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番

が受け取る

(54)

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

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 ジョブスクリプトファイル

(55)

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

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

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

• 例) mpiexec.hydra -n

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

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

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

(56)

実習課題

(57)

演習課題

1.

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

Wa1

のプログラム

2.

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

Wa2

のプログラム

3.

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

Cpi_m

のプログラム

4.

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

5.

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

MPI_Send

を用いて、プロセス

0

からChar型のデータ

Hello World!!

”を、その他のプロセスに送信する

その他のプロセスでは、

MPI_Recv

で受信して表示する

(58)

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

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

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

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

1.

0

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

2.

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

1. 受信する;

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

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

4. 処理を終了する;

実装上の注意

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

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

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

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

(59)

による加算

CPU0 CPU CPU CPU

所有データ

送信 送信 送信

最終結果

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

(60)

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つを送信

(61)

(逐次転送方式、 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つを送信

(62)

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

二分木通信方式

1. k =

;

2. for (i=0; i < log2(nprocs); i++)

3. if ( (myid & k) == k)

(myid – k)番プロセスからデータを受信;

自分のデータと、受信データを加算する;

k = k * 2;

4. else

(myid + k)番プロセスに、データを転送する;

処理を終了する;

(63)

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

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

(64)

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

実装上の工夫

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

i

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

myid & k

k

と一致

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

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

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

myid + k

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

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

(65)

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

逐次転送方式の通信回数

明らかに、

nprocs

-1 回

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

見積もりの前提

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

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

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

つまり、

log2(nprocs)

両者の通信回数の比較

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

1024

プロセス構成では、

1023

回 対

10

回!

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

(66)

性能プロファイラ

Oakforest-PACS

Intel VTune Amplifier

PAPI (Performance API)

Oakforest-PACS PA

ライブラリ

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

または

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

を参照してください。

(67)

レポート課題

7.

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

8.

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

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

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

9.

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

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

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

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

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

•L20: 標準的な問題。

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

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

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

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

(68)

来週へつづく

単体性能チューニング

(69)

Windows 、 PuTTY の入手

• セキュリティ上問題が出ることも多いので、なるべく最 新版をお使いください。

• 以下をアクセスする

http://hp.vector.co.jp/authors/VA024651/PuTTYkj.

html

• putty-0.71-jp20190410.zip をダウンロードして、

zip ファイルを展開する。

(70)

鍵の設定

PuTTY の配布ファイルを展開すると、 puttygen.exe という実行ファイルがあるので、それをクリックする

右側にある、“ Generate ”ボタンをクリックする

バーが出る。バーが右端に行くまで待つ。

この間、空白エリアにマウスを移動させる。そうしないと、

いつまでたっても、鍵が生成されない。

“Key passphrase” に、ログインするとき(この鍵を使うとき)に 使うパスワードを入れる。

注意:センターから配られたパスワードではない。

センターから配られたパスワードを入れないこと。

“Save private key” をクリックし、適切な場所に鍵を

保存する。

(71)

現在の状況(以下の画面は消さないこと)

これが「公開鍵」。

OFPに登録する

これが、ログインする ときに使うパスワー ド。

センターから配られた パスワードを入れない こと!

これでセーブされるの が「秘密鍵」。

他人に見せては いけない。

(72)

Oakforest-PACS へのログイン

“セッション一覧”に、適当な名前( ofp )を入れ、

“保存”をクリック

下の、“開く”をクリック

“ login as: ”が出るので、センターの利用者番号 を入力

Authenticating with public key ”rsa-key-20080820“

Passphrase for key ”rsa-key-20080820“ のような

メッセージが出るので、自分で設定した鍵を利用するための パスワードを入力

(注:センターが配布したパスワードではない)

以上が正しければ、ログインができる

(73)

現在の手順

手順1

手順2 手順5

手順6:

ログインへ

ofp.jcahpc.jp

ofp

(74)

現在の手順

手順3

手順4

(75)

Oakforest-PACS へのログイン(以降)

• 以降、“セッション読込”にある、設定ファイル

(先ほどの例では、“ ofp ”)を指定して、

“読込”ボタンをクリックすると、

先ほどの設定が復元できる

• 同様に、“開く”をクリックすると、ログインできる

• 画面が小さいという人は、、、

“ウインドウ”ー“外観”をクリックし、

フォントの設定にある“変更”をクリックする

サイズから、適切なフォントサイズを指定する

設定ファイルに、この設定を保存する。

(保存を忘れると、次回にこの環境が復元できない。)

(76)

WinSCP のインストール

以下のサイトへ行く

http://winscp.net/eng/docs/lang:jp

適当なバージョンをダウンロード

インストーラで日本語を設定すると、日本語版が ダウンロードできる

アイコンをクリックする

ホスト名に、

ofp.jcahpc.jp

ユーザ名に、センター発行の利用者番号

秘密鍵に、生成した秘密鍵ファイルを指定する

プロトコルを、“

SCP

”にする

“ログイン”を押すと、ファイル転送モードになる

(77)

(必要な人のみ)

以下のアドレスから、 UTF-8 TeraTerm Pro with TTSSH2 を インストールしてください:

http://ttssh2.osdn.jp

1.

「ダウンロード」をクリック

2.

「 4.104 」の「 teraterm-4.104.exe 」をクリック

3.

ブラウザに「セキュリティ保護のため … 」が出る場合、

クリックしてブロックを解除

4.

「このファイルを実行または保存しますか?」

が出るので、「実行」をクリック

5.

言語(Japanse)や「同意」を確認して、インストール

(78)

TeraTerm Pro の実行

(必要な人のみ)

• TeraTerm Pro を実行したら、「秘密鍵」を

登録してログインする

参照

関連したドキュメント

and Hosking., T.: Nested Transactional Memory: Model and Preliminary Architecture Sketches., Science of Computer Programming, pp.. and Gonz´ alez, A.: A Dynamically

Effect of Internal Cost Manage- ment, Information Systems Integration, and Absorptive Capacity on Inter-organizational Cost Management in

A.: LogTM: Log-based Transactional Memory, Proceedings of the Twelfth IEEE Symposium on High-Performance Computer Architecture 2006.. and Wood, D.A.: Supporting

It achieves 613 MB/sec of remote memory bandwidth in STREAM benchmark on Myri-10G/bonding=4 and high performance of applications in NPB and Himeno benchmarks.. It has opened the door

We thus propose a software development tool that supports combining heterogeneous distributed components resulting in an application of high reliability... Broker

1.アカウント設定画面を起動します。

Loh, “There and Back Again: Optimizing the Interconnect in Networks of Memory Cubes,” June 2017 ISCA '17: Proceedings of the 44th Annual International Symposium

⑦ 受信メールサーバー情報を以下の内容で設定します。 サーバーの種類 POP サーバーのアドレス mail.sps.shopserve.jp ポート 995