第163回お試しアカウント付き講習会「スーパーコンピューター超入門」
2021年9月30日
本資料はWindowsマシン上でCygwinを使われる方、Mac または Linux を使われる方向けのものです

2021/9/30 v1.0

2021/9/30

スーパーコンピューター超入門

本講習会の内容
13:00 – 14:00
注意事項、Zoomの使い方
スーパーコンピューターについて初歩（講義）スーパーコンピューターへのログイン（講義・実習）
14:15 – 16:00
プログラムの作成・コンパイル・実行（講義・実習）
並列プログラムのコンパイル・実行（講義・実習）
16:15 – 17:00
より進んだ利用に向けて（講義）22021/9/30

スーパーコンピューター超入門

3

講習会の注意事項
n 1か月利用可能なアカウントが配布されます。
l 利用規程に記載の用途以外に使用しないでください。
ü 研究、教育、社会貢献のために使用
l 1か月経過後(10/30)にはアカウントが削除されるため、ファイルも削除されます。
l アカウントの継続利用のためには、講習会を最後まで受講頂く必要があります。
n 企業の方が当センターのトライアルユース制度に申し込む場合、センターが開催する
いずれかの講習会を修了してください。 （本日の講習会を想定する場合、最後まで出席のこと）
n 本講習会に関する質問はshiba@cc.u-tokyo.ac.jpに送付ください。センターのスパコン相談窓口等には送付しないようご注意ください。

2021/9/30

スーパーコンピューター超入門

Zoom
n講義・実習中の質問方法• 「手をあげる」機能• 質問がある際，全体の状況を確認するため使用• ブレークアウトセッション• 画面を共有しながらエラー対応する際に使用• （なるべく口頭でのやりとりで対応する予定）• https://utelecon.adm.u-tokyo.ac.jp/zoom/how_to_use

42021/9/30

スーパーコンピューター超入門

Zoomで手を挙げる方法
1.

Zoomメニュー中の「リアクション」をクリック

2.

ポップアップで表示された「手を挙げる」をクリック

5

2021/9/30

スーパーコンピューター超入門

Zoomで手が挙がっていることの確認方法
1. Zoomメニュー中の「参加者」をクリックして，参加者一覧を表示

2. 表示された参加者一覧の，自分のところを見ると手が挙がっている62021/9/30

スーパーコンピューター超入門

Zoomで手を下ろす方法
1.

Zoomメニュー中の「リアクション」をクリック

2.

ポップアップで表示された「手を降ろす」をクリック

7

2021/9/30

スーパーコンピューター超入門

ブレイクアウトルーム（1/6）• 演習時に使用するかもしれません• 演習中に「ヘルプを求める」ことができます• ホストを招待した後に「画面を共有」することで，皆さんの記述したプ
ログラムを一緒に見ながら問題解決にあたります• Zoomメニュー中の「ブレイクアウトルーム」をクリック

8

2021/9/30

スーパーコンピューター超入門

ブレイクアウトルーム（2/6）• 進行中のブレイクアウトルームのリストが表示されるので，空いている部屋に「参加」してください• 左の例では5部屋がすべて空室，右の例ではルーム1のみ参加者がいる

92021/9/30

スーパーコンピューター超入門

ブレイクアウトルーム（3/6）
「参加」をクリックすると確認画面が出てくるので，「はい」を選択すると入室できます10

2021/9/30

スーパーコンピューター超入門

ブレイクアウトルーム（4/6）
再度メニュー中の「ブレイクアウトルーム」をクリックすると，「ヘルプを求める」が増えているのでクリックしてください112021/9/30

スーパーコンピューター超入門

ブレイクアウトルーム（5/6）
ポップアップで出てきた「ホストを招待」をクリック
ホスト（講師）の参加待ちに移行します（画面はそのまま）
他の受講者のヘルプ中など，直ちに対応できない場合もあります12

2021/9/30

スーパーコンピューター超入門

ブレイクアウトルーム（6/6）
問題解決後は，Zoomメニュー中の「ルームを退出する」「ブレイクアウトルームを退出」が表示されるのでクリックして，元の講習会会場にお戻りください
間違えて「ミーティングを退出」すると講習会から退出します132021/9/30

スーパーコンピューター超入門

東大スーパーコンピューター OBCXOakbridge-CX @ 東京大学柏キャンパス （２０１９ー）

14

15

2021/9/30

スーパーコンピューター、略してスパコン
高い性能をもつ大規模計算機
コア
CPU

ノード0
メモリ
CPU

メモリ

ノード1
メモリ

メモリ

CPU

CPU

CPU

GPUなど加速装置ある場合もネットワーク

ここ20年のスーパーコンピューター＝ 多数の構成要素が協調して動作→ 高速な浮動小数点計算、大規模データ処理

ストレージ

高性能なノード、高速なネットワーク、大容量かつ高速なストレージ

2021/9/30

16

スーパーコンピューター超入門

性能指標 〜 OBCXを例に (1)多数のコア、高いメモリ転送速度

CPU

Memory

OBCX

コア数

6

56
(2ソケット)

周波数 [GHz]

3.0

2.7

理論演算性能[TFlops]

0.58

4.84

容量 [GByte]

16

192

転送速度 [GByte/秒]

42.6

281.6
ボードには水冷（とにかく熱い）！

580 mmiMac(2018)

174.3 mm17

スーパーコンピューター超入門

2021/9/30

大きいことはいいこと（もある）
たくさんのパソコンを同時に連携して使用するようなもの

×17×4

全部で1,368台

×21

2021/9/30

スーパーコンピューター超入門

性能指標 〜 OBCXを例に (2)多数のノード数を全体で繋ぐためにネットワークは非常に高速
携帯
４G
転送速度
[Gbit/秒]

0.1 ~ 1.0

無線
(Wifi 11ac)
6.9

Omni-path(OBCX)

有線(Gigabit
Ether)
1100

18

2021/9/30

19

スーパーコンピューター超入門

性能指標 〜 OBCXを例に (3)大容量・高速のストレージ
OBCX Lustre stroragen 容量 ： 12.4PByte (12400TByte)n 構成 ： HDD 8TB x 1,360本
n 転送速度 ： 193.9GByte/秒
HDD,SSDの転送速度はHDD ：0.1～0.2GByte/秒
SSD ： 4～5GByte/秒*2020年9月現在

スーパーコンピューター超入門

OBCX ハードウェア仕様

202021/9/30

スーパーコンピューター超入門

全体性能
FLOPS値（Floating Point Operations per Second，浮動小数点演算）
1秒当たりの実数演算性能• 106 FLOPS= 1 Mega FLOPS = 1 MFLOPS• 109 FLOPS= 1 Giga FLOPS = 1 GFLOPS• 1012 FLOPS= 1 Tera FLOPS = 1 TFLOPS• 1015 FLOPS= 1 Peta FLOPS = 1 PFLOPS• 1018 FLOPS= 1 Exa FLOPS = 1 EFLOPS

（百万）
（十億）
（兆）
（千兆）
（百京）

OBCX
– Intel Xeon Platinum 8280，1コアの性能は86.4GFLOPS» 1秒間に864億回の倍精度実数演算– 1ノード：56コア» 4,838.4 GFLOPS= 4.838.TFLOPS– 全システム：1,368ノード〜 4兆8,384億回

6.618 PFLOPS 〜6,618兆3,840億回

212021/9/30

22

スーパーコンピューター超入門

スパコン利用に向けて何を学ぶのか？
Case A ) 新しい計算向けのプログラムを作る
Case A ) 誰かが作ったプログラムを速くする
繰り返し計算を高速化したい
基本のところは C/C++ と FORTRAN

特有の技術必要！

do i=1, 1000000
c(i) = a(j) * x(i,j) + b(i)
enddo
で共通

1. CPUが動作しやすい形にプログラムを書き換える方法
SIMD演算、キャッシュの活用、メモリアクセス改善

2. 協調動作のための分散処理方法、CPU間など通信方法
OpenMP

MPI

3. 上記1. 2. を最適にして演算を行うライブラリの呼出方法

2021/9/30

スーパーコンピューター超入門

スパコン利用に向けて何を学ぶのか？
Case B )スパコン向けに作られたソフトウェアを利用する

数値流体力学、構造解析、統計解析、
分子動力学、電子状態計算、量子化学計算、…
ソフトウェアがどのように協調動作するのかの概略を理解することにつとめる→ 並列プログラミングをしない人でも、使ってみた
速さなどから、計算の仕組みのイメージを獲得

23

2021/9/30

スーパーコンピューター超入門

24

スパコン利用に向けて何を学ぶのか？
Case C )新しいタイプのデータ処理（学習）をしたい
ー 多くの方は、手元のマシンで何かされてる方かもしれません

1. Python等による高速なデータ処理
2. スパコン特有の環境構築の方法（コンテナ環境の利用など）
多数のGPUの使用方法
3. バッチジョブシステム特有の事項
注：大学設置スパコンだとどうしても（民間のクラウドと比較すると）少し環境準備が手間がかかるところはあります。

2021/9/30

スーパーコンピューター超入門

スパコン向け最適化に関する講習会 ＠ 東大ITC
目的に応じて受講をご検討ください。

25

2021/9/30

スーパーコンピューター超入門

スーパーコンピューター (スパコン) 利用のイメージ
通常、スパコンでは
ログインノードと呼ばれる玄関口から実行命令を出します1. ログイン[tut138@obcx02~]$ ls -l
drwxr-x--- 2 shiba group 10 1
Apr 13:00 test.out[tut138@obcx02~]$ ./test.out
Hello world[tut138@obcx02~]$ qsub a.sh

3. プログラム動作

2. ジョブ投入

SSH

端末

SSH で接続するには鍵の準備が必要！

ログインノード

計算ノード
= 本体

26

2021/9/30

スーパーコンピューター超入門

Secure Shell プロトコル
通信が暗号化されたShelln ShellはOSとユーザーの仲介をする
コマンドベースのソフトウェア
n 通信データを暗号化し、リモートマシンにアクセスできる通信方法:SSH

暗号化

暗号化された通信を使用して、様々なことが可能
n ファイルのコピー
n グラフィカル画面の転送
n トンネリングn ディレクトリのマウント

OBCX

ログイン後の画面の一例

27

2021/9/30

スーパーコンピューター超入門

鍵認証方式
より安全な接続をする→鍵認証方式
n パスワードではなく、鍵ペアを使用してログインする方法
n 秘密鍵にもパスワードを設定可能
初期設定（初回ログイン時のみ）
n 鍵ペアを作成
n 公開鍵をログインノードに登録④秘密鍵を使用
して復号①ログインをリクエスト

