8. 京からの移行¶
京からの移行について説明します。
8.1. 概要¶
スーパーコンピュータ「京」で提供していた言語環境と、スーパーコンピュータ「富岳」の言語環境の主な違いを記載しています。
8.2. 言語環境の対応¶
スーパーコンピュータ「富岳」では、スーパーコンピュータ「京」と同様に、Fortran、C、C++、MPI、OpenMPをサポートしています。
サポートする言語仕様は以下のように変更されています。仕様によって非互換となる記述を利用している場合は留意ください。
[対応している言語仕様]
区分
「京」
「富岳」
Fortran
ISO/IEC 1539-1:2004 (Fortran 2003)
ISO/IEC 1539-1:2010 (Fortran 2008)
C
ISO/IEC 9899:1999 (C99 規格)
ISO/IEC 9899:2011 (C11 規格)
C++
ISO/IEC 14882:2014 (C++14 規格)
ISO/IEC 14882:2017 (C++14 規格)
MPI
2.2
3.1
OpenMP
3.1
4.0
参考
スーパーコンピュータ「富岳」の詳細は、言語仕様を参照ください。
8.3. 版数の確認方法¶
バージョンの確認方法を示します。
言語ソフトウェアのバージョンはコンパイル時に、-V
オプションを指定します。
以下の例ではバージョンが 4.8.1 であることがわかります。
Fortranの表示例
[_LNlogin]$ mpifrtpx -V program.f frtpx: Fujitsu Fortran Compiler 4.8.1 tcsds-1.2.36 jwd_fortpx: Fujitsu Fortran Compiler 4.8.1 (Jun 30 2022 15:02:42)
C/C++の表示例
[_LNlogin]$ mpifccpx -V main.c fccpx: Fujitsu C/C++ Compiler 4.8.1 tcsds-1.2.36 simulating gcc version 6.1 ccpcompx: Fujitsu C/C++ Compiler 4.8.1 (Jun 16 2022 14:47:00)
8.4. 非互換項目¶
ここでは、コンパイルオプションや動作に関する主な非互換を示します。
8.4.1. Fortran¶
ここで示す各機能の詳細は、マニュアル「Fortran使用手引書」を参照ください。
- -Kauto、-Ktemparraystack、-Kautoobjstack オプションのデフォルト化
スタックの使用量が従来より増加する場合があります。
- 停留出力文実行時の IOSTAT 指定子の返却値
停留出力文で、書式仕様によって決まるFortran記録の長さが論理レコード長を超えた場合に、IOSTAT指定子に返却される値が変更になりました。 IOSTAT指定子に「134」が返却されます。従来は「-2」が返却されていました。
IOSTAT指定子の値に従って処理を行うようなプログラムでは、プログラムの変更が必要になります。
- 実行時情報出力機能の仕様変更
- 実行時情報出力機能として取得できていた情報(コスト情報の一部、並列化情報、入出力情報、ハードウェアモニタ情報)が、取得できなくなります。また、範囲指定(start_collection/stop_collection)による情報取得ができなくなります。ソースプログラム中に範囲指定(start_collection/stop_collection)、および、その定義(fjcoll_lib)が存在する場合、コンパイル時にエラーとなります。
並列化情報、ハードウェアモニタ情報を取得したい場合は、CPU性能解析ツールを利用してください。
- LLVM OpenMPライブラリの導入
- 並列化機能は、デフォルトでLLVM OpenMPライブラリを使用します。従来の富士通OpenMPライブラリを使用する場合は、
-Nfjomplib
オプションを指定してください。
- OpenMP API version 4.0仕様のサポートに伴う、マクロおよび名前付き定数の値変更
- 翻訳時オプション
-Kopenmp
指定時に-D_OPENMP=201307
が有効になります。名前付き定数 openmp_version の値は 201307 になります。プログラムの中で、マクロ _OPENMP または名前付き定数 openmp_version の値を使用している場合、変更後の値に対応するようプログラムを修正してください。
- 翻訳時オプション -K{openmp_tls|openmp_notls} の廃止
-K{openmp_tls|openmp_notls}
オプションを指定した場合、翻訳時に以下の警告メッセージが出力されます。警告: -Kopenmp_[no]tls オプションは廃止されました。
- -Kvppocl オプションの廃止
-Kvppocl
オプション、かつ、-Kocl
オプションが有効な場合、最適化指示子 NOVREC を最適化指示子 NORECURRENCE と同等に扱っていました。-Kvppocl
オプションが廃止されるため、それらを同等と扱うことができなくなりました。
- 翻訳指示行 "!optoins" に指定できるオプションを変更
- オプションには-O[1-3]が指定できます。翻訳指示行 "!options" で指定していた翻訳オプションを有効にしたい場合は、次の対処を行ってください。
!options行を記述していた手続を別のファイルに切り出し、!options行で指定していたオプションで翻訳する
- -Nuse_rodata オプションの廃止と仕様変更
- 定数引数以外の定数に代入を行うプログラムを実行すると、実行時異常終了する可能性があります。定数に代入を行わないようにプログラムを変更してください。
- -Kswp および -Kswp_strong オプション仕様の変更
-Kswp_strong
オプションの後ろに、-Kswp
、-O2
、-O3
、または、-Kfast
オプションを指定すると、-Kswp_strong
オプションは無効になり、-Kswp
オプションが有効になります。-Kswp_strong
オプションを有効にする場合は、-Kswp
、-O2
、-O3
、または、-Kfast
オプションより後ろに指定してください。
- -Kdalign オプションの廃止
コンパイルオプション
-Kdalign
が無効になり、以下のように警告されます。警告: -K に指定されたサブオプション dalign は正しくありません。
common変数のメンバーの align を合わせるために、
-Kdalign
を指定していた場合は、-Kalign_commons
を指定してください。
- -Kprefetch_strong をデフォルトに変更
-Kprefetch_sequential
、-Kprefetch_stride
、もしくは、-Kprefetch_indirect
により生成される L1 プリフェッチ命令がデフォルトでストロングプリフェッチとして動作します。ウィークプリフェッチとして動作するプリフェッチ命令を生成する場合は、-Kprefetch_nostrong
を指定してください。
- -Kprefetch_nostrong および -Kprefetch_nostrong_L2 を有効にするため -Khpctag が必要になる
-Kprefetch_nostrong
、および、-Kprefetch_nostrong_L2
を有効にするためには、-Khpctag
が必要になります。デフォルトは、-Khpctag
が有効です。
- 認識できないオプションが指定された場合の動作変更
- 認識できないオプションが指定された場合は、警告メッセージを出力し、指定を無視します。従来は警告メッセージを出力し、リンカへ渡していました。リンカへオプションを渡す場合、
-Wl
オプションを使用してください。
- -NRtrapオプションの指定方法を変更
翻訳時とリンク時に指定する必要があります。
8.4.2. C言語¶
ここで示す各機能の詳細は、マニュアル「C言語使用手引書」を参照ください。
- -Klibオプションのデフォルト化
-O0
オプションが有効な場合、省略時は-Knolib
オプションが適用されます。また、-O1
以上が有効な場合、省略時は-Klib
オプションが適用されます。本オプションが有効、かつ、利用者が標準ライブラリ関数と同名の関数を定義した場合、利用者の意図した結果にならない場合があります。
- 実行時情報出力機能の仕様変更
実行時情報出力機能として取得できていた情報(コスト情報の一部、並列化情報、入出力情報、ハードウェアモニタ情報)が、取得できなくなります。範囲指定(start_collection/stop_collection)による情報取得ができなくなります。
ソースプログラム中に範囲指定(start_collection/stop_collection)、および、その定義(fjcoll_lib)が存在する場合、コンパイル時にエラーとなります。 並列化情報、ハードウェアモニタ情報を取得したい場合は、CPU性能解析ツールを利用してください。
- LLVM OpenMPライブラリの導入
- 並列化機能は、デフォルトでLLVM OpenMPライブラリを使用します。従来の富士通OpenMPライブラリを使用する場合は、
-Nfjomplib
オプションを指定してください。
- 翻訳時オプション -noansi の廃止
言語仕様レベルを指定する場合は、
-std
オプションを使用してください。
- 翻訳時オプション -f{signed-char|unsigned-char} の省略値変更
-f{signed-char|unsigned-char}
オプションの省略時は、-funsigned-char
オプションが適用され、既定義マクロ__SIGNED_CHARS__は定義されません。ソースプログラム中に単なるchar型の宣言がある場合、符号が変わることで、プログラムの動作が以前と異なる場合があります。
- 翻訳時オプション -X の廃止(言語仕様のモードはGNU互換モードのみ)
GNU C拡張仕様が必ず有効になります。
- GNU C互換バージョンの変更
各マクロの値は以下となります。
マクロ
値
__GNUC__
6
__GNUC_MINOR__
1
__GNUC_PATCHLEVEL__
0
プログラムの中で各マクロの値を使用している場合、上記の値に対応するようプログラムを修正してください。
- 翻訳時オプション -std の省略値変更
-std
オプションを省略した場合、-std=gnu11
が適用されます。言語仕様レベルを指定する場合は、-std
オプションを使用してください。
マクロ __STRICT_ANSI__、linux、unix、および、__STDC_VERSION__の定義変更
マクロ
変更内容
__STRICT_ANSI__
-ansi
オプション、または、-std={c89|c99}
オプションが有効な場合に定義されます。linux
-std={gnu89|gnu99}
オプションが有効な場合に定義されます。unix
-std={gnu89|gnu99}
オプションが有効な場合に定義されます。__STDC_VERSION__
-std={c89|gnu89}
オプションが有効な場合、定義されません。プログラムの中で各マクロを使用している場合、上記の定義に対応するようプログラムを修正してください。
- 翻訳時オプション -Dname と -Uname を同時に指定した場合の動作変更
-D
オプションと、-U
オプションに同一の name を指定すると、後に指定した方が有効となります。
- 翻訳時オプション -N{line|noline} の省略値変更
-N{line|noline}
オプションの省略時は、-Nline
オプションが適用されます。
- 翻訳時オプション -K{openmp_tls|openmp_notls} の廃止
-K{openmp_tls|openmp_notls}
オプションを指定した場合、翻訳時に以下の警告メッセージが出力されます。警告: -Kopenmp_[no]tls オプションは廃止されました。
- -Kswp および -Kswp_strong オプション仕様の変更
-Kswp_strong
オプションの後ろに、-Kswp
、-O2
、-O3
、または、-Kfast
オプションを指定すると、-Kswp_strong
オプションは無効になり、-Kswp
オプションが有効になります。-Kswp_strong
オプションを有効にする場合は、-Kswp
、-O2
、-O3
、または、-Kfast
オプションより後ろに指定してください。
- -Kdalign オプションの廃止
コンパイルオプション
-Kdalign
が無効になり、以下のように警告されます。警告: -K に指定されたサブオプション dalign は正しくありません。
- ビルトイン関数 __sync_fetch_and_nand および __sync_nand_and_fetch の仕様変更
次のように変更しました。
ビルトイン関数
動作
type __sync_fetch_and_nand (type *ptr, type value, ...)
tmp = *ptr;*ptr = ~(tmp & value);return tmp;type __sync_nand_and_fetch (type *ptr, type value, ...)
*ptr = ~(*ptr & value);return *ptr;
- -Kprefetch_strong をデフォルトに変更
-Kprefetch_sequential
、-Kprefetch_stride
、もしくは、-Kprefetch_indirect
により生成される L1 プリフェッチ命令がデフォルトでストロングプリフェッチとして動作します。ウィークプリフェッチとして動作するプリフェッチ命令を生成する場合は、-Kprefetch_nostrong
を指定してください。
- -Kprefetch_nostrong および -Kprefetch_nostrong_L2 を有効にするため -Khpctag が必要になる
-Kprefetch_nostrong
、および、-Kprefetch_nostrong_L2
を有効にするためには、-Khpctag
が必要になります。デフォルトでは、-Khpctag
が有効です。
- 認識できないオプションが指定された場合の動作変更
- 認識できないオプションが指定された場合は、警告メッセージを出力し、無視します。従来は警告メッセージを出力し、リンカへ渡していました。リンカへオプションを渡す場合、
-Wl
オプションを使用してください。
8.4.3. C++¶
ここで示す各機能の詳細は、マニュアル「C++言語使用手引書」を参照ください。
- -Klibオプションのデフォルト化
-O0
オプションが有効な場合、省略時は-Knolib
オプションが適用されます。また、-O1
以上が有効な場合、省略時は-Klib
オプションが適用されます。本オプションが有効、かつ、利用者が標準ライブラリ関数と同名の関数を定義した場合、利用者の意図した結果にならない場合があります。
- 実行時情報出力機能の仕様変更
実行時情報出力機能として取得できていた情報(コスト情報の一部、並列化情報、入出力情報、ハードウェアモニタ情報)が、取得できなくなります。範囲指定(start_collection/stop_collection)による情報取得ができなくなります。
ソースプログラム中に範囲指定(start_collection/stop_collection)、および、その定義(fjcoll_lib)が存在する場合、コンパイル時にエラーとなります。 並列化情報、ハードウェアモニタ情報を取得したい場合は、CPU性能解析ツールを利用してください。
- LLVM OpenMPライブラリの導入
- 並列化機能は、デフォルトでLLVM OpenMPライブラリを使用します。従来の富士通OpenMPライブラリを使用する場合は、
-Nfjomplib
オプションを指定してください。
- C++03仕様 または C++11仕様における標準テンプレートライブラリ(STL)の変更
C++03仕様、または、C++11仕様の場合、STLとして libc++ を使用します。「京」では STLport を使用していました。
- 翻訳時オプション -f{signed-char|unsigned-char} の省略値変更
-f{signed-char|unsigned-char}
オプションの省略時は、-funsigned-char
オプションが適用され、既定義マクロ__SIGNED_CHARS__は定義されません。ソースプログラム中に単なるchar型の宣言がある場合、符号が変わることで、プログラムの動作が以前と異なる場合があります。
- 翻訳時オプション -X の廃止(言語仕様のモードはGNU互換モードのみ)
GNU C++拡張仕様が必ず有効になります。
- GNU C++互換バージョンの変更
各マクロの値は以下となります。
マクロ
値
__GNUC__
6
__GNUC_MINOR__
1
__GNUC_PATCHLEVEL__
0
__GNUG__
6
- 翻訳時オプション -std の省略値変更
-std
オプションを省略した場合、-std=gnu++14
が適用されます。
マクロ__STRICT_ANSI__ 、linux、unix、および、__cplusplusの定義変更
マクロ
変更内容
__STRICT_ANSI__
-std={c++98|c++03|c++11|c++14}
オプションが有効な場合に定義されます。linux
-std={gnu++98|gnu++03|gnu++11|gnu++14}
オプションが有効な場合に定義されます。unix
-std={gnu++98|gnu++03|gnu++11|gnu++14}
オプションが有効な場合に定義されます。__cplusplus
-std={c++98|c++03|gnu++98|gnu++03}
オプションが有効な場合、値は199711L になります。- 翻訳時オプション -Dname と -Uname を同時に指定した場合の動作変更
-D
オプションと-U
オプションに同一の name を指定すると、後に指定した方が有効となります。
- 翻訳時オプション -N{line|noline} の省略値変更
-N{line|noline}
オプションの省略時は、-Nline
オプションが適用されます。
- 翻訳時オプション -K{openmp_tls|openmp_notls} の廃止
-K{openmp_tls|openmp_notls}
オプションを指定した場合、翻訳時に以下の警告メッセージが出力されます。警告: -Kopenmp_[no]tls オプションは廃止されました。
- -Kswp および -Kswp_strong オプション仕様の変更
-Kswp_strong
オプションの後ろに、-Kswp
、-O2
、-O3
、または、-Kfast
オプションを指定すると、-Kswp_strong
オプションは無効になり、-Kswp
オプションが有効になります。-Kswp_strong
オプションを有効にする場合は、-Kswp
、-O2
、-O3
、または、-Kfast
オプションより後ろに指定してください。
- -Kdalignオプションの廃止
コンパイルオプション
-Kdalign
が無効になり、以下のように警告されます。警告: -K に指定されたサブオプション dalign は正しくありません。
- ビルトイン関数 __sync_fetch_and_nand および __sync_nand_and_fetch の仕様変更
次のように変更しました。
ビルトイン関数
動作
type __sync_fetch_and_nand (type *ptr, type value, ...)
tmp = *ptr;*ptr = ~(tmp & value);return tmp;type __sync_nand_and_fetch (type *ptr, type value, ...)
*ptr = ~(*ptr & value);return *ptr;
- -Kprefetch_strong をデフォルトに変更
-Kprefetch_sequential
、-Kprefetch_stride
、もしくは、-Kprefetch_indirect
により生成される L1 プリフェッチ命令がデフォルトでストロングプリフェッチとして動作します。ウィークプリフェッチとして動作するプリフェッチ命令を生成する場合は、
-Kprefetch_nostrong
を指定してください。
- -Kprefetch_nostrong および -Kprefetch_nostrong_L2 を有効にするため -Khpctag が必要になる
-Kprefetch_nostrong
、および、-Kprefetch_nostrong_L2
を有効にするためには、-Khpctag
が必要になります。デフォルトでは、-Khpctag
が有効です。
- 認識できないオプションが指定された場合の動作変更
- 認識できないオプションが指定された場合、警告メッセージを出力し、無視します。従来は警告メッセージを出力し、リンカへ渡していました。リンカへオプションを渡す場合、
-Wl
オプションを使用してください。
8.4.4. MPI¶
ここで示す各機能の詳細は、マニュアル「MPI使用手引書」を参照ください。
- Hasty Rendezvous通信機能を廃止
MCAパラメーター pml_ob1_use_hasty_rendezvous は使用できません。
- MCAパラメーター dpm_ple_socket_timeout を廃止
動的プロセスなどコミュニケータを共有しない2つのMPIプロセスグループ間の通信の待ち時間の設定が出来なくなります。
- 拡張RDMAインターフェースを廃止
uTofuインターフェースを使用するプログラムに修正をしてください。
- ランク問合せインターフェースを変更
以下のルーチンに機能を集約し、子プロセスが割り当てられたノードの情報の取得および従来のルーチン機能が使用できるようにしました。指定については、マニュアル「MPI使用手引書」の"ランク問合せインターフェース"を参照してください。
FJMPI_TOPOLOGY_GET_COORDS
FJMPI_TOPOLOGY_GET_RANKS
- Fortranのプロファイリングインターフェース利用で、C言語のMPI関数はフックされなくなる
Fortranプログラムでプロファイリングインターフェースを利用する場合、C言語のインターフェースを用いてフックすることができません。 Fortranプログラムでプロファイリングインターフェースを利用する場合は、Fortranのインターフェースを用いてフックしてください。
- MCAパラメーター orte_abort_print_stackをopal_abort_print_stack に変更
スタックのトレース情報を出力させる際のMCAパラメーター orte_abort_print_stack が使用できません。MCA パラメーターを opal_abort_print_stack に変更してください。
- MCAパラメーター dpm_ple_no_establish_connection のパラメーター名を変更
MCAパラメーターを mpi_no_establish_communication に修正してください。
- 集団通信で使用するリダクション演算のアルゴリズムを変更
「京」で実行した場合と、「富岳」で実行した場合とでリダクション演算順序が異なります。
このため、浮動小数点型、または複素数型データのMPI_SUMリダクション演算において精度誤差が発生し、計算結果が異なることがあります。
- MCAパラメーター coll_tbi_use_on_max_min の省略値を変更
MCAパラメーター coll_tbi_use_on_max_min の省略値を、0から1へ変更します。
MCAパラメーター coll_tbi_use_on_max_min の省略値を、0から1へ変更することによって、バリア通信が適用され、バリア通信を適用しない場合と計算結果が異なることがあります。
- 演算に使われる値にNaNが含まれている場合は、以下に注意してください。
バリア通信を適用する場合は、NaN以外の値を比較した結果となります。ただし、全ての値がNaNの場合は、NaNのうちのどれか1つの値となります。
バリア通信を適用しない場合は、実行時の条件次第で、NaN以外の値を比較した結果、またはNaNのうちのどれか1つの値となります。
- 演算に使われる値に、+0.0と-0.0の両方が含まれている場合は、以下に注意してください。
バリア通信を適用する場合は、0の符号を考慮して比較します。(+0.0 > -0.0)
バリア通信を適用しない場合は、0の符号は考慮されません。 +0.0 と -0.0 の大小比較において、どちらが選ばれるかは実行時の条件次第です。
- MCAパラメーター coll_tuned_use_6d_algorithm と coll_tuned_scatterv_use_linear_sync を廃止
廃止したMCAパラメーターを指定しても、その指定は無視されます。このため、意図したアルゴリズムが選択されず、性能が出ない恐れがあります。
これらのMCAパラメーターを廃止したことによる代替機能として、ブロッキング集団通信のアルゴリズム選択の機能を使用してください。 ブロッキング集団通信のアルゴリズム選択の機能については、マニュアル「MPI使用手引書」の"アルゴリズム選択によるチューニング"を参照ください。
- 通信タイムアウト設定機能に関するMCAパラメーター名を変更
通信待ちの打切り時間を指定するMCAパラメーターは、opal_progress_timeout です。
通信タイムアウト設定機能によるプログラム終了を遅延させる場合に指定するMCAパラメーターは、opal_abort_delay です。
- MCAパラメーター mpi_deadlock_timeout および mpi_deadlock_timeout_delayの廃止
MCAパラメーター mpi_deadlock_timeout、および、mpi_deadlock_timeout_delay は使用できません。これらのMCAパラメーターを指定しても、通信タイムアウト設定機能は動作しません。
- 高速型通信モードで通信できるプロセス数の上限の省略値を変更
高速型通信モードで通信できるプロセス数の上限の省略値は、256です。「京」は1024でした。
1プロセスあたりのノード間通信相手プロセス数が256を超えるMPIプログラムでは、通信性能が低下する場合があります。 MPIプログラム実行時のメモリ使用量に余裕がある場合は、MCAパラメーター common_tofu_max_fastmode_procs に256よりも大きな値を指定してMPIプログラムを実行してください。
8.4.5. ツール¶
ツールに関する非互換項目は以下のとおりです。
- 会話型デバッガを廃止
GUIを使った会話的に実行可能なデバッガは使用できません。
- デバッグエンジン(fdb)を廃止
デバッガは、gdbを利用してください。
- トレーサの廃止
トレーサは使用できません。
- Tofu PAの廃止
Tofu PAは使用できません。
- 基本プロファイラ情報(GUI形式)の廃止
テキスト形式を使用してください。
- 詳細プロファイラ情報(GUI形式)の廃止
テキスト形式、CSV形式、XML形式、または、CPU性能解析レポートを使用してください。
- 詳細プロファイラの精密PA可視化機能(Excel形式)をCPU性能解析レポートに変更
"詳細プロファイラの精密PA可視化機能(Excel形式)"は、"CPU性能解析レポート"に変更にしています。
CPU性能解析レポートの留意事項は以下のとおりです。
詳細プロファイラによる計測、および、ファイル出力を 1回、5回、11回、17回のいずれかの回数、実施する必要があります。
Excel形式のレポートファイルは、英語見出しのみ用意しています。
CPU性能解析レポート(Excel形式)では、CMG単位で情報を出力します。1つのExcelファイルには最大12スレッドの情報を出力します。そのため、1プロセス内のスレッド数が12スレッドを下回る場合、同一CMG単位内の別のプロセスの情報が、あわせて表示される場合があります。
CPUの変更により、取得可能なイベント情報に差分が発生します。それにともない、計測対象となる情報も変更になります。
- 精密PAの以下の項目が出力されなくなります。
SIMD演算関連の情報
コンカチシフト命令率
パーミュテーション命令率
L2 throughput
MINOPS
Integer operation
ロードバランスと命令バランス
プログラム実行時間の比率
計測区間の通過回数 および 平均実行時間
- 詳細プロファイラ使用時のコアバインド
詳細プロファイラ使用時に、コアバインドの指定を必須となるように変更します。詳細プロファイラ使用時はコアバインドを指定してください。
- start_collection 関数および stop_collection 関数を廃止
ソースコード内に、start_collection 関数、および、stop_collection 関数を挿入していた場合、fapp_start 関数、および、fapp_stop 関数に変更してください。
- fippコマンド および fappコマンド -Hオプションと -I{cpupa|nocpupa} オプションを同時に指定した場合の挙動の変更
fippコマンド、および、fappコマンドで、
-H
オプションと、-Inocpupa
オプションを同時に指定した場合、指定した順番にかかわらず常に、-I{cpupa|nocpupa}
オプションが有効になります。また、-I{cpupa|nocpupa}
オプションを指定せず、-H
オプションを指定した場合、-Icpupa
オプションが有効になります。-H
オプションを有効にしたい場合、-Inocpupa
オプションを指定しないでください。