第190回 お試しアカウント付き
並列プログラミング講習会「MPI上級編」受講ガイド
東京⼤学 情報基盤センター
塙 敏博

2022/10/12

講習会：MPI上級

内容に関するご質問はhanawa ＠ cc.u-tokyo.ac.jpまで、お願いします。
1

講習会概略• 開催⽇： 2022年10⽉12⽇（⽔） 10:00 – 17:30• 形態：
ZoomおよびSlackを⽤いたオンライン講習会• 使⽤システム：Wisteria/BDEC-01 (Odyssey, Aquarius)• 講習会プログラム：• 10:00 – 11:20
MPI概要、Wisteria/BDEC-01で使えるMPI実装
ノンブロッキング通信、演習• 11:30 - 12:30• (12:30 – 13:30 お昼休憩)• 13:30 – 14:30
派⽣データ型、MPI-IO、演習• 14:40 – 16:10
コミュニケータ、マルチスレッド、演習• 16:20 – 17:30
⽚側通信、演習
2022/10/12

講習会：MPI上級

2Zoom関連• 「⼿をあげる」機能• 質問がある際，全体の状況を確認するため使⽤• ブレークアウトセッション• 画⾯を共有しながらエラー対応する際に使⽤• （なるべく⼝頭でのやりとりやSlackで対応する予定）• https://utelecon.adm.u-tokyo.ac.jp/zoom/how_to_use

2022/10/12

講習会：MPI上級

3

「⼿を挙げる」機能の使い⽅（1/3）

Zoomメニュー中の「参加者」をクリック

2022/10/12

講習会：MPI上級

4

「⼿を挙げる」機能の使い⽅（2/3）

画⾯右下の「⼿を挙げる」をクリック

2022/10/12

講習会：MPI上級

5

「⼿を挙げる」機能の使い⽅（3/3）
⾃分のところに⼿のアイコンが現れる「⼿を降ろす」をクリックすると，元に戻る

2022/10/12

講習会：MPI上級

6

ブレークアウトセッション（1/4）• 演習時に使⽤するかもしれません• 演習中に「ヘルプを求める」ことができます• ホストを招待した後に「画⾯を共有」することで，皆さんの記述したプログラムを⼀緒に⾒ながら問題解決にあたります

Zoomメニュー中の「ヘルプを求める」をクリック

2022/10/12

講習会：MPI上級

7

ブレークアウトセッション（2/4）• この表⽰が出たら，「ホストを招待」をクリック• ホストの承認待ちに移⾏• 他の受講者のヘルプ中など，直ちに対応できない場合もあります

2022/10/12

講習会：MPI上級

8

ブレークアウトセッション（3/4）• この状態になると，ホスト（講師）と会話可能• マイクの有効化，画⾯の共有などをしながら相談

2022/10/12

講習会：MPI上級

9ブレークアウトセッション（4/4）

2.「メインセッションに戻る」
をクリック
注：「ミーティングを退出」は，講習会からの退出になってしまいます1.「ブレークアウトセッションを退出」
をクリック

2022/10/12

講習会：MPI上級

10

Slack関連• ブラウザ上で使う場合には：• https://w1590055008-bgo338004.slack.com/archives/C044X1G3XV5• 注：ログインには，事前にお配りしたリンクからの登録が必要です• 質問対応に使⽤• コードの貼り付け⽅• スレッドの確認⽅法• 以下，ブラウザ版で説明しますがアプリ版でも操作は同じです

2022/10/12

講習会：MPI上級

11

質疑応答チャンネルへの移動

左側の「チャンネル」の中に「#第190回-mpi上級編」があるので，クリック「#第190回-mpi上級編」が⾒つからない場合は，「チャンネル」の右側の「＋」をクリックし，さらに「チャンネル⼀覧」をクリック．
チャンネル⼀覧の中に「#第190回-mpi上級編」があるので，「参加する」をクリック

2022/10/12

講習会：MPI上級

12

メッセージの⼊⼒⽅法

最下部に⼊⼒欄があるので，質問内容を記載してCtrl+Enter する（右下の「メッセージを送信する」でも同じ）

2022/10/12