OBCX③暗号を返信

②公開鍵を使用して暗号を作成⑤復号結果を送信⑥返信結果を確認⑦ログインを許可

暗号通信開始28

2021/9/30

スーパーコンピューター超入門

鍵認証方式の注意点
注意点
n秘密鍵の取り扱いに注意
l 厳重に管理してください。
ü 漏洩すると容易にログインできてしまうため。
l 秘密鍵は他のところにコピーしたりしないでください。
l 秘密鍵の入ったPCの紛失などがあった場合は速やかに公開
鍵を更新してください。
n 鍵の生成時には必ずパスワードを設定してください。
よく間違える点n 秘密鍵のパスワードはOBCXのポータルのログインパスワード
やログイン後のアカウントのパスワードとは異なります。

29

第138回講習会スーパーコンピューター超入門：実習編

30

鍵の作成 (Cygwin, Mac, Linux の方)
PC上で鍵（秘密鍵，公開鍵）を生成（1/3）
Cygwin またはターミナルを開いたその場所から下記の操作を開始$ ssh-keygen -t rsa

Generating public/private rsa key pair.
Enter file in which to save the key (/home/user/.ssh/id_rsa): Return
パスフレーズを設定
Enter passphrase (empty for no passphrase):
ReturnEnter same passphrase again: 同じパスフレーズ
ReturnYour identification has been saved in /home/user/.ssh/id_rsa.
Your public key has been saved in /home/user/.ssh/id_rsa.pub.
The key fingerprint is:
SHA256:vt88O+PTcscHkOyabvxGjeRsMWLAWds+ENsDcReNwKo tut138@ITCUT-VAIO
The key's randomart image is:+---[RSA 2048]----+|. o=oo.o+ ||+ O... .|
操作手順
|
.+o+.
|
|
+oB.
|
• ssh-keygen -t rsa <Return>|
So *o*||.E
B.o |• <Return>|.. = . o |• お好きなパスフレーズ <Return>|.=oB o +||.+o+*O ..|• 同じパスフレーズ <Return>+----[SHA256]-----+

鍵が作成できたはず第138回講習会スーパーコンピューター超入門：実習編

31

鍵の作成 (Cygwin, Mac, Linux の方)
PC上に秘密鍵、公開鍵があることを確認（2/3）
コマンドの意味がわからない方も、黄色の文字を打って、同じような画面になる確認してください。
$ cd .ssh$ ls

id_rsaid_rsa.pub⇒秘密鍵（Private Key）
⇒公開鍵（Public Key）

$ cat id_rsa.pub

ssh-rsa
AAAAB3NzaC1yc2EAAAADAQABAAABAQDa6InmOYYaCrWjQDukjiNEfdW8veUwJyZtEI3oDu0A28eey6p0wbtI7JB
09xnI17O7HG4yYvOM81+/nlAHy5tAfJly0dsPzjTgdTBLdgi3cSf5pWEY6U96yaEr0Ei8Wge1HkXrhcwUjGDVTz
vT0Refe6zLdRziL/KNmmesSQfR5lsZ/ihsjMgFxGaKsHHq/IErCtHIIIf9V/Ds2yj6vkAaWH6asBn+ZsRiRFvwH
PhkYAnp/j3LY6b8Qfqg0p4WZRenh/HgySWTYIGi8x67VzMaUlm9qlK0QFMCaK2rivX1fmbwyWJ/vrWDqiek6YXo
xLDu+GPeQ4CPvxJcZnqF9gf3 tut138@ITCUT-VAIO

第138回講習会スーパーコンピューター超入門：実習編

32

鍵の作成 (Cygwin, Mac, Linux)
公開鍵をコピーする（3/3）

通常のカットアンドペーストの手順で「公開鍵」をコピー$ cd .ssh$ ls

id_rsaid_rsa.pub$ cat id_rsa.pub

操作手順• cat id_rsa.pub <Return>• “ssh-rsa”にカーソルを合わせ⇒秘密鍵（Private Key）
⇒公開鍵（Public Key）
• 最後の行の”f3”までを選択して「Copy」によって記憶• 最後の「tut138@ITCUT-VAIO」まで含んでも良いが，こ
こに漢字が含まれていると登録に失敗します。

ssh-rsa
AAAAB3NzaC1yc2EAAAADAQABAAABAQDa6InmOYYaCrWjQDukjiNEfdW8veUwJyZtEI3oDu0A28eey6p0wbtI7JB
09xnI17O7HG4yYvOM81+/nlAHy5tAfJly0dsPzjTgdTBLdgi3cSf5pWEY6U96yaEr0Ei8Wge1HkXrhcwUjGDVTz
vT0Refe6zLdRziL/KNmmesSQfR5lsZ/ihsjMgFxGaKsHHq/IErCtHIIIf9V/Ds2yj6vkAaWH6asBn+ZsRiRFvwH
PhkYAnp/j3LY6b8Qfqg0p4WZRenh/HgySWTYIGi8x67VzMaUlm9qlK0QFMCaK2rivX1fmbwyWJ/vrWDqiek6YXo
xLDu+GPeQ4CPvxJcZnqF9gf3 tut138@ITCUT-VAIO

2021/9/30

スーパーコンピューター超入門

SSH 公開鍵認証
id_rsa• Private Key（秘密鍵） ：PC上
• 文字通り「秘密」にしておく

作成した場所からコピー・移動しない、他の人に送らない

id_rsa.pub• Public Key（公開鍵）：スパコン上• コピー可能，他の人にe-mailで送ることも可能• もし複数のPCからスパコンにログインする場合は，各PCごとに「公開鍵・秘密鍵」のペアをssh-keygenによって作成• 各スパコンには、複数の公開鍵を登録できます

スパコン上の公開鍵のうちの一つがPC上の「秘密鍵＋Passphrase」とマッチすると確認されるとログインできる33

2021/9/30

スーパーコンピューター超入門①スパコンポータルサイトにログイン
https://obcx-www.cc.u-tokyo.ac.jp/cgi-bin/hpcportal.ja/index.cgi

情報基盤センターから送付された利用者
ID（tUVXYZ）

情報基盤センターから送付された初期パスワード34

2021/9/30

スーパーコンピューター超入門②初期パスワードの変更

情報基盤センターから送付された初期パスワード

パスワード規約• 8文字以上，現在と3文字以上異なる• 2世代前までと異なる• 英字（小文字，大文字），数字，特殊文
字各1字以上• Linux辞書に登録されている語は不可• 全角文字不可

変更後のパスワード
を入力（2回）35

2021/9/30

スーパーコンピューター超入門③公開鍵登録（id_rsa.pub）

1. 「SSH公開鍵登録」を選択
2. 先ほどCopyした公開鍵 （ id_rsa.pub ) を貼り付ける
3. 「登録」をクリック
よくトラブルが起きますので、先に進めなければ質問してください362021/9/30

スーパーコンピューター超入門

スパコンには複数の公開鍵を登録できる

37

2021/9/30

スーパーコンピューター超入門

ポータルサイトでのマニュアル等閲覧（1/2）

382021/9/30

スーパーコンピューター超入門

ポータルサイトでのマニュアル等閲覧（2/2）

39

第138回講習会スーパーコンピューター超入門：実習編

40

スパコンにログイン (Cygwin, Mac, Linux)$ ssh tUVXYZ@obcx.cc.u-tokyo.ac.jp
Enter passphrase for key '/home/tut138/.ssh/id_rsa:

Your Passphrase

1. ssh tUVXYZ@obcx.cc.u-tokyo.ac.jp <Return>2. 鍵生成時に打ち込んだPassphrase <Return>

Return

第138回講習会スーパーコンピューター超入門：実習編

41

