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-transfiles
、use-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
を指定します。