講習会：MPI上級

13

コードの貼り付け⽅「コードブロック」とあるものをクリックすると枠が⽣成されるので，この中にコピペするのがやりやすい
Ctrl+Alt+Shift+C でも良いが，これはやりづらい```（⽇本語配列ではShift+@を3連打）しても良い
2022/10/12

講習会：MPI上級

14

スレッドの確認⽅法
左上の「スレッド」をクリックすると，⾃分が参加しているスレッドの⼀覧が表⽰されます

2022/10/12

講習会：MPI上級

15

ユーザアカウント• 使⽤システム： Wisteria/BDEC-01 (Wisteria)• $ ssh USERNAME@wisteria.cc.u-tokyo.ac.jp• 本講習会でのユーザ名• 利⽤者番号： tABCDE（ABCDEは，適宜書き換えてください）• 利⽤グループ： gt00

• 利⽤期限• 11/12 9:00まで有効• 注:本講習会関連の質問はhanawa[at]cc.u-tokyo.ac.jpまで• Slackで質問していただいて結構です• （講習会アカウントでは）公式の相談対応システムは使わないでください
2022/10/12

講習会：MPI上級

16

テストプログラムの概要• C⾔語版・Fortran版共通ファイル：
MPI-advanced.tar.gz• tarで展開後，物によってはそれぞれの⾔語⽤のディレクトリが作られる• C/: C⾔語⽤
• F/ : Fortran 90⽤• 上記ファイルの置き場所：/work/gt00/share2022/10/12

講習会：MPI上級

17

サンプルプログラムの取得（1/2）• 実⾏してもらうコマンドは $ 以降に⻘字で記載しています• ターミナルへの⼊⼒が終わったら 「Enter」 キーを押してください

1. Lustreファイルシステムに移動$ cd /work/gt00/tABCDE# 下線部は⾃分のIDに変更
2. /work/gt00/share/ にあるサンプルファイルをコピー$ cp /work/gt00/share/MPI-advanced.tar.gz .
MPI-advanced.tar.gz と .（ドット）の間に半⾓スペース
3. サンプルファイルを展開$ tar xvfz MPI-advanced.tar.gz
2022/10/12

講習会：MPI上級

18

サンプルプログラムの取得（2/2）
4. MPI-advanced ディレクトリに⼊る$ cd MPI-advanced
5. サンプルプログラムのディレクトリがあることを確認$ ls2022/10/12

講習会：MPI上級

19

Wisteria/BDEC-01でのジョブ実⾏• 以下の2通りの実⾏形態があります
1. バッチジョブ実⾏• バッチジョブシステムに処理を依頼して実⾏• 実⾏したい処理をファイル（ジョブスクリプト）で指⽰• スパコン環境で⼀般的• ⼤規模実⾏⽤※講習会アカウントではバッチジョブ実⾏のみ，最⼤12ノード15分まで• Wisteria-Odysseyでは，最⼤2,304ノード（139264コア），24時間まで

2. インタラクティブジョブ実⾏• PCでの実⾏のように，コマンドを⼊⼒して実⾏• スパコン環境では⼀般的ではない• デバッグ⽤，⼤規模実⾏はできない• 1ノード（68コア）: 2時間まで• 16ノード（1088コア）: 10分まで

2022/10/12

講習会：MPI上級

20

バッチ処理とは• スパコン環境では，通常は，インタラクティブ実⾏（コマンドラインで実⾏すること）はできません• ジョブはバッチ処理で実⾏します
バッチキュー
バッチ処理
システムがジョブを取り出す

ジョブの依頼実⾏
2022/10/12

ユーザ

講習会：MPI上級

スパコン

21

バッチキューの設定⽅法• Wisteriaでのバッチ処理は、富⼠通のバッチシステムで管理• 主要コマンド：• ジョブの投⼊：pjsub <ジョブスクリプトファイル名>• ⾃分が投⼊したジョブの状況確認：pjstat• 投⼊ジョブの削除：pjdel <ジョブID>• 計算ノードの込み具合を⾒る: pjstat --rscuse• バッチキューの状態を⾒る：pjstat --rsc• バッチキューの詳細構成を⾒る：pjstat --rsc -x• 投げられているジョブ数を⾒る：pjstat --rsc -b• 過去の投⼊履歴を⾒る：pjstat -H• 同時に投⼊できる数／実⾏できる数を⾒る：pjstat --limit
2022/10/12

講習会：MPI上級

22

本お試し講習会でのキュー・グループ名• 本講習会中のキュー名• tutorial-o (Odyssey)• 最⼤15分まで• 最⼤ノード数は12ノード（576コア）まで• tutorial-a (Aquarius)• 最⼤15分まで• 最⼤GPU数は4GPUまで• 本講習会終了後のキュー名• lecture-o, lecture-a• 利⽤条件tutorial-o, tutorial-aと同様• グループ名: gt00
2022/10/12

講習会：MPI上級

23

24
24

2022/10/12

お試し講習会のジョブクラス：バッチジョブ（Odyssey）
キュー名

ノード数

制限時間（Elapsed）

メモリ容量（GB）

lecture-o（教育利用全体で共有）

1 ～ 1215 分28tutorial-o（この講習会の時間中のみ使用可能）

1 ～ 1215 分

28

ノード当たり 48コア => 最大576コアまで使用可能！

講習会：MPI上級

2525

2022/10/12

お試し講習会のジョブクラス：バッチジョブ（Aquarius）
キュー名

GPU数

制限時間（Elapsed）

メモリ容量
（GB）

1,2,415 分

56/GPU

1,2,415 分

56/GPUlecture-a（教育利用全体で共有）
tutorial-a（この講習会の時間中のみ使用可能）

share-aと同様の使い方

講習会：MPI上級

ジョブスクリプトの説明（OpenMP/MPIハイブリッド版, Odyssey）• 内容はC⾔語，Fortranで共通
リソースグループ名: lecture-o#!/bin/bash#PJM -L rscgrp=lecture-o#PJM -L node=12#PJM --mpi proc=48#PJM --omp thread=12#PJM -L elapse=00:01:00#PJM -g gt00

利⽤ノード数: 12ノード使⽤

module load fj fjmpi
mpiexec ./hello_omp

利⽤グループ名: gt00

MPIプロセス数: 48
OpenMPスレッド数: 12
実⾏時間制限: 1分
MPIジョブを48プロセスで実⾏

2022/10/12

講習会：MPI上級

26

ジョブスクリプトの説明（MPI+OpenACCハイブリッド版, Aquarius）• 内容はC⾔語，Fortranで共通
リソースグループ名: lecture-a#!/bin/bash#PJM -L rscgrp=lecture-a#PJM -L gpu=4#PJM --mpi proc=4#PJM -L elapse=00:01:00#PJM -g gt00

利⽤GPU数: 4GPU使⽤

module purge
module load nvidia nvmpi

利⽤グループ名: gt00

mpiexec -machinefile $PJM_O_NODEINF ¥-n ${PJM_NUM_PROC} -npernode=4¥./hello_omp

MPIジョブを4プロセスで実⾏

2022/10/12

MPIプロセス数: 4
実⾏時間制限: 1分

講習会：MPI上級

27

2022/10/12

参考：ジョブクラス：インタラクティヴジョブ（トークン消費無し）
https://www.cc.u-tokyo.ac.jp/supercomputer/wisteria/service/job.php• Wisteria-O（Odyssey）:シミュレーションノード群
ノード数

制限時間
（Elapsed）

メモリ容量
（GB）

1
2 ～ 12

30 分
10 分

2828

ノード数

制限時間
（Elapsed）

メモリ容量
（GB）

interactive-a

1ノード

10 分

448

share-interactive

1GPU

10 分

56

キュー名

interactive-o(interactive-o_n1)(interactive-o_n12)• Wisteria-A（Aquarius）:データ・学習ノード群
キュー名

講習会：MPI上級

2828

参考：インタラクティブ実⾏のやり⽅（本講習会では使えません）
Odyssey• 1ノード実⾏$ pjsub --interact –g グループ名 –L rg=interactive-o,elapse=01:00• 12ノード実⾏$ pjsub --interact –g グループ名 –L rg=interactive-o,node=12,elapse=01:00
Aquarius• 1GPU実⾏$ pjsub --interact –g グループ名 –L rg=share-interactive,elapse=01:00• 1ノード(8GPU)実⾏$ pjsub --interact –g グループ名 –L rg=interactive-a,elapse=01:00※インタラクティブ用のノードがすべて使われている場合、資源が空くまでログインできません。
※このアカウントでは使えません。
2022/10/12

講習会：MPI上級

29

30
30

2022/10/12

参考：ジョブクラス：バッチジョブ（Odyssey）
https://www.cc.u-tokyo.ac.jp/supercomputer/wisteria/service/job.php
ノード数

制限時間
（Elapsed）

メモリ容量
（GB）

debug-o1 ～ 144

30 分

28

short-o1 ～ 728 時間

28

1 ～ 144145 ～ 576
577 ～ 1152
1153 ～ 2304

48 時間
〃〃
24 時間

28
〃〃
〃

1 ～ 288

48 時間

28

キュー名

regular-o(small-o)(medium-o)(large-o)(x-large-o)priority-o （優先実行，トークン消費量 1.5倍）

講習会：MPI上級31
31

2022/10/12

参考：ジョブクラス：バッチジョブ（Aquarius）
https://www.cc.u-tokyo.ac.jp/supercomputer/wisteria/service/job.php
ノード数
GPU数

制限時間
（Elapsed）

メモリ容量（GB）

debug-a

1 ノード

30 分

448

short-a1 ～ 2 ノード

2 時間

448

regular-a(small-a)(medium-a)(large-a)1 ～ 2 ノード3 ～ 4 ノード5 ～ 8 ノード

48 時間
〃
24 時間

448
〃
〃

share-debug

1, 2, 4 GPU

30 分

56

share-short

1, 2, 4 GPU

2 時間

56

share
(share-1)(share-2)(share-4)

1 GPU
2 GPU
4 GPU

48 時間
〃
24 時間

56
〃
〃

キュー名

講習会：MPI上級

32
32

2022/10/12

参考：ジョブクラス：プリポストサービス
ログインノードと同じアーキテクチャのノードを使用
https://www.cc.u-tokyo.ac.jp/supercomputer/wisteria/service/job.php
ノード数

制限時間
（Elapsed）

メモリ容量
（GB）

prepost （予約無し）16 時間

340

prepost1_n1～
prepost4_n1

1

1 ～ 6 時間

340

prepost1_n4

1～4

1 ～ 6 時間

340

prepost1_n8

1～8

1 ～ 6 時間

340

キュー名

講習会：MPI上級

コンパイラの種類と実⾏(Odyssey)• ログインノードとOdysseyの計算ノードとで、CPUの命令セットが⼤きく異なる• ログインノード：命令セットアーキテクチャ Intel CascadeLake＋AVX512, x86_64• Odyssey計算ノード： Fujitsu A64FX, 命令セットアーキテクチャ ARM v8.2 + SVE, aarch64

Odysseyノード

ログインノード
x86_64
ソース
コード

クロス
コンパイラ

ソース
コード

aarch64a.out

aarch64

ネイティブ
コンパイラ

バッチ処理

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

a.out• 富⼠通製コンパイラ••••

module load odyssey で使⽤可能になるネイティブコンパイラ： ＜コンパイラの種類名＞
クロスコンパイラ： ＜コンパイラの種類名＞px
MPI: mpi+コンパイラ名 (例：mpifccpx)
2022/10/12

講習会：MPI上級

aarch64

⾔語

ネイティブ
コンパイラ

クロスコンパイラ

Cfcc

fccpx

C++

FCC

FCCpx

Fortran

frt

frtpx

33

プログラムの実⾏• ここでジョブスクリプト名は run.sh とします• 配布したサンプルではキュー名が“lecture-o”になっているので，これを“tutorial-o”に変更してください$ emacs -nw run.sh# emacs で編集する場合$ vim run.sh# vimで編集する場合$ nano run.sh# nano で編集する場合• ジョブを投⼊$ pjsub run.sh

2022/10/12

講習会：MPI上級

34