スパコンにログイン (Cygwin, Mac, Linux)
Last login: Sun Apr 12 15:05:47 2020 from obcx01.cc.u-tokyo.ac.jp----------------------------------------------------------------------------Oakbridge-CX Information
Date: Apr. 03, 2020---------------------------------------------------------------------------ログインに成功しWelcome to Oakbridge-CX system
たら，今後のメイ* Operation Schedule
ンテナンスのスケ
04/24(Fri) 09:00 – 04/24(Fri) 20:00 System Maintenance
04/24(Fri) 20:00 Normal Operation ジュールなどが表示される
For more information about this service, see
https://www.cc.u-tokyo.ac.jp/supercomputer/schedule.php* How to use
Users Guide can be found at the User Portal (https://obcx-www.cc.utokyo.ac.jp/).
If you have any questions, please refer to the following URL and contact us:
https://www.cc.u-tokyo.ac.jp/supports/contact/* Updated OBCX Users Guide
10/01(Tue): v1.0
Set your email address on the User Portal [https://obcx-www.cc.u-tokyo.ac.jp][tUVXYZ@obcx01 ~]$第138回講習会スーパーコンピューター超入門：実習編

42

第138回講習会スーパーコンピューター超入門：実習編

43

2021/9/30

スーパーコンピューター超入門

ログインしたら
ログインノード上のLinux の操作画面になります→ 命令文を打ちます[tUVXYZ@obcx01 ~]$ pwd

Return/home/tUVXYZ

pwd ー 現在のディレクトリ（フォルダ）
を位置を返すコマンド44

2021/9/30

スーパーコンピューター超入門

休憩
余裕のあるかたは次のページ以降を少し予習してください452021/9/30

スーパーコンピューター超入門

スーパーコンピューター (スパコン) 利用のイメージ
通常、スパコンでは
ログインノードと呼ばれる玄関口から実行命令を出します1. ログイン[tut138@obcx02~]$ ls -l
drwxr-x--- 2 shiba group 10 1
Apr 13:00 test.out[tut138@obcx02~]$ ./test.out
Hello world[tut138@obcx02~]$ qsub a.sh

3. プログラム動作

2. ジョブ投入

SSH

端末

SSH で接続するには鍵の準備が必要！

ログインノード

計算ノード
= 本体

46

スーパーコンピューター超入門

スパコンを使うための手順
SSHでログイン

Putty、Cygwin、SSH、鍵認証プログラム作成

エディタ(emacs, vi, nano)、Linux 利用法

コンパイル

環境モジュール、コンパイルオプション

ジョブの投入ジョブスクリプトの作成、ジョブ管理

結果の確認

47

2021/9/30

スーパーコンピューター超入門

コマンドとは？
特定の機能を実行する命令$コマンド [オプション1、オプション2・・・] 引数1、引数2・・・・・
例$ cd /home/t00270/（作業ディレクトリを変更）$ cp a.txt b.txt(a.txt と同じ内容のファイルを b.txt として作成）

コマンドの例
コマンド用途

よく使うオプション

pwd

現在のディレクトリを表示

cd

ディレクトリを変更

ls

ファイル一覧を表示-l ： 詳細表示

cp

ファイルまたはディレクトリのコピー-r ： 再帰的にコピー

rm

ファイルまたはディレクトリの削除-r ： 再帰的に削除

exit

セッションの終了（スパコンからログアウト）

48

2021/9/30

スーパーコンピューター超入門

ほかのコマンドの例（簡単なもの）
コマンド

用途

よく使うオプション

mv

ファイルまたはディレクトリの移動

rm

ファイルまたはディレクトリの削除

mkdir

ディレクトリの作成

man

コマンドの説明cat

ファイル内容の表示（全体）less

ファイル内容の表示（一画面ごと）

head

ファイル内容の表示（先頭部分）-n ## :

表示行数の指定

tail

ファイル内容の表示（末尾部分）-n ## :

表示行数の指定

grep

ファイルに含まれる文字列を検索

diff

２つのファイルの内容比較

echo

変数や文字列の値を出力

exit

セッションの終了-r ： 再帰的に削除

49

2021/9/30

スーパーコンピューター超入門

Bash特有の機能
OBCXシステムのデフォルトシェルはbashです。
コマンド入力を簡易にする基本機能一覧
操作

動作内容

Auto filltab

途中まで入力したコマンドやパスの残りを補完

履歴↑

過去に実行したコマンドを1つずつさかのぼる

履歴探索モード ctrl+r

過去に実行したコマンドを検索

リダイレクト>

結果をファイルなどに出力
例：ls > list.txt list.txtにlsの結果が出力される

パイプ|

結果を次のコマンドに渡す
例：ls | sort
lsコマンドの結果をソートする

コマンドとbashの機能を使用したスクリプトも記述可能

50

2021/9/30

51

スーパーコンピューター超入門

Linux(OBCX)でのディレクトリ構造/home/home/tUVXYZ

ログイン時のディレクトリ/home/kUVXYZ/home/mUVXYZ/
ルート
ディレクトリ/work/work/gt00/work/gt00/tUVXYZ/work/po****/work/jh******

LUSTRE ファイルシステム
/usr
/etc

n OBCXの固有ディレクトリ
n 高速なファイルの読み書きができる
n OBCXスパコンの計算は、全部ここから実施
l Home上での実行は不可
n トラブルもたまにあるので /homeから隔離されています2021/9/30

スーパーコンピューター超入門

コマンドの実行例
コマンドの実行例
現在のディレクトリを出力
講習会用ディレクトリに移動
1つ上のディレクトリに移動

ホームディレクトリに移動

testディレクトリを作成
現在のディレクトリにあるファイルおよびディレクトリ一覧を表示

52

53

スーパーコンピューター超入門

Linux OS
世界中のスパコンのほとんどが採用しているOS
n 現在のTOP500（上位500台のスパコンランキング）のシェアは100％n スパコンだけでなく、サーバーの多くはLinuxで動作
n 基本的にOpenSourceで構成
n CLI（Command Line Interface)で完結、高機能なShellが用意されている。
l 本講習ではBashを使用
l GUI(Graphical User Interface)もあり。
スパコンではあまり使わない。
講習会では基本的なコマンドとBashについて扱います。
Linuxではフォルダをディレクトリといいます。
（この後頻出します。）

Tux

2021/9/30

スーパーコンピューター超入門

エディタ
ファイルを編集するためのソフトウェア
Windowsの標準だとメモ帳に該当Linuxでは以下のエディタが有名（ほかにもたくさんあります）
n Emacsl 高機能
l 拡張機能も豊富 (LISPで記述されている)
n Vim
l 軽量
l Linuxの初期状態でインストールされている
n Nanon 一番簡易n コマンドが下段に表示されるため、わかりやすい
機能性
使いやすさ
Emacs

Vim

Nano

54

2021/9/30

スーパーコンピューター超入門

ログインしたら$ pwd

Return/home/tUVXYZ$ cd /work/gt00/tUVXYZ$ pwd Return/work/gt00/tUVXYZ
$ cd
$ pwd

ReturnReturn/home/t00XYZ

Return1. ログインしたら「/home/tUVXYZ」に入る
2. /homeは容量が少ないので「/work/gt00/tUVXYZ」に移動すること
3. 「cd」でホームに戻れます55

2021/9/30

スーパーコンピューター超入門

プログラム例題：フィボナッチ数列
漸化式で定義F0 = 1F1 = 1
Fn = Fn 1 + Fn 2
<latexit sha1_base64="aGpfKio9rBd4elCeerhjKtm4B6M=">AAADTHichVJLa9RQGD1Ntdbx0aluBDfB6ZSKtNzMxiIIVaG47MNpC80wJOntGJrcxCQzWsP8Af+AC1cKRcSf4caN7lT6E8RlC4IP8OROxEcZvSHJ+c73ne+e+3DjwE8zIfZHjNFjx8dOjJ+snDp95uxEdfLcWhp1E082vSiIkg3XSWXgK9nM/CyQG3EindAN5Lq7c6vIr/dkkvqRupPtxrIVOh3lb/uek5FqV29Mm4ttYV43LdO2K0Vg/R4oBovtXM1affPKADX69r2us2XOKLsjzcbldrUm5oQe5lFglaCGcixF1S+wsYUIHroIIaGQEQdwkPLZhAWBmFwLObmEyNd5iT4q1HZZJVnhkN3ht8Nos2QV46JnqtUeZwn4JlSaqIt34oU4EK/FS/FRfBvaK9c9Ci+7/LsDrYzbE48urH7+ryrkP8PdX6p/es6wjXnt1af3WDPFKryBvvfw8cHqtZV6Pi2eiU/0/1Tsi1dcgeodenvLcuUJu9eHOnLpZvie5ZzrAeeP9AmkZaVi5r7euVCvRfGscvIueswUvooTammu2J2IPXLsaRSw9uf6TUyhxsopKtiZ18T6+1IcBWuNOYt4uVFbuFlemHFcxCXMsNNVLOA2ltCki+d4g/f4YLw1Do2vxvdBqTFSas7jjzE69gNCK76f</latexit>
sha1_base64="j41D7YQITxu9gm7MzpYA7IjDnag=">AAAC+3ichVI9T9tQFD0YaCHQJmxILBEhqBO66QJiqtSFEQgBJBoh2zyohb9kO2mpxR/IysDA1EoZEEu3irlL/wADP6HqCFIlxMDxixGiKPRZ9rs+9557z33vWqHrxInI5YAxODT84uXIaGFsvPDqdbE0vh4HrchWDTtwg2jTMmPlOr5qJE7iqs0wUqZnuWrD2n+f+TfaKoqdwF9LDkLV9Mw939l1bDMhtLxdqsic6FV+atRyo4J8BaUbfMAOAthowYOCj4S2CxMxny3UIAiJNZESi2g52q9wiAK5LUYpRphE9/nd499Wjvr8z3LGmm2ziss3IrOMqlzIqVzJLzmT33LbN1eqc2RaDrhbPa4Kt4udyfrf/7I87gk+PrCe1ZxgFwtaq0PtoUayLuwev/3l+Kq+uFpNZ+Wb/KH+r3IpP9mB3762uytq9YTZq30VWVTT/8xS1vrM+oG+gTiP9On5pE/O0734vKuUuIU2PZmu7IaaGstOJ2COFF1tuYy977+MGVQYOUMGM3NKav/OxFNj/e1cjfaKYARTmMYbJpjHOyxhGQ0W30EHR0bH+G786E2TMZCP1QQeLeP8DrWFqbU=</latexit>
sha1_base64="/Be7ntYvb07kiOZmbXjDM/1v+Og=">AAADQXichVJLa9RQGD2NrzpWO7oS3ASnUypiuZlNiyAoQnHZh9MWmiEk6e00NLmJSWa0hvkD/gEXrhSKiD/DjRvdqfQniMsWBB/gyZ2IjzJ6Q5Lzne873+Pe6yVhkOVC7I8Zx46fOHlq/HTtzMTZc5P18xOrWdxLfdn24zBO1z03k2GgZDsP8lCuJ6l0Iy+Ua97O7dK/1pdpFsTqbr6byE7kdlWwFfhuTsqp35o2Fxxh3jAt07ZrpWH9bigaC06hrlkD8+oQtQb2vZ67ac4ouyvN1hWn3hCzQi/zKLAq0EC1FuP6F9jYRAwfPUSQUMiJQ7jI+GzAgkBCroOCXEoUaL/EADVqe4ySjHDJ7vDbpbVRsYp2mTPTap9VQr4plSaa4p14IQ7Ea/FSfBTfRuYqdI6yl13+vaFWJs7ko4srn/+rivjPsf1L9c+ec2xhXvcasPdEM+UU/lDff/j4YOX6crOYFs/EJ/b/VOyLV5xA9Q/9vSW5/ITZmyM78tjN6D0rWOsB68f6BLIqUtFzX+9cpGdRPKuCvIc+PWVf5Ql1NFfuTswcBfY0Chn7c34TU2gwcooKZuY1sf6+FEfBamvWIl4SGMclXMYME8zhJu5gEW0Wf443eI8Pxlvj0Pg6vFDGWHWzLuCPZXz/AQk4veg=</latexit>
sha1_base64="GfKpEPNEnlEk/e0vHUBFZo7JDCk=">AAADTHichVJLa9RQFD5Ntdbx0WndCG4uTqdUpOVkNpaCUBWKyz6cttAMIUlvx9DkJiaZ0RrmD/gHXLhSKCL+DDdudKfSnyBdtlDwAX65E/FRRm9I8p3vnO/c7z7cOPDTjHl/yBg+dXrkzOjZyrnzFy6OVccn1tKok3iy6UVBlGy4TioDX8lm5meB3IgT6YRuINfdnTtFfr0rk9SP1L1sN5at0Gkrf9v3nAyUXb01JRZtFjeFKSyrUgTm74FCsGjnasbsiet91OhZDzrOlphWVluKxjW7WuNZ1kOcBGYJalSOpaj6hSzaoog86lBIkhRlwAE5lOLZJJOYYnAtysElQL7OS+pRBdoOqiQqHLA7+LYRbZasQlz0TLXawywB3gRKQXX+wK/4kN/ya/7M3wb2ynWPwssu/m5fK2N77Mnl1eP/qkL8M7r/S/VPzxlt05z26sN7rJliFV5f33389HB1fqWeT/ELPoD/57zPb7AC1T3y9pblyjN0rw905MLN4D3LMdcjzB/pE0jLSoXMQ71zoV6Lwlnl4F3qIlP4Kk6opblidyL0yGlPowC1P9cvaJJqqJyEAp1xTcy/L8VJsNaYNYGXubZwu7wwo3SFrtI0Ot2gBbpLS9SEi5f0jj7SJ+O9cWR8Nb73S42hUnOJ/hjDIz8AQYu+nQ==</latexit>
sha1_base64="8EKbeTwsttEMzvq93/DNDJ5xU4g=">AAADTHichVJLa9RQGD1Ntdbx0VE3gpvgdEpFLDeDoAhCVSgu+5q20AxDkt6OoclNTDKjNcwf8A+4cKVQRPwZbtzoTqU/QbpsQfABntyJ+CijNyQ53/m+891zH24c+GkmxO6IMXrk6Nix8eOVEydPnZ6onjm7kkbdxJNNLwqiZM11Uhn4SjYzPwvkWpxIJ3QDuepu3Snyqz2ZpH6klrPtWLZCp6P8Td9zMlLt6q0pc64tzJumZdp2pQis3wPFYK6dqytW37w8QI2+fb/rbJjTyu5Is3GpXa2JGaGHeRhYJaihHPNR9QtsbCCChy5CSChkxAEcpHzWYUEgJtdCTi4h8nVeoo8KtV1WSVY4ZLf47TBaL1nFuOiZarXHWQK+CZUm6uK9eCn2xRvxSnwS34b2ynWPwss2/+5AK+P2xOPzS5//qwr5z3Dvl+qfnjNs4rr26tN7rJliFd5A33v0ZH/pxmI9nxLPxR79PxO74jVXoHoH3s6CXHzK7vWhjly6Gb5nOed6yPkjfQJpWamYeaB3LtRrUTyrnLyLHjOFr+KEWpordidijxw7GgWs/bl+E5OosXKSCnbmNbH+vhSHwUpjxiJeuFqbvV1emHFcwEVMs9M1zOIu5tGkixd4iw/4aLwzDoyvxvdBqTFSas7hjzE69gNCy76h</latexit>(n2)

繰り返し計算で数列が得られる
1, 1, 2, 3, 5, 8, 13, 21 ….
繰り返し計算はスーパーコン
ピューター利用の出発点

From Wikipedia
https://ja.wikipedia.org/wiki/フィボナッチ数

56

2021/9/30

スーパーコンピューター超入門

プログラム例題：フィボナッチ数列 92個
1
1
2
3
5
8
13
21
34
55
89
144
233
377
610
987
1597
2584
4181
6765
10946
17711
28657
46368

75025
121393
1964183178115142298320401346269217830935245785702887922746514930352
24157817
39088169
63245986
102334155
165580141
267914296
433494437
701408733
1134903170
1836311903
2971215073
4807526976

7778742049
12586269025
20365011074
32951280099
53316291173
86267571272
139583862445
225851433717
365435296162
591286729879
956722026041
1548008755920
2504730781961
4052739537881
6557470319842
10610209857723
17167680177565
27777890035288
44945570212853
72723460248141
117669030460994
190392490709135
308061521170129
498454011879264

806515533049393
1304969544928657
2111485077978050
3416454622906707
5527939700884757
8944394323791464
14472334024676221
23416728348467685
37889062373143906
61305790721611591
99194853094755497
160500643816367088
259695496911122585
420196140727489673
679891637638612258
1100087778366101931
1779979416004714189
2880067194370816120
4660046610375530309
7540113804746346429

パソコンでも計算は一瞬

57

2021/9/30

58

スーパーコンピューター超入門

エディタでプログラムを作成する
さて、実際に作業してみましょう。
プログラムを編集するディレクトリを作成します。
Return[tUVXYZ@obcx01 ~]$ cd[tUVXYZ@obcx01 ~]$ mkdir fibonacci Return[tUVXYZ@obcx01 ~]$ cd fibonacci Return

ログインノード上では、Emacs, vim, または nano のエディタを利用してください。
例1： Emacs を使用, Fortranプログラムを作成[tUVXYZ@obcx01 fibonacci]$ emacs fibonacci.f90

Return例2： vim を使用, Python プログラムを作成[tUVXYZ@obcx01 fibonacci]$ vim fibonacci.py

Return

例3： nano を使用, C プログラムを作成[tUVXYZ@obcx01 fibonacci]$ nano fibonacci.c

Return2021/9/30

59

スーパーコンピューター超入門

Emacs チートシート$ emacsで起動

Emacs = 「control (ctl) キー + 文字」でコマンドに移行

コマンド
Ctl-x Ctl-s

編集中のファイルを同じファイル名で保存

Ctl-x Ctl-w

編集中のファイルを名前をつけて保存

Ctl-x Ctl-f

既存のファイルを開く

Ctl-x Ctl-c

Emacs を終了する（保存するか聞かれたらY/N で答える）

Ctl-g

コマンド入力Ctl-a

行の先頭にカーソルを持ってくる

Ctl-k

カーソルから行末までを削除し、（クリップボードみたいなところに）コピー

Ctl-y

コピーされた内容を貼り付ける

C-spaceMark Set

Mark Set, 範囲選択, M, w

コピーMark Set, 範囲選択, C-w

切り取り

Ctl-s

文字列を検索する

Esc-%

文字列を置換する

コマンド確認画面

2021/9/30

スーパーコンピューター超入門

vim チートシート$ vi で起動
ノーマルモード / 入力モード / コマンドを切り替え
現在のモード
ノーマル
ノーマル
入力

移行先モード入力
コマンドライン
ノーマル

編集画面

キー
i, a, Ins:
esc, ctrl-c

キー

Esc

ノーマルモードに移行する

i

入力モード（挿入）に移行するo

新しい行を追加して入力モード（挿入）に移行

R

入力モード（上書き）に移行する:w ###

コマンド - ファイル名 ### で保存する:qコマンド - vim を終了する:q!

コマンド - 保存せずにvim を強制終了する/###### という文字列を検索する

yy

カーソルのある行をコピーする

p

貼り付けする

モードおよびコマンド確認画面
n ブランク → ノーマルモード
n : → コマンドモード
l :w Ret 上書き保存
n --挿入-- → 入力モード

60

2021/9/30

スーパーコンピューター超入門

nano チートシート
nano = 最も操作方法が単純ー予習漏れの場合はお使いください。

$ nano で起動
n M-U → Escキー、Uキーを
順番に押す
キー

Ctl+S

ファイルを保存

Ctl+O

ファイルを名前をつけて保存

Ctl+X

nano エディタ を終了する

Ctl+W

文字列を検索（順方向）

Ctl+D

カーソルのある文字を削除

M-A

マーク

M-6

コピー

Ctl+K

1行カットして削除

Ctl+U

ペースト

コマンド確認画面
n ^ → Ctl
n M → Escn - → 順次押す

61

2021/9/30

62

スーパーコンピューター超入門

プログラム例題：フィボナッチ数列
C言語
プログラム作成 [tUVXYZ@obcx01 fibonacci]$ emacs fibonacci.c#include <stdio.h>
int main(void) {int i;
long a, b, tmp;
a=1;
b=1;
printf("%ld¥n", a);for (i=2; i<=92; i++) {tmp = b;b = a + b;
a = tmp;
printf("%ld¥n", a);}}注） ¥ マークがあればバックスラッシュ と同じと思って（今は）結構です。

Return2021/9/30

63

スーパーコンピューター超入門

プログラム例題：フィボナッチ数列
Fortran言語
プログラム作成 [tUVXYZ@obcx01 fibonacci]$ emacs fibonacci.f90
program main
implicit none
integer(kind=4) i
integer(kind=8) a,b,tmp
a=1
b=1
do i=2, 92
tmp = bb= a + b
a = tmp
print *, aend doend program main

Return2021/9/30

64

スーパーコンピューター超入門

プログラム例題：フィボナッチ数列
Pythonプログラム作成[tUVXYZ@obcx01 fibonacci]$ emacs fibonacci.py

a, b = 1, 1
print(a)for i in range(1,92):a, b = b, a+b
print(a)注） python では
ー 64ビット整数など変数型の選択を自動的にやってくれますー 多変数を同時に代入計算できます。
ー コンパイルはする必要ありません。

Returnスーパーコンピューター超入門

スパコンを使うための手順
SSHでログイン

Putty、Cygwin、SSH、鍵認証プログラム作成

エディタ(emacs, vi, nano)、Linux 利用法

コンパイル

環境モジュール、コンパイルオプション

ジョブの投入ジョブスクリプトの作成、ジョブ管理

結果の確認

65

2021/9/30

スーパーコンピューター超入門

Environmental modulesの利用 (1)
コンパイラ等の選択
gnu コンパイラ, インテル製コンパイラ, python インタープリター, …

ライブラリを利用した計算の高速化
離散フーリエ変換, 線形代数・連立１次方程式, …

使用中モジュールの表示
Return[tUVXYZ@obcx01 ~]$ module list
Currently Loaded Modulefiles:
1) impi/2019.9.304
2) intel/2020.4.304

