9. 他システムからの移行

9.1. 概要

富士通製他システム(PCクラスタ、スーパーコンピュータ「京」)から、スーパーコンピュータ「富岳」への移行、他社コンパイラ(Intelコンパイラ、gcc)からプログラムを移行する際に、非互換となる主要なコンパイルオプションを示します。

9.2. 「京」からの移行

スーパーコンピュータ「富岳」とスーパーコンピュータ「京」の主な相違点を示します。

項目

「京」

「富岳」

備考

実行可能ファイル

SPARC VIIIfx 形式

Armv8.2-A 形式

互換性無し。リコンパイルが必要。

ステージング

あり

なし

ノード内推奨プロセス数

1

4

1ノード内に4 CMG (Core Memory Group, NUMA nodeのこと)を持つため

ノード内最大スレッド数

8

48

4プロセス/ノード時は12スレッド/プロセス

ラージページ

4MiB/32MiB/256MiB

2MiB

エンディアン

ビッグエンディアン

リトルエンディアン

バイナリデータの互換性無し

言語環境設定方法

Env_baseファイルを利用

Environment Modulesを利用

デフォルト環境がログイン時、および、ジョブ実行時にロードされる

言語環境の主な非互換は「利用手引書 言語開発環境編」の「14. 京からの移行」を参照ください。

上記の相違を基に、ジョブスクリプトの変更例を以下に示します。

[スーパーコンピュータ「京」のジョブスクリプト例]

#!/bin/sh -x
#PJM --rsc-list  "node=8"              # 割当ノード数 8 (1次元形状)
#PJM --rsc-list  "elapse=01:00:00"     # 経過時間制限 1時間
#PJM --stg-transfiles all
#PJM --mpi "use-rankdir"               # ランク番号ディレクトリ使用宣言
#PJM --stgin "rank=* ./a.out %r:./"    # 各ランクに./a.outをステージイン
#PJM -s                                # 統計情報出力
#
. /work/system/Env_base                # 環境変数の設定
#
export OMP_NUM_THREADS=8
mpiexec -n 8 ./a.out                   # a.outを実行

ジョブスクリプトを次のように変更します。

  • ステージングに関連する定義(--stg-transfilesuse-rankdir--stgin--stgoutなど)を削除します。定義が残っていた場合、何もしません。

  • 1ノード 4プロセスとするため、max-proc-per-node=4をここでは利用しています。

  • プロセス数を 8 にするため、ノード数を 2 に変更します。ノード数が 8 の場合は、32プロセスで実行します。

  • ジョブ実行時にデフォルトの言語環境が設定されるため、環境変数の設定を削除します。

[スーパーコンピュータ「富岳」のジョブスクリプト例]

#!/bin/sh -x
#PJM --rsc-list  "node=2"              # 割当ノード数 2 (1次元形状)
#PJM --rsc-list  "elapse=01:00:00"     # 経過時間制限 1時間
#PJM --mpi max-proc-per-node=4         # 1ノード当たりに生成するMPIプロセス数の上限値。
#PJM -g groupname                      # 課題のグループ指定
#PJM -x PJM_LLIO_GFSCACHE=/vol000N     # ジョブで使用するデータ領域のvolume
#PJM -s                                # 統計情報出力
#

export OMP_NUM_THREADS=12
mpiexec -n 8 ./a.out                   # a.outを実行

ジョブ実行時は、pjsubを実行したディレクトリをジョブのカレントディレクトリとして動作します。 複数のジョブを同時に実行する場合は入出力データがジョブ間で競合しないように留意ください。

9.3. 富士通製他システムからの移行

富士通製他システムからの移行について、コンパイルオプションおよび最適化指示子の差異について示します。

9.3.1. オプション差異

他システムからの移行にあたり、代表的なオプションを示します。

PCクラスタ

「京」

FX100

「富岳」

変更点

-Kfast

-Kfast

-Kfast

-Kfast

-Kparallel

-Kparallel

-Kparallel

-Kparallel

-Kopenmp

-Kopenmp

-Kopenmp

-Kopenmp

