― 68 ―SENAC Vol. 57, No. （2 2024. 4）［大規模科学計算システム］【AOBA-A および AOBA-B の利用法】

サブシステム AOBA-B の利用法
情報部デジタルサービス支援課

1 はじめに本センターはスーパーコンピュータ AOBA のサブシステム AOBA-B の運用を 2020 年 10 月から開始

しています。本稿では， サブシステム AOBA-B でのプログラミング利用ガイドとして，プログラムの作成からコンパイル，実行等の使い方についてご紹介します。

サイバーサイエンスセンターの大規模科学計算システムを利用するためには利用申請が必要です。利

用申請について詳しくは「利用申請」(https://www.ss.cc.tohoku.ac.jp/apply-for-use/) ご参照ください。

2 システムの構成

本センターでは，スーパーコンピュータ AOBA として，サブシステム AOBA-A（SX-Aurora TSUBASA）とサブシステム AOBA-B（LX 406Rz-2）の 2 つの計算機システムをサービスしています（図 1）。また，

2PB のストレージシステムは AOBA-A，AOBA-B と InﬁniBand で接続され，高速な I/O が可能です。

利用者は SINET5 を利用したリモートアクセス接続により，全国から大規模科学計算システムを利用することが可能です。

図 1 スーパーコンピュータ AOBA の構成

サブシステム AOBA-B の利用法

― 69 ―

2.1 サブシステム AOBA-B の特徴

LX 406Rz-2 は，1 ノードに AMD EPYC プロセッサ 7702（64 コア）を 2 基と 256GB の主記憶装置を搭載し，合計 68 ノードで構成されます。OpenMP・MPI を利用したノード内の並列処理は 128 並列まで可能で，ノードあたりの最大演算性能は 4.096TFLOPS（倍精度），システム全体では 278.5 TFLOPS（倍精度）となります。複数のノードを使用した並列処理は，MPI の利用により最大 2,048 コア並列，4TB の主記憶を利用可能です。ベクトル演算に不向きなプログラムや，商用アプリケーションの高速な実行が可能です。



図 2 サブシステム AOBA-B（4 ラック）

• 1 ノード（64 コア× 2）あたり，4.096TFLOPS(DP) の理論演算性能• 1 ノードあたり 256GB の共有メモリを搭載し，メモリバンド幅（データ転送性能）は 409.6GB/s• 一時領域として，アクセスが高速な SSD ストレージを搭載

2.1.1 ソフトウェア



フロントエンドサーバの Linux OS 環境上で，EPYC プロセッサ向けのプログラムを作成できます。

一般的な Linux OS ですので，商用アプリケーションやオープンソフトウェアも実行が可能です。

サブシステム AOBA-B 向けにインストールされているアプリケーションについては，「アプリケーションサービス」(https://www.ss.cc.tohoku.ac.jp/software-service/) をご参照ください。
■プログラミング言語

Fortran/C/C++ コンパイラとして，AMD Optimizing C/C++ Compiler と GNU

Compiler Collection が利用出来ます。OpenMP による共有メモリ並列実行と MPI ライブラリによる分散メモリ並列実行が可能です。また，前システムの並列コンピュータで実行していたソースコードの移行用として，Intel Compiler をライセンス数限定で利用できます。

■科学技術計算ライブラリを利用出来ます。

EPYC プロセッサに最適化された，AMD Optimizing CPU Libraries (AOCL)

― 70 ―

SENAC Vol. 57, No. （2 2024. 4）• AOCL-Sparse• BLIS• FFTW (Fastest Fourier Transform in the West)• AMD Math Library (LibM)• libFLAME• ScaLAPACK• AMD Random Number Generator Library
AOCL の詳細については https://developer.amd.com/tools-and-sdks/をご参照ください。

ま た ，Intel Compiler か ら は MKL ラ イ ブ ラ リ が 利 用 出 来 ま す 。MKL に つ い て の 詳 細 はhttps://www.xlsoft.com/jp/products/intel/perﬂib/mkl/index.html をご参照ください。

■アプリケーション性能解析ツール AMD μ Prof が利用できます。実行したプログラムの性能およびシステム性能分析機能が利用出来ます。

AMD μ Prof の詳細については https://developer.amd.com/tools-and-sdks/をご参照ください。

2.2

プログラムの実行方法

プログラムの実行の方法として表 1 の 3 種類が利用できます。並列実行には 3 種類があります。

■逐次実行

単一のコアで動作するプログラムです。1 ノード内には 64 コアの CPU が 2 つあります

が，逐次実行では 1 コアのみが利用されます。メモリは 256GB まで利用出来ます。

■OpenMP 並列

逐次処理プログラムをユーザが明示的に並列化します。ソース中の並列化したい箇所に並列化指示行を追加します。

共有メモリ並列実行が可能なので，1 ノード内の 128 コア（2CPU）を利用出来ます。メモリは 256GBまで利用出来ます。

■MPI 並列 MPI ライブラリによりプロセッサ間通信を行います。データの分割，処理方法等の並列処理手順を明示的に記述した MPI プログラムを作成する必要があります。

分散メモリ並列実行が可能なので，複数のノードを用いた実行が可能です。サブシステム AOBA-B

では最大 16 ノード（2,048 コア），メモリは 4,096GB まで利用出来ます。

MPI 並列と OpenMP 並列を同時に利用した並列実行も可能です。

表 1 実行の種類，特徴，最大並列数，最大メモリ量
実行の種類

並列化の方法

コードの改変量

OpenMP 並列
MPI 並列ユーザによる指示行挿入

少ない

逐次実行

-

MPI ライブラリを用いたプログラミング

3 プログラムのコンパイルと実行手順

-

多い

最大並列数

128 コア128 コア
2,048 コア

最大メモリ量256GB
256GB
4,096GB

本章ではプログラムのコンパイルと，サブシステム AOBA-B で実行する手順を説明します。コンパ

イラについては AOCC を使用した場合について説明します。

サブシステム AOBA-B の利用法

― 71 ―

3.1 フロントエンドサーバへのログイン

サブシステム AOBA-B 用のコンパイルはフロントエンドサーバで行います。セキュリティ対策のため，フロントエンドサーバへはログインサーバを経由します。ストレージシステムとの大容量のデータ転送は，データ転送サーバを利用します。いずれのサーバにも公開鍵暗号方式による SSH 接続でログインを行います。

ログインサーバ
login.cc.tohoku.ac.jp

データ転送サーバ
ﬁle.cc.tohoku.ac.jp

フロントエンドサーバ

・フロントエンドサーバへのログイン・プログラムのコンパイル
・バッチリクエストの投入

・ストレージシステムとのデータ転送（AOBA-A，AOBA-B での実行）

・バッチリクエストの確認、削除
・結果の確認

図3

ログインサーバ，フロントエンドサーバ，データ転送サーバ

鍵の作成からログインサーバを経由してフロントエンドサーバーへログインする方法については，利用申請からログインまで (https://www.ss.cc.tohoku.ac.jp/ﬁrst-use/) をご参照ください。

データ転送サーバの利用方法や，ストレージ容量の追加方法などについては，「データ転送（ストレージ）」(https://www.ss.cc.tohoku.ac.jp/storage/) をご参照ください。

3.2

プログラムの作成とコンパイル

3.2.1 ソースファイルの作成

フロントエンドサーバ上でソースファイルを作成するためのエディタは，emacs または vim が一般的です。研究室等のサーバやパソコンからソースファイルを転送する場合は，SSH 対応のファイル転送ソフトや scp コマンドで利用者のホームディレクトリに転送してください。Windows 環境で作成したソースコードの改行コードと文字コードを Linux 用にするためには，転送した後のソースコードに nkfコマンドを利用します（リスト 1）。

リスト 1 nkf コマンドの使用例

改 行 コ ー ド を L F ， 文 字 コ ー ド を U T F -8 に 変 換 し ， 別 の フ ァ イ ル に 書 き 出 す 方 法
front$ nkf -Lu 変 換 前 ソ ー ス フ ァ イ ル 名 > 変 換 後 ソ ー ス フ ァ イ ル 名

改 行 コ ー ド を L F ， 文 字 コ ー ド を U T F -8 に 変 換 し て ソ ー ス フ ァ イ ル を 上 書 き 保 存 す る 方 法
front$ nkf --overwrite -Lu ソ ー ス フ ァ イ ル 名

3.2.2 利用可能なコンパイラの種類

AOCC コンパイラとして，以下の Fortran および C/C++ コンパイラを利用できます。

― 72 ―

SENAC Vol. 57, No. （2 2024. 4）

AOCC



• ﬂang：Fortran コンパイラ• mpifort：MPI プログラム用 Fortran コンパイラ• clang：C コンパイラ• mpicc：MPI プログラム用 C コンパイラ• clang++：C++ コンパイラ• mpic++：MPI プログラム用 C++ コンパイラ

3.2.3 コンパイルを行う

ソースファイルはそれぞれの言語用コマンドでコンパイルします。単一コアで実行する逐次実行，OpenMP による共有メモリ並列実行および MPI ライブラリによる分散メモリ並列実行のコンパイル手順について解説します。

■Fortran プログラム ソースコードは ﬂang コマンドまたは mpifort コマンドでコンパイルします。利
用したい機能があれば，表 2 に示したようなコンパイルオプションを同時に指定します。その他のオプションについてはマニュアル（4 章）をご参照ください。

ソースファイルの拡張子は，自由形式（フリーフォーマット）なら.f90 .f95 か.F90 .F95 を，固定形式（７カラム目から記述）なら.f か.F を，2003 形式であれば.f03 か.F03 を付けます。（拡張子が大文字で始まるものは，コンパイルの前に cpp によるプリプロセス処理が行われます。）

コンパイルが成功すると，標準ではカレントディレクトリに実行オブジェクト a.out が作成されます。
表 2 Fortran,C,C++ コンパイラの主なオプション
コンパイルオプション-march=znver2-On
n に指定できる値
fast3210-fopenmp

機能

EPYC CPU（Rome）用にコンパイルすることを指定する

最適化レベルを指定する
最大限の最適化を適用する
積極的に最適化を適用する（既定値）標準的な最適化を適用する
最低限の最適化を適用する

すべての最適化を無効化する

OpenMP 並列化を利用する

最適化レベルを高くすると，最適化の副作用により計算結果が変わることがありますのでご注意下

さい。

（逐次実行）

リスト 2 ﬂang コマンドの使用例

front$ flang コ ン パ イ ル オ プ シ ョ ン F o r t r a n ソ ー ス フ ァ イ ル 名（ OpenMP並列実行）
front$ flang -fopenmp コ ン パ イ ル オ プ シ ョ ン F o r t r a n ソ ー ス フ ァ イ ル 名（ MPI並列実行）

リスト 3 mpifort コマンドの使用例

front$ mpifort コ ン パ イ ル オ プ シ ョ ン F o r t r a n ソ ー ス フ ァ イ ル 名サブシステム AOBA-B の利用法

― 73 ―（ MPIとOpenMPの同時並列実行）
front$ mpifort -fopenmp コ ン パ イ ル オ プ シ ョ ン F o r t r a n ソ ー ス フ ァ イ ル 名■C/C++ プログラム

ソースコードは clang または mpicc コマンドで C プログラムを，clang++ または mpic++ コマンドで C++ プログラムをコンパイルします。利用したい機能があれば Fortran コンパイ

ラと同じく，表 2 に示したようなコンパイルオプションを同時に指定します。その他のオプションについてはマニュアル（4 章）をご参照ください。

ソースファイルの拡張子は，C 言語であれば.c を，C++ であれば.C .cc .cpp .cp .cxx .c++ のいずれかを付けます。コンパイルが成功すると，カレントディレクトリに実行オブジェクト a.out が作成されます。

リスト 4 clang/clang++ コマンドの使用例（逐次実行）

front$ clang コ ン パ イ ル オ プ シ ョ ン C ソ ー ス フ ァ イ ル 名front$ clang ++ コ ン パ イ ル オ プ シ ョ ン C++ ソ ー ス フ ァ イ ル 名（ OpenMP並列実行）
front$ clang -fopenmp コ ン パ イ ル オ プ シ ョ ン C ソ ー ス フ ァ イ ル 名front$ clang ++ -fopenmp コ ン パ イ ル オ プ シ ョ ン C++ ソ ー ス フ ァ イ ル 名

リスト 5 mpicc/mpic++ コマンドの使用例（ MPI並列実行）
front$ mpicc コ ン パ イ ル オ プ シ ョ ン C ソ ー ス フ ァ イ ル 名front$ mpic ++ コ ン パ イ ル オ プ シ ョ ン C++ ソ ー ス フ ァ イ ル 名（ MPIとOpenMPの同時並列実行）
front$ mpicc -fopenmp コ ン パ イ ル オ プ シ ョ ン C ソ ー ス フ ァ イ ル 名front$ mpic ++ -fopenmp コ ン パ イ ル オ プ シ ョ ン C++ ソ ー ス フ ァ イ ル 名

3.3 プログラムの実行

フロントエンドサーバでコンパイル作業を行って作成したプログラム（ジョブ）の実行は，バッチリクエストと呼ばれる方法で計算機に実行を依頼します。本センターではバッチリクエストの処理にNEC Network Queuing System V（以下，NQSV）を採用しています。図 4 にバッチリクエストの概念図を示します。

詳しくは「ジョブの実行方法」(https://www.ss.cc.tohoku.ac.jp/nqs/) をご参照ください。

ジョブスクリプトファイルの作成

バッチリクエストの投入

qsub コマンド

バッチリクエストの状態確認

reqstat コマンドバッチリクエストの終了

バッチリクエストのキャンセル

図 4 バッチリクエストの概念図

3.3.1 ジョブスクリプト

ジョブスクリプトに指定が必要となるのは，

qdel コマンド

― 74 ―

SENAC Vol. 57, No. （2 2024. 4）• 投入キュー名• 利用するノード数• 最大経過時間• 作業ディレクトリへの移動コマンド• プログラムの実行コマンドです。他に環境変数の指定，ファイルの操作コマンド等があれば適切な箇所に手続きを記述します。オ
プション，環境変数は ジョブスクリプト中では#PBS の後に記述します。

サブシステム AOBA-B で実行する場合の，必須オプションを表 3 に示します。
表3

サブシステム AOBA-B で実行する場合の必須オプションオプション指定するもの-q-b-l elapstim reqlx
1～16 の整数値

最大経過時間を hh:mm:ss 形式で機能

AOBA-B を利用することを指定利用するノード数を指定

計算機を利用する時間を指定

3.3.2 ジョブスクリプトの例■逐次実行の場合

リスト 6 に逐次実行の場合のジョブスクリプトの例を示します。逐次実行の場合，プログラムは 1CPU 中の 1 コアで実行されます。
リスト 6（ run.csh の 記 述 内 容 ）ジョブスクリプトの例（逐次実行）#!/ bin/csh#PBS -q lx #AOBA - B を 使 用 す る#PBS -b 1 #1 ノ ー ド を 使 う#PBS -l elapstim_req =2:00:00 # 最 大 経 過 時 間 を 2 時 間 に 指 定
cd $PBS_O_WORKDIR # q s u b を 実 行 し た デ ィ レ ク ト リ に 移 動./a.out # カ レ ン ト デ ィ レ ク ト リ の a.out を 実 行■OpenMP 並列実行の場合

リスト 7 に OpenMP 並列実行の場合のジョブスクリプトの例を示します。OpenMP 並列実行の場合，プログラムは 1 ノード内の 2～128 コアで実行されます。実行コア数の指定は，環境変数 OMP NUM THREADS で行います。
（ run.csh の 記 述 内 容 ）リスト 7 ジョブスクリプトの例（OpenMP 並列実行）#!/ bin/csh#PBS -q lx #AOBA - B を 使 用 す る#PBS -b 1 #1 ノ ー ド を 使 う#PBS -l elapstim_req =2:00:00 # 最 大 経 過 時 間 を 2 時 間 に 指 定#PBS -v OMP_NUM_THREADS =128 #128 コ ア 並 列 で 実 行
cd $PBS_O_WORKDIR # q s u b を 実 行 し た デ ィ レ ク ト リ に 移 動./a.out # カ レ ン ト デ ィ レ ク ト リ の a.out を 実 行■MPI 並列実行の場合 リスト 8 に MPI 並列実行の場合のジョブスクリプトの例を示します。MPI 並列実行の場合は，mpirun コマンドでプログラムの実行を行います。mpirun コマンドの後に，-b オプ

ションで指定した使用ノード数に応じて，バッチリクエストのノード割当てを自動的に設定するための環境変数$NQSV MPIOPT を指定します。（逐次実行や OpenMP 並列実行用にコンパイルされたプログ
ラムは MPI 並列実行を行っても，1 ノード内でしか実行されません。
）

MPI プロセス数が確保したノードの物理コア数（ノード数× 128）を超えると，演算性能が著しく低下しますのでご注意下さい。

サブシステム AOBA-B の利用法

（ run.csh の 記 述 内 容 ）― 75 ―

リスト 8 ジョブスクリプトの例（MPI 並列実行）#!/ bin/csh#PBS -T openmpi # M P I 実 行 環 境 を 指 定 ， A O C C で は o p e n m p i を 使 用 す る#PBS -q lx #AOBA - B を 使 用 す る#PBS -b 1 #1 ノ ー ド を 使 う#PBS -l elapstim_req =2:00:00 # 最 大 経 過 時 間 を 2 時 間 に 指 定

cd $PBS_O_WORKDIR # q s u b を 実 行 し た デ ィ レ ク ト リ に 移 動
mpirun -np 128 $NQSV_MPIOPTS ./a.out # カ レ ン ト デ ィ レ ク ト リ の a.out を 128 プ ロ セ ス 並 列 で 実 行■MPI，OpenMP 並列実行同時利用の場合ジョブスクリプトの例を示します。

リスト 9 に MPI，OpenMP 並列実行同時利用の場合の（MPI プロセス数）×（ノード内並列数）が確保したノードの物理コア数（ノード数× 128）を超えると，演算性能が著しく低下しますのでご注意下さい。

リスト 9 ジョブスクリプトの例（MPI，OpenMP 同時並列実行）（ run.csh の 記 述 内 容 ）#!/ bin/csh#PBS -T openmpi # M P I 実 行 環 境 を 指 定 ， A O C C で は o p e n m p i を 使 用 す る#PBS -q lx #AOBA - B を 使 用 す る#PBS -b 2 #2 ノ ー ド を 使 う#PBS -l elapstim_req =2:00:00 # 最 大 経 過 時 間 を 2 時 間 に 指 定#PBS -v OMP_NUM_THREADS =64 # ノ ー ド 内 は 6 4 コ ア 並 列 で 実 行

cd $PBS_O_WORKDIR # q s u b を 実 行 し た デ ィ レ ク ト リ に 移 動
mpirun -np 4 $NQSV_MPIOPTS ./a.out # カ レ ン ト デ ィ レ ク ト リ の a.out を 4 プ ロ セ ス × 6 4 コ ア 並 列 で 実 行

4 マニュアル

4.1 コンパイラマニュアル

コンパイラについては以下のマニュアルをご参照下さい。

• AMD Optimizing C/C++ Compiler：https://developer.amd.com/amd-aocc/• Intel Compiler：https://www.xlsoft.com/jp/products/intel/studio xe/

4.2 数値計算ライブラリマニュアル

並列コンピュータ用数値計算ライブラリについては以下のマニュアルをご参照下さい。

• AMD Optimizing CPU Libraries（AOCL）：https://developer.amd.com/amd-aocl/• Intel MKL：https://www.xlsoft.com/jp/products/intel/perﬂib/mkl/

5 おわりに本稿では，スーパーコンピュータ AOBA のサブシステム AOBA-B のプログラミング利用ガイドとして基本的な手順を紹介しました。研究室のサーバでは実現できなかったプログラムやアイデアを，ぜひ最新鋭のスーパーコンピュータでお試しください。研究の強力なツールとしてご活用いただければ幸いです。

ご不明な点，ご質問等ございましたら，お気軽にセンターまでお問い合わせください。問い合わせについては「利用相談」(https://www.ss.cc.tohoku.ac.jp/consultation/) をご参照下さい。