Intel MPI ライブラリ

Intel コンパイラ

コンパイラ, MPI ライブラリを切り替えるために一度 消去します[tUVXYZ@obcx01 ~]$ module purge[tUVXYZ@obcx01 ~]$ module list
No Modulefiles Currently Loaded.

ReturnReturn66

2021/9/30

スーパーコンピューター超入門

利用可能なenvironmental modulesの一覧を表示できます[tUVXYZ@obcx01 ~]$ module avail------ /home/opt/local/modulefiles/L/mpi/intel/2019.5.281/impi/2019.5.281 -----alps/2.3.0(default)
phdf5/1.10.5(default)
feram/0.26.04(default)
pnetcdf/1.11.2(default)
frontflow_blue/8.1(default)
ppohBEM/0.5.0(default)
frontistr/4.5(default)
ppohDEM_util/1.0.0(default)
modylas/1.0.4(default)
ppohFDM/0.3.1(default)
mpi-fftw/3.3.8(default)
ppohFEM/1.0.1(default)
netcdf-fortran-parallel/4.4.5(default) ppohFVM/0.3.0(default)
netcdf-parallel/4.7.0(default)
pt-scotch/6.0.6(default)
openmx/3.8(default)
revocap_coupler/2.1(default)parmetis/4.0.3(default)
superlu_dist/6.1.1(default)
petsc/3.11.2(default)
xtapp/rc-150401(default)
phase/2019.01(default)----------- /home/opt/local/modulefiles/L/compiler/intel/2019.5.281 -----------R/3.6.0(default)
metis/5.1.0(default)akaikkr/cpa2002v010(default)
mt-metis/0.6.0(default)
bioconductor/3.10(default)
netcdf/4.7.0(default)
blast/2.9.0(default)
netcdf-cxx/4.3.0(default)
bwa/0.7.17(default)
netcdf-fortran/4.4.5(default)
fftw/3.3.8(default)
paraview/5.6.1(default)
gsl/2.5(default)
povray/3.7.0.8(default)
hdf5/1.10.5(default)
ppohAT/1.0.0(default)
hdf5/1.8.21
revocap_refiner/1.1.04(default)
impi/2019.5.281(default)
samtools/1.9(default)
intelpython/2.7
scotch/6.0.7(default)
intelpython/3.6(default)
superlu/5.2.1(default)
mesa/19.0.6(default)
superlu_mt/3.1(default)
metis/4.0.3
xabclib/1.03(default)---------------------- /home/opt/local/modulefiles/L/core ---------------------acusolve/2019.1.0(default)
intel/2018.3.222
advisor/2019.3.0.591490
intel/2019.3.199
advisor/2019.4.0.597843
intel/2019.4.243
advisor/2019.5.0.602216(default)
intel/2019.5.281(default)
anaconda/2-2019.03
intel/2020.1.217
anaconda/3-2019.03(default)
itac/2019.4.036
bioperl/1.007002(default)
itac/2019.5.041(default)
bioruby/1.5.2(default)
julia/1.4.0(default)
cmake/3.0.2
llvm/7.1.0(default)
cmake/3.14.5(default)
massivethreads/0.97