なし

-KXFILL

-KXFILL

-Kzfill

「富岳」でオプション名を変更

なし

-Kuxsimd

-Kuxsimd

なし

「富岳」でオプションを廃止

-Kopenmp_tls

-Kopenmp_tls

-Kopenmp_tls

なし

「富岳」でオプションを廃止

9.3.2. 最適化指示子(OCL)差異

追加・変更された代表的なOCLを示します。

PCクラスタ

「京」

FX100

「富岳」

変更点

なし

XFILL

XFILL

ZFILL

「富岳」で名称変更

なし

UXSIMD

UXSIMD

なし

「富岳」で廃止

9.4. 他社システムからの移行

Intelコンパイラ、GNUについて、主要オプションの比較を示します。

項目

高速化のための最適化オプション誘導する

自動並列

OpenMP

局所変数をautomatic変数にする

スーパーコンピュータ「富岳」

-Kfast

-Kparallel

-Kopenmp

-Kauto

Intelコンパイラ

-O3 -xHost

-parallel

-openmp

-auto

GNU

-O3

-

-fopenmp

-

参考

  • GCC(gcc)からfccpxに移行する場合

    fccpxはC11仕様に加えて、GNU C拡張仕様に基づいて解釈します。
  • Intelコンパイラ(ifort)から frtpxに移行する場合

    Fortran固定形式を拡張するオプションを示します。
    スーパーコンピュータ「富岳」:-Fwide(255文字まで)
    Intelコンパイラ:-132

9.5. エンディアン

エンディアンについて、スーパーコンピュータ「京」との比較、および、対象のコンパイラについて説明します。

9.5.1. 概要

スーパーコンピューター「京」では、ビッグエンディアンが採用されていました。 一方、スーパーコンピュータ「富岳」および、周辺機器では、リトルエンディアンが採用されています。

ノードごとに、採用されているエンディアンを示します。

ノード種別

「京」

「富岳」

計算ノード

ビッグエンディアン

リトルエンディアン

ログインノード

リトルエンディアン

リトルエンディアン

スーパーコンピュータ「京」で作成したバイナリーデータを使用するためには、エンディアンを変換する必要があります。

変換の方針を以下に示します。

言語

変換方法

Fortran(書式無し入出力)

言語ソフトウェアの変換機能を利用

Fortran(その他)

利用者による変換

C

利用者による変換

C++

利用者による変換

MPI-IO

利用者による変換

9.5.2. 対象コンパイラ

対象とするコンパイラは次の通りです。 これらのコンパイラでは、Fortranのバイナリーデータを対象にエンディアン変換の機能が提供されているものがあります。

9.5.2.1. 富士通製コンパイラ

富士通製コンパイラでは、実行時オプションと変換コマンドが提供されています。

機能

説明

実行時オプション

Fortranプログラムの実行時オプションに-Wl,-Tを付けると、Fortran入出力時にエンディアン変換が実行されます。

変換コマンド

fcvendianpxコマンドを提供しています。 fcvendianpx inputfilename outputfilename type のように使用します。 type は、変換するデータの型(2、4、8、16のいずれかの値)を指定します。

9.5.2.2. Intel製コンパイラ

Intel製コンパイラでは、コンパイルオプションと実行時の環境変数が提供されています。

機能

説明

コンパイルオプション

-convert big_endian-convert little_endianを付加してコンパイルすることにより、書式無し数値データの形式を、ビッグエンディアン、または、リトルエンディアンにすることができます。

実行時環境変数

環境変数 F_UFMTENDIAN = MODE (MODE = big | little) を指定します。

9.5.2.3. GNU製コンパイラ(GCC)

gfortranでは、OPEN文の拡張による convert指定子と実行時のオプションが提供されています。

機能

説明

OPEN文の拡張子

CONVERT='BIG_ENDIAN'CONVERT='LITTLE_ENDIAN'をOPEN文に指定します。open(file='big.dat',form='unformatted', convert='big_endian') のように指定します。

実行時のオプション

-fconvert=big-endian-fconvert=little-endianを指定します。