Return67

2021/9/30

スーパーコンピューター超入門

68

OBCX ではmodule 依存関係が複雑 → 簡易表示コマンドがあります[tUVXYZ@obcx01 ~]$ show_module

ReturnApplicationName
ModuleName
Node
BaseCompiler/MPI-------------------------------------------------------------------------------------------------------------ALPS
alps/2.3.0
login,computeintel/2020.4.304/impi/2019.9.304
Acusolve
acusolve/2019.1.0
login,compute
Advisoradvisor/2019.4.0.597843
login,compute
Advisoradvisor/2019.5.0.602216
login,compute
Advisoradvisor/2020.3.0.607294
login,compute
Advisoradvisor/2019.3.0.591490
login,compute
AkaiKKRakaikkr/cpa2002v010
login,computeintel/2020.4.304
Anaconda
anaconda/2-2019.03
login,compute
Anaconda
anaconda/3-2019.03
login,compute
Arm DDT
ddt/19.1
computeArm DDT
ddt/20.2.1
computeArm DDT
ddt/20.0.2
computeBLAST
blast/2.11.0
login,computeintel/2020.4.304
BWA
bwa/0.7.17
login,computeintel/2020.4.304
BioPerl
bioperl/1.007002
login,compute
BioRubybioruby/1.5.2
login,compute
Bioconductor
bioconductor/3.10
login,computeintel/2020.4.304
CMake
cmake/3.0.2
login,compute
CMake
cmake/3.14.5
login,computeCP2K
cp2k/v8.1
login,computeintel/2020.4.304/impi/2019.9.304
Devtoolset
devtoolset/7
login,compute
FFTW
fftw/3.3.8
login,computeintel/2020.4.304
FFTW
mpi-fftw/3.3.8
login,computeintel/2020.4.304/impi/2019.9.304
FeRAM
feram/0.26.04
login,computeintel/2020.4.304/impi/2019.9.304
GATK
gatk/4.1.2.0
login,computeGCC
gcc/4.8.5
login,compute
GCC
gcc/7.5.0
login,compute
GNU Octave
octave/6.1.0
login,compute
GNU Scientific Library
gsl/2.6
login,computeintel/2020.4.304
GROMACS
gromacs/2020.5
login,computeintel/2020.4.304/impi/2019.9.304
Gogo/1.12.6
login,compute
HDF5
hdf5/1.12.0
login,computeintel/2020.4.304
HDF5
hdf5/1.8.22
login,computeintel/2020.4.304
HDF5
phdf5/1.12.0
login,computeintel/2020.4.304/impi/2019.9.304
HDF5
phdf5/1.8.22
login,computeintel/2020.4.304/impi/2019.9.304
HyperWorks
hyperworks/2019.1.0
login,compute
IASP91
iasp91/default
computeInspector
inspector/2019.5.0.602103
login,compute
Inspector
inspector/2019.3.0.591484
login,compute-

コンパイラと連動↓対応するベースコンパイラの情報も一緒に表示されますスーパーコンピューター超入門

コンパイル、実行環境構築
コンパイル、実行環境を整えるために、moduleコマンドを使用$ module [オプション] 引数
オプション

内容

avail

利用可能な環境の一覧を表示

list

現在ロードしている環境一覧を表示

load

指定した環境のロード

unload

指定した環境のアンロード

switch環境のロードとアンロードを同時に実行

purge

環境を全てアンロード

例えば、Pythonを使用する場合、$ module load python/3.7.3

692021/9/30

スーパーコンピューター超入門

Environmental modulesの利用 (2)Intel コンパイラの前のバージョンを load してみます[tUVXYZ@obcx01 ~]$ module load intel/2020.1.217[tUVXYZ@obcx04 ~]$ module list Return
Currently Loaded Modulefiles:
1) impi/2019.7.217
2) intel/2020.1.217

ReturnIntel MPI ライブラリも、一緒に自動でload されました

Python は比較的最近の バージョン3.7.3 を使えるようにしましょう。
[tUVXYZ@obcx01 ~]$ module load python/3.7.3
Return[tUVXYZ@obcx01 ~]$ module list
Currently Loaded Modulefiles:
1) impi/2019.7.217
2) intel/2020.1.217

Return3) python/3.7.3

702021/9/30

スーパーコンピューター超入門

スーパーコンピューター (スパコン) 利用のイメージ
通常、スパコンでは
ログインノードと呼ばれる玄関口から実行命令を出します1. ログイン[tut138@obcx02~]$ ls -l
drwxr-x--- 2 shiba group 10 1
Apr 13:00 test.out[tut138@obcx02~]$ ./test.out
Hello world[tut138@obcx02~]$ qsub a.sh

3. プログラム動作

2. ジョブ投入

SSH

端末

SSH で接続するには鍵の準備が必要！

ログインノード

計算ノード
= 本体

71

2021/9/30

スーパーコンピューター超入門

ジョブスクリプト = スパコンへの指示書
プログラムをコンパイルしたあとにログインノード上で直接 プログラム実行することはしないでください！
ー 負荷がかかると、他のユーザーの同時作業の妨げとなります
かわりに計算ノードに計算をしてもらうための「指示書」が必要となります。

C, Fortran 向け (fibonacci.sh)

Python 向け (fibonacci.sh)#!/bin/bash#PJM -L rscgrp=tutorial ［リソースグループ］#PJM -L node=1［使用するノードの数］#PJM -L elapse=0:01:00 ［実行時間上限（1分）］#PJM -g gt00
［バジェットグループ名］#PJM -N fibonacci［今回のジョブの名前］#PJM -o stdout.txt［標準出力先ファイル名］#PJM -j［エラー出力を標準出力にマージ］
module purge
module load intel/2020.1.217./fibonacci.out

module load python/3.7.3
python ./fibonacci.py

722021/9/30

73

スーパーコンピューター超入門

ジョブスクリプトを用意しました。
ご自身で入力いただくと時間を要しますので、用意されたものをコピーしてください。
Return[tUVXYZ@obcx01 ~]$ cd[tUVXYZ@obcx01 ~]$ cd fibonacci

ReturnC, Fortran を使われる方[tUVXYZ@obcx01 fibonacci]$ cp /work/gt00/share/z30122/fibo_c/fibonacci.sh .
ReturnPython を使われる方[tUVXYZ@obcx01 fibonacci]$ cp /work/gt00/share/z30122/fibo_python/fibonacci.sh .
Return2021/9/30

74

スーパーコンピューター超入門

エディターでの編集が間に合わなかった方はサンプルとなるプログラムも用意してありますので、ご自身でコピーしてください。
C を使われる方[tUVXYZ@obcx01 fibonacci]$ cp /work/gt00/share/z30122/fibo_c/fibonacci.c .

Fortran を使われる方

Return[tUVXYZ@obcx01 fibonacci]$ cp /work/gt00/share/z30122/fibo_fortran/fibonacci.f90 .

Python を使われる方

Return[tUVXYZ@obcx01 fibonacci]$ cp /work/gt00/share/z30122/fibo_python/fibonacci.py .
Return2021/9/30

75

スーパーコンピューター超入門

プログラムのコンパイル
C または Fortran を使用される方→ プログラムをコンパイルして、実行ファイル（バイナリ）を生成します。
C を使われる方[tUVXYZ@obcx01 fibonacci]$ icc fibonacci.c -o fibonacci.out
プログラム名Return

実行ファイル名

Fortran を使われる方[tUVXYZ@obcx01 fibonacci]$ ifort fibonacci.f90 -o fibonacci.out
Returnスーパーコンピューター超入門

プログラムのコンパイル
IntelおよびGNUコンパイラがインストール済み
ソースコードのタイプ

コンパイラ開発元

Intel
非MPIコード
GNU
Intel
MPIコードGNU

言語

呼び出しコマンドC

icc

Fortran

ifort

C

gcc

FortrangfortranC

mpiiccFortranmpiifortC

mpicc

Fortranmpif77 or mpif90

IntelでC言語のコードをコンパイルする場合$ icc [オプション] “ソースコード.c” –o “出力ファイル名”
GNUでFortran90/95のコードをコンパイルする場合$ gfortran [オプション] -free-line-length-none “ソースコード.f90” –o “出力ファイル名”-free-line-length-none : Fortranの自由形式を有効化

76

スーパーコンピューター超入門

コンパイルオプション例（参考情報）
IntelおよびGNUでよく使うコンパイルオプション一覧
タイプ

言語

Intel
オプション

GNU
オプション

内容

共通

共通

-qopenmp-fopenmp

OpenMPを有効化

デバッグ
オプション

共通

-g

実行ファイルにソース
コードの情報を付与-Wall

コンパイル時にバグの元になりそうな箇所を検知-traceback
Fortran -check bounds

最適化
オプション

-fbacktrace

実行時にエラー発生個所を特定-fbounds-check

実行中に初期化していない
値へのアクセスなどを検知-O0、-O1、-O2、-O3

数字が大きいほど積極的な最適化を適用-xHostCPUアーキテクチャを考慮した最適化を有効化

共通-march=native77

2021/9/30

78

スーパーコンピューター超入門

スパコンでのジョブの実行
OBCX スパコンでは、 /home からプログラム実行できません→ /work ディレクトリ領域内にプログラム等一式をコピー[tUVXYZ@obcx01 ~]$ cd Return[tUVXYZ@obcx01 ~]$ ls Returnfibonacci[tUVXYZ@obcx01 ~]$ cp –r fibonacci[tUVXYZ@obcx01 ~]$ cd/work/gt00/tUVXYZ//work/gt00/tUVXYZ/fibonacci

Return

作成したジョブスクリプトを投入、計算ノードで実行してもらいます。
[tUVXYZ@obcx01 fibonacci]$ pjsub fibonacci.sh

ReturnReturn2021/9/30

スーパーコンピューター超入門

ジョブの確認、結果の表示
実行されているジョブを確認します。
（一瞬で計算が終わるので、ジョブ一覧に出ないかも）[tUVXYZ@obcx01 fibonacci]$ pjstat

得られた結果を表示します。
[tUVXYZ@obcx01 fibonacci]$ more result_fibo.txt［

Returnで下の方に進めていくことができます］

結果から 747031 という文字列を探します[tUVXYZ@obcx01 fibonacci]$ grep 747031 result_fibo.txt

79

スーパーコンピューター超入門

ジョブの管理コマンド
コマンド

内容

使い方

pjsub

ジョブの投入$pjsub “script.sh”

pjdel

ジョブの削除$pjdel “job ID”

pjstatジョブの状態$pjstat

注＊これらのコマンドはスパコンによって異なる

pjstatのオプション
n -H: 終了したジョブの確認
n --rsc -b : 各リソースグループの混雑具合を確認可能
n --rsc -x : 各リソースグループで要求可能なリソース量を出力n --nodeuse： OBCX全体での使用状況確認802021/9/30

スーパーコンピューター超入門

お試しアカウントについての注意
今回発行されたアカウント→ 講習会終了後も約１ヶ月間、OBCXスパコンを使用可能
講習会終了後は リソースグループ lecture を使用してください。
リソースグループ tutorial は本日 13:00-17:00 のみです。

ジョブスクリプト
fibonacci.sh#!/bin/bash#PJM -L rscgrp=lecture#PJM -L node=1#PJM -L elapse=0:01:00#PJM -g gt00
#PJM -N fibonacci#PJM -o stdout.txt#PJM -jmodule purge
module load intel/2020.1.217./fibonacci.out［リソースグループ］

812021/9/30

82

スーパーコンピューター超入門

並列計算の例題：区分求積で円周率計算
I=<latexit sha1_base64="YIu/MegrnHwiO6kVQlrJjYvJwyI=">AAADJXichVJNaxRBEH2Z+BHjRzbmIgRkcBMRhKUmBAyCEOLF3PK1SSC7WWZme5MmMz3DTO9m47A3T/4BD54UgqhH/QdevOSmQk6exWMEPXiwpndQNCT2MN3Vr+pVv6puLw5kqokOB6zBM2fPnR+6MHzx0uUrI6XRq6tp1E58UfWjIErWPTcVgVSiqqUOxHqcCDf0ArHm7dzP/WsdkaQyUit6Lxb10N1SsiV9VzPUKF2ft+/ZNal0gzYdu9ZKXD+b7mXO7e7mVK/ZbZTKVCEz7OOGUxhlFGMhKv1ADU1E8NFGCAEFzXYAFyl/G3BAiBmrI2MsYUsav0APw8xtc5TgCJfRHZ63eLdRoIr3ec7UsH0+JeA/YaaNSfpIL+mI3tNr+kI/T8yVmRy5lj1evT5XxI2Rx9eWv/+XFfKqsf2HdapmjRZmjFbJ2mOD5FX4fX7n4ZOj5btLk9lNek5fWf8zOqR3XIHqfPP3F8XS01P0eKzl5I5lfFKXT49M/9MiUrFn1/QtNJUovqkM+5yrw55cVX4/dYPlvYk4R9+fd7r5u3obEyhz5AQzevxEnH8fxHFjdariUMVZnC7PzhWPZQjjuIFbnOcOZvEAC6iyhkd4hTd4a72wDqwP1qd+qDVQcMbw17A+/wKS17fL</latexit>

Z 1
0

=⇡

4
dx
2
1+x

4

和の短冊
↓
1億倍以上
細かくする

3
2
1
0
0

0.2

0.4

0.6

0.8

1

x

数値積分を並列化 → 性能が向上する。
C, Fortran, Python, 3通りのサンプルプログラムを用意しました。
実習： プログラムの並列度を変えながら実行
実行時間から高速化の度合いを見る2021/9/30

83

スーパーコンピューター超入門

並列計算の例題：区分求積で円周率計算

I=<latexit sha1_base64="YIu/MegrnHwiO6kVQlrJjYvJwyI=">AAADJXichVJNaxRBEH2Z+BHjRzbmIgRkcBMRhKUmBAyCEOLF3PK1SSC7WWZme5MmMz3DTO9m47A3T/4BD54UgqhH/QdevOSmQk6exWMEPXiwpndQNCT2MN3Vr+pVv6puLw5kqokOB6zBM2fPnR+6MHzx0uUrI6XRq6tp1E58UfWjIErWPTcVgVSiqqUOxHqcCDf0ArHm7dzP/WsdkaQyUit6Lxb10N1SsiV9VzPUKF2ft+/ZNal0gzYdu9ZKXD+b7mXO7e7mVK/ZbZTKVCEz7OOGUxhlFGMhKv1ADU1E8NFGCAEFzXYAFyl/G3BAiBmrI2MsYUsav0APw8xtc5TgCJfRHZ63eLdRoIr3ec7UsH0+JeA/YaaNSfpIL+mI3tNr+kI/T8yVmRy5lj1evT5XxI2Rx9eWv/+XFfKqsf2HdapmjRZmjFbJ2mOD5FX4fX7n4ZOj5btLk9lNek5fWf8zOqR3XIHqfPP3F8XS01P0eKzl5I5lfFKXT49M/9MiUrFn1/QtNJUovqkM+5yrw55cVX4/dYPlvYk4R9+fd7r5u3obEyhz5AQzevxEnH8fxHFjdariUMVZnC7PzhWPZQjjuIFbnOcOZvEAC6iyhkd4hTd4a72wDqwP1qd+qDVQcMbw17A+/wKS17fL</latexit>

Z 1
0

4
dx
2
1+x
<latexit sha1_base64="j+KUowALq9uGW98P/74s4ozsML4=">AAADFnichVJNS9xQFD2mH07tx0zbTaGb0FFxNdxIoVIoDO3GpR8dFZxhSOJTwyQvIXkz1Qb/gH9AwZXiLKT/wY2UdtlNF/4EcWlBFy68eRMUFe0Lybs59577zr3vOpHvJYrosM948PDR4/7Ck4Gnz56/KJZevppJwnbsipob+mE859iJ8D0paspTvpiLYmEHji9mndaXzD/bEXHihfKrWo1EI7CXpLfoubZiqFkqrpifzLqyZV0tC2WbzVKZKqSXeduwcqOMfE2EpTPUsYAQLtoIICCh2PZhI+FnHhYIEWMNpIzFbHnaL7CGAea2OUpwhM1oi79L/Defo5L/s5yJZrt8is9vzEwTQ/SX9uiEftMPOqLzO3OlOkemZZV3p8cVUbO4/mb69L+sgHeF5SvWvZoVFjGmtXqsPdJIVoXb43e+b5xMf5waSodph45Z/zYd0gFXIDv/3O6kmNq6R4/DWu7uWMonrfDpoe5/kkdK9nzTfQt0JZJvKkWXc3XYk6nK7qehsaw3Iefo+bNOL1xWb2IQZY4cZMYaj4h1cyBuGzOjFYsq1uT7cvVzPiwFvMU7jHCeD6hiHBOo6anZwi66xqaxb/w0fvVCjb6c8xrXlvHnAhZqslQ=</latexit><latexit sha1_base64="1CQkwTm/mHpOpeb5J8fJGoRvdw0=">AAADTXichVJNT9RQFD0UFMQPBtmQuJlYMKwmr8REQ0JCZMOSDwdImJG0nQc2tH1N2xnAhj/gH3DhChIWRv+FG3cmJiyI/gHjEo0uiPG8Nw0JEPA1fR/n3nvuufc9LwmDLBfiuMfq7btxs3/g1uDtO3fvDVWG7y9nqp36su6rUKWrnpvJMIhlPQ/yUK4mqXQjL5Qr3tastq90ZJoFKn6e7yayGbmbcbAR+G5OSFVstLCDKqb5N7CBFC58FEQbyPESkrOLPSIN4goZXmCSvofnrNX1ii1qwozq5Y1TbmyUY15V/pCwRUIfbUQkiknlIyRdxm8NDgQSYk2mdikrR2DskukGGduml6SHlrvFeZOntRKNedacmYnWskP+qRaKcXEk3okT8Um8F9/F6ZVcheHQWna5et1YmawPvR5d+v3fqIirbtBZ1LWaczb+qdEaUHtiEF2F343vvHpzsjS1OF48EgfiB/Xvi2PxkRXEnZ/+4YJcfHuNHo9aru5YwUw7zK5M/7PSM6Zl2/QtMpXEvKmCV+6hQ4tWpe+naTDdG0WOrl13unVWfRVjsOk5xog9PhHn4oO4vFmerDmi5iw8tmeelY9lAA/wEBPkeYIZzGEedWr4gC/4im/WZ+uXdWr97bpaPWXMCM6N3v5/FRS7hQ==</latexit><latexit sha1_base64="lbw0MT3NDTLgRBT7H7GXnzTI0Ys=">AAADf3ichVJBT9RAFH6lqIgCK1xMvExcEBOTZUo2UUhIiF70BosLJHTZTLuzuxPamaadXcBm/4B/wIMnTTgYf4YX/4AHLt6NR0z04ME3s1URAk7T9s177/ve995MkEQi05QeOyPu6JWr18auj9+4OTE5Vbo1vZmpXhryeqgilW4HLOORkLyuhY74dpJyFgcR3wr2npj4Vp+nmVDyuT5MeCNmHSnaImQaXc3SgV8Tna5maar2yTOyQnwhdZPu5n4iyEJ1QPx2ysK8Osi9B75mcneR+LrLNfsdaRXb3A9Vdiq6QqqnuQxVkWqKJKJZKtMKtYucN7zCKEOx1lTpB/jQAgUh9CAGDhI02hEwyPDZAQ8oJOhrQI6+FC1h4xwGMI7YHmZxzGDo3cNvB3c7hVfi3nBmFh1ilQjfFJEE5ugn+o6e0I/0Pf1Cf17IlVsOo+UQ/8EQy5Pm1MvbG9//i4rxr6H7F3WpZg1teGS1CtSeWI/pIhzi+y9enWws1+bye/Qt/Yr639Bj+gE7kP1v4dE6r72+RE+AWi6eWI6VDrC6svPPikyJkX07t9h2IvGkcjhCrj5GjCpzPg3rM7NRyDGMm0m3/nRPYBbKmDmLiAFeEe/shThvbC5WPFrx1qvl1cfFZRmDO3AX7iPPQ1iFp7AGddTw2Rl1JpxJ13Hn3YpLh6kjToGZgX+Wu/QLZJ7Tlg==</latexit>

3
2

変数変換

)I=

4

x = tan ✓

1

d✓
dx =
cos2 ✓

0

Z ⇡/4
0

0

0.2

4
d✓
=4
2
2
1 + tan ✓ cos ✓

0.4

0.6

x

Z ⇡/4
0

d✓ = ⇡

0.8

1

2021/9/30

スーパーコンピューター超入門

コンピュータにおける演算の仕組み(ノイマン型) コンピューター上では、全ての数がビット [0,1] の集まりで表現される

単精度浮動小数点 = 32ビットで1つの実数を表現
符号部 (sign) 1 bit

仮数部（fraction), “b” 23 bit

log10 (223 ) ⇠ 7 桁程度 (10進) が表現可
<latexit sha1_base64="4Sitmq0W9IGkUSl/kynf02Ta5ls=">AAADIHichVK7btRQED0xrxAeWaAB0VhsgkKzGi9IQVQRNJR5sEmk7LKynZvlKn7J9i4Ea0XPD1BQESkFQoKPoEmHKCjCHyDKIEFBwfFdCwRRwrXsOz4zZ+bM3Oslgc5ykb0x69jxEydPjZ+eOHP23PnJ2oWLy1ncT33V8uMgTlc9N1OBjlQr13mgVpNUuaEXqBVv817pXxmoNNNx9CDfSlQndHuR3tC+mxPq1q60g7jXLRwZ2jPNh0Xz5vCG3c50aM92a3VpiFn2QcOpjDqqNR/XfqCNdcTw0UcIhQg57QAuMj5rcCBIiHVQEEtpaeNXGGKC3D6jFCNcopv89vi3VqER/8ucmWH7rBLwTcm0MS2f5LXsy668kS/y89BchclRatni7o24KulOPr+89P2/rJB7jkd/WEdqzrGB20arpvbEIGUX/og/ePpif+nO4nRxXbblK/W/kj15zw6iwTd/Z0EtvjxCj0cth0+sYKUnrB6b+WdVZETPYzO30HQS8aQK7DDXgJ5SVXk+HYOVs4mZY+QvJ73+u3sbU6gzcoqMIa+I8++FOGgsNxuONJyFW/W5u9VlGcdVXMMM88xiDvcxjxY1PGO9t3hnbVu71gfr4yjUGqs4l/DXsj7/Atl6tWI=</latexit>

変数型

指数部（exponent), “e” 8 bit( 1)sign (1.b1 b2 . . . b23 )2 ⇥ 2e 127

FORTRAN: real(kind=4)
C, C++: float
Python: 基本はなし<latexit sha1_base64="XynGJF0BBRQlgkEFTXlwKanA/AE=">AAADQ3ichVLLahRBFD1pX3lpRt0E3DROIpNFhupWiIiLoBuXeThJIDNpunsqkyL9oqtmNDbzA/6AC1cGshA/Q4RsFVzkEyS7JKALhdyqaRQNidV01a1z77l17q0KskhIxdjBkHXp8pWr14ZHRsfGr9+YqNy8tSLTbh7yRphGab4W+JJHIuENJVTE17Kc+3EQ8dVg+6n2r/Z4LkWaPFc7GW/FficRmyL0FUFe5XFt1pnZKJp5bEvRSfp2zakHnmMHnms3o3aqJJmFe78/owElYi5td6Pgs4471/cqVVZnZthnDac0qijHQlr5gSbaSBGiixgcCRTZEXxI+tbhgCEjrIWCsJwsYfwcfYwSt0tRnCJ8Qrdp7tBuvUQT2uuc0rBDOiWiPyemjWn2lb1nx2yffWDf2M9zcxUmh9ayQ2sw4PLMm3g9ufz9v6yYVoWtP6wLNSts4qHRKkh7ZhBdRTjg9169OV5+tDRd3GO77JD0v2MH7CNVkPROwr1FvvT2Aj0BaTm/YwWd9JJOT03/ZRmZkOeF6VtsKknopgrsUa4eebQqfT8tg+nepJRj4Nedbv+u3sYUqhQ5RQz9RJx/H8RZY8WtO6zuLD6ozj8pH8sw7uAuapRnDvN4hgU0SMMu9vEZX6xP1qF1ZJ0MQq2hknMbfw3r1ynBgMG5</latexit>

倍精度浮動小数点 = 64ビットで1つの実数を表現
符号部 (sign) 1 bit

仮数部（fraction), “b” 52 bit

指数部（exponent), “e” 11 bit( 1)sign (1.b1 b2 . . . b52 )2 ⇥ 2e 1023
<latexit sha1_base64="gLMuFjUK2FLK/pvS4/ABimbQTbI=">AAADRHichVLNahRBEK6MfzH+ZBMvgpfBTWRzyFIzGhIEIejFY37cJJDdDDOznbXJTPcw3bsmDvsCvoAHTyo5iI8hiF4VD3kE0dsqehCxundQNCT2MN3VX9VX/VV1R1nClUY8GHFOnDx1+szo2bFz5y9cHK9MTK4p2c1j1ohlIvONKFQs4YI1NNcJ28hyFqZRwtajnTvGv95jueJS3NN7GWulYUfwbR6HmqCgcqs2681sFc08dRXviL5b8+pR4LlR4LvNpC21IrOY8/szBtA8Zcr1two266F/vR9UqlhHO9zDhlcaVSjHkqx8hya0QUIMXUiBgQBNdgIhKPo2wQOEjLAWFITlZHHrZ9CHMeJ2KYpRREjoDs0d2m2WqKC9yaksO6ZTEvpzYrowjR/wBQ7wDb7Ej/jjyFyFzWG07NEaDbksC8YfXV799l9WSquG+39Yx2rWsA0LVisn7ZlFTBXxkN97+HiwenNluriGz/AT6X+KB/iKKhC9L/H+Mlt5coyeiLQc3bGCTtql06XtvyojBXke2L6lthJBN1XAPuXqkceoMvfTspjpjaQcQ7/pdPt39S5MQZUip4hhnoj374M4bKz5dQ/r3vKN6uLt8rGMwhW4CjXKMw+LcBeWoEEansNbeAfvndfOZ2fgfB2GOiMl5xL8NZyfvwBz4MHx</latexit><latexit sha1_base64="zZQLlMDSE8IlaEvlCCcLNAbZMKo=">AAADIXichVLPT9RAFP4oiogKC16MXhoWDF42rxsJhBPRi0d+LZCw66YtwzKh7TRtdwGbTTz7D3jwpAYTwgH+By9yIyQciH+B8YiJHjz4OttogIDTdObN99735ntvxgk9GSdEp11G942bPbd6b/fduXuvf6AwOLQYq2bkioqrPBUtO3YsPBmISiITTyyHkbB9xxNLzsbzzL/UElEsVbCQbIei5tuNQK5J104YqhceVj3VqKcWtc2x8st0vNx+YlZj6ZvWeL1QpBLpYV42rNwoIh8zqvALVaxCwUUTPgQCJGx7sBHztwILhJCxGlLGIrak9gu00cfcJkcJjrAZ3eC5wbuVHA14n+WMNdvlUzz+I2aaGKUT2qUz+kJ79I1+X5kr1TkyLdu8Oh2uCOsDbx7M//wvy+c1wfo/1rWaE6xhUmuVrD3USFaF2+G3Xr09m5+aG00f0wf6zvrf0yl95gqC1g93Z1bMvbtGj8Naru5Yyidt8elK9z/OIwP2bOq++bqSgG8qxQ7narEnU5XdT01jWW8U5+j4s06v/q3exAiKHDnCjDY/Eevig7hsLJZLFpWs2afF6Wf5Y+nFIwxjjPNMYBovMIMKa3iNT9jHgfHRODSOjONOqNGVc+7j3DC+/gGIvbWd</latexit>

log10 (252 ) ⇠ 15 桁程度 (10進) が表現可
変数型

FORTRAN: real(kind=8)
C, C++: double
Python: 無指定で倍精度

842021/9/30

スーパーコンピューター超入門

プログラムの解説 C
pi.c [非並列版]

pi_mpi.c [並列版]#include <stdlib.h>#include <stdio.h>#include <stdlib.h>#include <stdio.h>#include <mpi.h>

int main(void) {int i;
int ndiv = 10000000;

double width = 1.0 / (double)ndiv;
printf("width = %.15f¥n", width);
double sum = 0.0;
double x = 0.0;

for (i=0; i<ndiv; i++) {x = (i+0.5)*width;
sum += width * 4.0 / (1.0 + x*x);}

for (i = myrank*ndiv_local;i < (myrank+1)*ndiv_local; i++) {x = (i + 0.5) * width;
sum = sum + width * 4.0 / (1.0 + x*x);}

int main(int argc, char* argv[]) {int ndiv = 5600000000;
int ierr, myrank, nprocs;
int ndiv_local, i;
double x, width, sum, total_sum;
double t1, t2;

MPI_Reduce(&sum, &total_sum, 1, MPI_DOUBLE,
MPI_SUM, 0, MPI_COMM_WORLD);
t2 = MPI_Wtime();width = 1.0 / (double)ndiv;
if (myrank == 0) {printf("PI(MPI) = %.18f¥n", total_sum);printf("Number of cores utilized = %d¥n", nprocs);
printf("Execution time = %.8f (sec.)¥n", t2 - t1);}

ierr = MPI_Init(&argc, &argv);
ierr = MPI_Comm_rank(MPI_COMM_WORLD,&myrank);ierr = MPI_Comm_size(MPI_COMM_WORLD,&nprocs);

ierr = MPI_Finalize();t1 = MPI_Wtime();printf("PI = %.15f¥n", sum);
return 0;}

return 0;
sum = 0.0;
ndiv_local = ndiv / nprocs;

}

コンパイル
[tUVXYZ@obcx01 calc_pi_mpi]$ mpiicc pi_mpi.c –o pi_mpi.out

862021/9/30

スーパーコンピューター超入門

プログラムの解説 Fortranpi.f90 [非並列版]

pi_mpi.f90 [並列版]program main

program main

implicit none

Use mpi
implicit none

integer i, ndiv
real(kind=8) unit, width, sum, x

do i=myrank*ndiv_local+1, (myrank+1)*ndiv_local
x = ( dble(i-1) + 0.5)*width
sum = sum + width * 4.0 / (1.0 + x*x)
end docall MPI_REDUCE(sum, total_sum, 1, MPI_REAL8,MPI_SUM, 0, MPI_COMM_WORLD, ierr)ndiv = 560000000
width = 1.0 / dble(ndiv)

integer ndiv, ierr, myrank, nprocs
integer ndiv_local, i;real(kind=8) unit, width, sum, x, total_sum
real(kind=8) t1, t2

print *, "width"
print '(F18.14)', widthndiv = 5600000000
width = 1.0 / dble(ndiv)

sum = 0.0d0
x = 0.0d0

call MPI_INIT(ierr)call MPI_COMM_RANK(MPI_COMM_WORLD,
myrank, ierr)call MPI_COMM_SIZE(MPI_COMM_WORLD,
nprocs, ierr)

if (myrank .eq. 0) thenprint "('PI(MPI) = ', F18.16)", total_sum
print "('Number of cores utilized = ', i0)", nprocs
print "('Execution time = ', F12.8)", t2 - t1
endif

do i = 1, ndiv
x = ( dble(i-1) + 0.5) * width
sum += width * 4.0 / (1.0 + x*x)
end doprint *, "sum"print '(F18.14)', sum

t2 = MPI_Wtime()call MPI_FINALIZE(ierr)end program main

sum = 0.0d0
ndiv_local = ndiv / nprocs
t1 = MPI_Wtime()

end program main

コンパイル
[tUVXYZ@obcx01 calc_pi_fortran]$ mpiifort pi_mpi.f90 –o pi_mpi.out

872021/9/30

スーパーコンピューター超入門

プログラムの解説 Python
pi.py [非並列版]

pi_mpi.py [並列版]program main
implicit none

from mpi4py import MPI
import numpy

integer i, ndiv
real(kind=8) unit, width, sum, xcomm = MPI.COMM_WORLD
myrank = comm.Get_rank();
nprocs = comm.Get_size();ndiv = 560000000
width = 1.0 / dble(ndiv)
print *, "width"
print '(F18.14)', width
sum = 0.0
x = 0.0
do i = 1, ndiv
x = ( dble(i-1) + 0.5) * width
sum = sum + width * 4.0 / (1.0 + x*x)
end doprint *, "sum"print '(F18.14)', sum

ndiv = 560000000
width = 1.0/ndiv
t1 = MPI.Wtime()
sum = numpy.zeros(1)total_sum = numpy.zeros(1)ndiv_local = ndiv // nprocs
for i in range (myrank*ndiv_local, (myrank+1)*ndiv_local):x = width * (i+0.5)
sum[0] = sum[0] + width * 4.0 / (1.0 + x*x)comm.Reduce([sum, MPI.DOUBLE], total_sum, op=MPI.SUM, root=0)
t2 = MPI.Wtime()

end program main
if comm.rank == 0:
print("PI(MPI) = ", total_sum[0])print("Number of cores utilized = ", nprocs)
print("Exectution time = ", t2 - t1, " (sec.)"882021/9/30

スーパーコンピューター超入門

プログラムなど一式を自分の /work へコピー
[tUVXYZ@obcx01 ~]$ cd /work/gt00/tUVXYZ[tUVXYZ@obcx01 tUVXYZ]$ mkdir calc_pi_mpi[tUVXYZ@obcx01 tUVXYZ]$ cd calc_pi_mpi[tUVXYZ@obcx01 calc_pi_mpi]$ pwd/work/gt00/tUVXYZ/calc_pi_mpi

Fortran の方$ cp /work/gt00/share/z30122/pi_fortran_mpi/* .

C の方

アスタリスク = ワイルドカード「ここはなんでも良い」$ cp /work/gt00/share/z30122/pi_c_mpi/* .

Python の方$ cp /work/gt00/share/z30122/pi_python_mpi/* .

89

2021/9/30

スーパーコンピューター超入門

並列プログラムのコンパイル
C および Fortran では プログラムをコンパイルします。
C の方[tUVXYZ@obcx01 calc_pi_mpi]$ mpiicc pi_mpi.c –o pi_mpi.out

Fortran の方[tUVXYZ@obcx01 calc_pi_mpi]$ mpiifort pi_mpi.f90 –o pi_mpi.out

902021/9/30

スーパーコンピューター超入門

Python の方
事前に次の作業が必要です。
[tUVXYZ@obcx01 ~]$ cd /work/gt00/tUVXYZ/calc_pi_mpi[tUVXYZ@obcx01 calc_pi_mpi]$ emacs setenv.sh(or vim setenv.sh)
次のところを変更してください

export PYTHONUSERBASE=/work/gt00/tUVXYZ/.local⇩
自分のユーザー名に次にsetup.sh スクリプトを実行 （numpy, mpi4py をインストールします）[tUVXYZ@obcx01 ~]$ ./setup.sh

91

2021/9/30

スーパーコンピューター超入門

並列プログラムのジョブスクリプト
性能が向上することを見ます。
様々な並列度のジョブスクリプトを用意しました。
[tUVXYZ@obcx01 calc_pi_mpi]$ pjsub run_n1c0004.sh-

1ノード, 4コア

[tUVXYZ@obcx01 calc_pi_mpi]$ pjsub run_n1c0028.sh- 1ノード, 28コア

[tUVXYZ@obcx01 calc_pi_mpi]$ pjsub run_n1c0056.sh- 1ノード, 56コア

[tUVXYZ@obcx01 calc_pi_mpi]$ pjsub run_n2c0112.sh- 2ノード, 112コア[tUVXYZ@obcx01 calc_pi_mpi]$ pjsub run_n4c0224.sh- 4ノード, 224コア[tUVXYZ@obcx01 calc_pi_mpi]$ pjsub run_n8c0448.sh- 8ノード, 448コア

922021/9/30

スーパーコンピューター超入門

ジョブの実行状況の確認
自分の全てのジョブが終わるまで、待機します。
[tUVXYZ@obcx01 calc_pi_mpi]$ pjstat

ジョブが終了すると、出力ファイルが出ているはずです。
[tUVXYZ@obcx01 calc_pi_mpi]$ ls

pi_mpi.c
pi_mpi.out
result_n1c0004.txt
result_n1c0028.txt
result_n1c0056.txt

result_n2c0112.txt
result_n4c0224.txt
result_n4c0448.txt
run_n1c0004.sh
run_n1c0028.sh

run_n1c0056.sh
run_n2c0112.sh
run_n4c0224.sh
run_n8c0448.sh“result_n*c****.txt” が、結果を記載した出力ファイルです。

932021/9/30

スーパーコンピューター超入門

結果を確認、実行時間を比較してみましょう
出力ファイルには実行時間の記載があります。
出力ファイルの冒頭部分を一斉に見てみましょう。
[tUVXYZ@obcx01 calc_pi_mpi]$ head result*.txt

並列化で実行時間が短縮されています。
==> result_n1c0004.txt <==PI(MPI) = 3.141592653589913464
Number of cores utilized = 4
Execution time = **.******** (sec.)==> result_n2c0112.txt <==PI(MPI) = 3.141592653589794892
Number of cores utilized = 112
Execution time = **.******** (sec.)==> result_n1c0028.txt <==PI(MPI) = 3.141592653589770912
Number of cores utilized = 28
Execution time = **.******** (sec.)==> result_n4c0224.txt <==PI(MPI) = 3.141592653589791340
Number of cores utilized = 224
Execution time = **.******** (sec.)==> result_n1c0056.txt <==PI(MPI) = 3.141592653589800221
Number of cores utilized = 56
Execution time = **.******** (sec.)==> result_n8c0448.txt <==PI(MPI) = 3.141592653589797557
Number of cores utilized = 448
Execution time = **.******** (sec.)

94

2021/9/30

スーパーコンピューター超入門

参考情報：OBCXのリソースグループ
リソースグループ毎のノード数および最長実行時間一覧
リソース
グループ名

ノード数

最長実行
時間

説明

debug

1～16

30分 デバッグ用

short

1～8

8時間 短いジョブ用

1～128

48時間

129～256

24時間

1

2時間

2～8

10分

tutorial

1～8

15分 講習会用

lecture1～8

15分 講習会後一か月間有効

regularinteractive

通常使うリソースグループ

インタラクティブジョブ用（後述）n 講習会中はtutorialをご使用ください。
n 講習会後から利用期限まではlectureをご利用ください。
n それ以外のリソースグループは使用できません。

952021/9/30

スーパーコンピューター超入門

参考情報：計算ノードで直接操作したい場合
通常、スパコンでは
ログインノードと呼ばれる玄関口から実行命令を出します1. ログイン[tut138@obcx02~]$ ls -l
drwxr-x--- 2 shiba group 10 1
Apr 13:00 test.out[tut138@obcx02~]$ ./test.out
Hello world[tut138@obcx02~]$ qsub a.sh

3. プログラム動作

2. ジョブ投入

SSH

端末

ログインノード2’. ログイン

計算ノード
= 本体

96

スーパーコンピューター超入門

参考情報：計算ノードで直接操作したい場合
インタラクティブジョブ
対話型のジョブ デバッグなどに便利
手元で実行しているのと同様の挙動[tUVXYZ@obcx04 tUVXYZ]$ pjsub --interact -g gt00 -L rscgrp=interactive,node=1[INFO] PJM 0000 pjsub Job 517079 submitted.
[INFO] PJM 0081 .connected.
[INFO] PJM 0082 pjsub Interactive job 517079 started.
[tUVXYZ@cx0065 tUVXYZ]$

ログインノード(obcx04)から計算ノード(cx0065)へログインしたような状態でプログラムの実行が可能

ログインノードとは違い専用の領域にいるので、負荷のある実行をして良い

97

第138回講習会スーパーコンピューター超入門：実習編

98

最後に：計算結果のファイルを手元に転送する
一度スーパーコンピューターからログアウトしてみます。
[tUVXYZ@obcx01 ****]$ exit
Mac-mini:~ shiba$

sftp を用いてファイル転送を行います
Mac-mini:~ shiba$ sftp tUVXYZ@obcx.cc.u-tokyo.ac.jp
sftp > cd /work/gt00/tUVXYZ/fibo
sftp > get fibonacci.txt
Fetching /work/00/gt00/tUVXYZ/fibonacci.txt fibonacci.txt/work/00/gt00/tUVXYZ/fibonacci.txt
100% 171
11.9KB/s
sftp > exit
Mac-mini:~ shiba$ ls
fibonacci.txt

00:00