Version 24.9

Release Notes原文
当ページは原文の意訳となっております。

1. 新機能について

NVIDIA HPC SDK 24.9へようこそ。NVIDIA HPC SDKは、CPU、GPU、インターコネクトといったHPCプラットフォーム全体のプログラム開発を可能にするコンパイラとライブラリの包括的パッケージです。HPC SDK 24.9のリリースは、コンポーネントのアップデートおよび重要な機能性やパフォーマンスの向上を含みます。

  • HPCコンパイラは、stdparプログラミングモデルを使用する際に、マルチコアCPUまたはGPUのいずれかで並列実行が可能な単一のバイナリを生成できるようになりました。この機能は、-stdpar=gpu,multicoreオプションを使用することで有効にできます。
  • 強化された相互運用性により、OpenACCおよびCUDA Fortranをstdparプログラミングモデルと共に使用することができます。
  • NVC++では、GPUコード内で128ビットの整数型(__int128およびunsigned __int128)に対応するようになりました。
  • std::views::iotaで64ビット整数型がサポートされるようになりました。
  • HPCコンパイラは、CUPTIプロファイリングライブラリとリンクするための-cudalib=cuptiオプションをサポートするようになりました。
  • HPCコンパイラに以下の3つの新しいArmターゲットプロセッサが追加され、それらは以下のオプションで指定できます:
    • -tp grace
    • -tp graviton3
    • -tp graviton4
  • 新しいマクロが追加され、OpenACCOpenMP、およびstdparにおいて、HPCコンパイラがユーザーコードで使用されるプログラミングモデルを区別するのに役立ちます。
  • HPCコンパイラがコンパイル中に生成する中間ファイルのファイル名拡張子が更新され、NVIDIA NVCCコンパイラの規約に従うようになりました:
    • .binファイルは現在.cubinで終わります。
    • .fatファイルは現在.fatbinで終わります。
  • HPC SDKは、x86_64およびArmプラットフォーム上のSLES 15 SP6をサポートするようになりました。
  • HPC SDKバージョン24.9は、CUDA 12.6および11.8を同梱しています。

2. リリースに含まれる各コンポーネントのバージョン

各コンポーネントについて、バージョン番号が記載されております。
各バージョンについて詳細を確認したい場合は原文の表をご確認ください。

3. サポートされるプラットフォーム

3.1. プラットフォーム要件

Linuxディストリビューション、gcc/glibcの最低バージョン、CUDAドライバの最低バージョンが記載されております。
詳細は原文の表をご確認ください。

3.2. サポートされるCUDA Toolkitのバージョン

NVIDIA HPC SDKは、NVIDIA GPUを用いたプログラムをビルドする場合にCUDA Toolchainの機能を使用します。すべてのNVIDIA HPC SDKは、必要なCUDAコンポーネントをインストールディレクトリにインストールします。インストール先のパスは [install-prefix]/[arch]/[nvhpc-version]/cuda です。
GPU用にコンパイルされたプログラムを実行するためには、GPU搭載システムにNVIDIA CUDA GPUデバイスドライバのインストールが必要です。
NVIDIA HPC SDKにはCUDAドライバは含まれませんので、適切なCUDAドライバをNVIDIAからダウンロードする必要があります。
システムにインストールされたCUDAドライバのバージョンを確認するためにnvaccelinfoコマンドが利用できます。
NVIDIA HPC SDK 24.9は以下のtoolchainを含みます。

  • CUDA 11.8
  • CUDA 12.6

4. 制限事項

以下は、予期しない動作や最適でない性能が見られた際に、HPC SDKとそのコンポーネントをより効果的に使用するための推奨事項です。

  • HPC コンパイラ
    • Ubuntu 20.04およびgcc 13を使用してC++の並列アルゴリズムを加速するために-⁠stdparオプションを使用する際、次のようなエラーが発生することがあります:「error: identifier "_Float128" is undefined」。この制限は、-D_NVHPC_FLOATN_ARE_BUILTINを定義することで回避できます。
    • ポインタがtarget属性を持つ配列仮引数に割り当てられると、nvfortranは実引数ではなく、配列引数のコピーにポインタを関連付ける場合があります。
    • Fortranサブプログラムへの内部手続きの実引数としての受け渡しは、仮引数がインターフェイスブロックや手続き仮引数として宣言された場合、nvfortranによってサポートされます。nvfortranは、外部で宣言された仮引数へ、内部手続きを実引数として受け渡すことをサポートしません。
    • nvfortranは、Fortran2003標準の最大7次元の配列(Fortran2008は標準の最大次元を15に引き上げた)のみをサポートします。この制限は、CヘッダーファイルISO_Fortran_binding.h内の標準的なCFI_MAX_RANKマクロの中で定義されます。
    • Fortran 2018 Standard内の「15.5.2.4 Ordinary dummy variables」の章、constraint C1540とNote 5において、実引数または対応する仮引数がASYNCHRONOUS/VOLATILE属性を持ち、かつ仮引数がVALUE属性を持たないという条件では、Fortranコンパイラにcopy-in/copy-outの引数受け渡しの回避を認めます。この性質は、nvfortran内のBIND(C)インターフェイス(すなわち、Cを呼び出すFortran)で完全にサポートされます。asynchronous/volatile属性のcopy-in/copy-out回避は、他の場合ではnvfortranで利用できない可能性があります。
    • sourced allocationまたはallocatable assignmentで利用される、サイズが0の派生タイプallocatable componentを持つFortran派生タイプオブジェクトは、セグメント違反が発生する可能性があります。
    • C++の並列アルゴリズムを高速化するために-stdparを利用する場合、アルゴリズムの呼び出しは、仮想関数呼び出しや、関数ポインタによる関数呼び出し、C++例外を含むことができません。ランダムアクセスイテレータを利用する必要があります(通常のポインタをイテレータとするのが最善です)。Unified memoryが無効な場合、アルゴリズムの呼び出しは、ヒープを指すデリファレンスポインタのみを利用できます。詳細はc++ parallel algorithms documentationを参照ください。
  • MPI、HPC-X と UCX
    • 少数のアプリケーションで、HPC-X UCC実装のMPI_AllreduceおよびMPI_Reduceでデッドロックやセグメンテーションフォールトが発生することが確認されています。環境変数OMPI_MCA_coll_ucc_enable=0を設定することにより、HPC-X UCCコンポーネントを無効にできます。
    • HPC-Xを使用する場合、非常に短時間で終了するMPIジョブの起動オーバーヘッドが大きくなる可能性があります。ワークアラウンドとして、環境変数UCX_VFS_ENABLE=nを設定することができます。
    • 一部のシステムでは、UCXが/proc/self/map情報の解析中に失敗することがあり、次のトレースでクラッシュします: "sys.c:194 UCX FATAL failed to allocate maps buffer(size=32768)" 。この問題を回避するには、UCX_MEM_EVENTS=n環境変数を設定してください。
    • comm_libs/mpi/binのMPIラッパーは、CUDAドライバーを自動的に検出し、comm_libs/X.Yから一致するMPI ライブラリを選択します。完全なMPI ディレクトリ階層 (例えば、bin、include、lib) が必要なアプリケーション、または srun 経由で起動されるアプリケーションは、インストールされているCUDAドライバーのバージョンに応じて、nvhpc-hpcx-cuda11あるいはnvhpc-hpcx-cuda12のenvironmentモジュールをロードして、MPI ラッパーをバイパスする必要があります。
    • HPC-Xを利用するためには、提供された環境モジュールファイルをご利用ください。または、hpcx-init.shスクリプトの実行にご注意ください:
      $ . ${NVHPCSDK_HOME}/comm_libs/X.Y/hpcx/latest/hpcx-init.sh

      その後、hpcx_loadを実行してください。

      $ hpcx_load

      これらの作業により、HPC-Xを利用するために必要な重要な環境変数が設定されます。また、もしMPIジョブを実行中にHPC-Xの以下の警告メッセージが表示された場合には、性能が低下するかもしれませんが、実行は継続され警告のみです。WARNING: Open MPI tried to bind a process but failed.これは既知の問題で、以下のように対処することができます。

      $ export OMPI_MCA_hwloc_base_binding_policy=""
    • HPC-Xは、2.17.1バージョン時点で、ストリームで順序付けられCUDAでアロケートされたメモリの性能最適なサポートしません。実用の観点から、それは次のことを意味します:通信データがcudaMallocAsync関数や類似の関数と共にアロケートされる時、MPIコールMPI_SendMPI_RecvのようなIPCが、スループットを非常に劣化させることがあります。この制限は、将来リリースされるHPC-Xで削除される予定です。
  • 数学ライブラリ
    • NVPL FFTはオリジナルのOpenMPスレッドアフィニティマスクを尊重します。OpenMPランタイムと共にビルドされたアプリケーションに対して、(OMP_PROC_BINDOMP_PLACESのどちらか一方を通じた)スレッドアフィニティの制御は、マルチスレッド性能に悪影響を及ぼす可能性があります。性能改善のため、利用者はその2つのOpenMP環境変数の設定を解除するか、OMP_PROC_BINDをfalseに設定することが推奨されます。さらなるNVPLに関連した既知の問題は、NVPL documentation内に記述されています。
    • MKLバージョン2023.1.0を使用するHaswellやBroadwell上で、OpenMPスレッド数が4以上の特定のワークロードの実行時に、一部のアプリケーションで不具合が発生する可能性があります。その問題はMKLバージョン2023.2.0で解決されました。
    • cuSolverMpは、HPC-Xディレクトリ内のUCCとUCXライブラリの2つの依存関係を持ちます。cuSolverMpを利用するプログラムを実行する場合、HPC-Xライブラリを含むnvhpc-hpcx-cuda 11 environment moduleをご利用ください。または、環境変数LD_LIBRARY_PATHを以下のように設定してください。
      $ LD_LIBRARY_PATH=${NVHPCSDK_HOME}/comm_libs/hpcx/latest/ucc/lib:${NVHPCSDK_HOME}/comm_libs/11.8/hpcx/latest/ucx/lib:$LD_LIBRARY_PATH

5. 廃止事項

  • OpenMPI 3ライブラリは、バージョン24.11のリリースでHPC SDKから削除される予定です。OpenMPI 4ライブラリは、今後のリリースでHPC SDKから削除される予定です。
  • バージョン24.11のリリース以降、HPCコンパイラはCUDAバージョン11.0および11.1がサポートされなくなる予定です。
  • 以下のフラグは非推奨となり、使用しないでください:-Mllvm-gpu=stacklimit-gpu=pinned-gpu=[no]managed-gpu=[no]unified詳細はこちらをご参照ください)。
  • 以下の非推奨フラグは、バージョン24.11のHPCコンパイラから削除されます:
    • -Mcuda-cudaに置き換え)
    • -Mcudalib-cudalibに置き換え)
    • -ta-acc=gpuに置き換え)
  • 今後のリリースで、HPC SDKのtarパッケージファイル名には、バージョン番号に加えてリリース番号も含まれる予定です。tarファイルパッケージからHPC SDKをダウンロードおよびインストールする自動化プロセスは、更新が必要かもしれません。
  • バージョン24.7以降、HPCコンパイラは、最適化レベル-O3以下では逆数書き換えを行いません。逆数書き換えは、-Mfprelaxedまたは-Ofastオプションを使用することで有効になります。
  • Arm向けのHPC SDK バージョン24.7では、HPC-Xパッケージに対するUCCコレクティブ(集団通信)がデフォルトで無効になっています。環境変数OMPI_MCA_coll_ucc_enable=1を設定することで、UCC集団通信を有効にできます。ArmでHPC-XのUCC集団通信を使用する場合は、計算精度を確認することを推奨します。
  • OMP_NUM_TEAMS環境変数の効果はバージョン24.7で変更され、OpenMPの仕様に従ってチーム数の上限値を指定するようになりました。以前のリリースではチーム数は常にOMP_NUM_TEAMSに設定されていましたが、今後はOpenMPランタイムによってチーム数が決定され、OMP_NUM_TEAMSを超えません。特定のチーム数を強制的に設定する場合は、NV_OMP_CUDA_GRID環境変数が使用されます。
  • HPC SDKにおいて、Power CPUアーキテクチャのサポートが終了しました。
  • HPC SDKバージョン24.9以降、Amazon Linux 2とRHEL 7ベースのオペレーティングシステムへのサポートしなくなりました。これは、アップストリームのエンドオブライフ(EOL)に対応しています。
  • ANSIモード(例えば、-std=c++17-std=c99)の場合、GNU拡張マクロlinuxunixは定義されなくなりました。コードがANSIモードでコンパイルされ、かつこれらのマクロに依存する場合は、ANSI準拠マクロ__linux____unix__を使う必要があります。
  • Arm (aarch64)のみ:
    nvfortranバージョン23.9では、Fortran複素関数のcalling/return手順を、GNUのgfortranの規約と合致するように変更します。23.9以前では、関数は「隠れた」ポインタを最初のパラメータとして使い、stackを通して複素数値を返しました。現在は、浮動小数点レジスターを通して、gfortranの規約に従って複素数値が返されます。NVIDIA HPC SDK のArmの全ライブラリは“gfortran’’の方法に従うようにアップデートされました。Armのパフォーマンスライブラリを利用する場合、“arm’’バージョンの代わりに“gcc’’バージョンを使う必要があります。Armシステムでnvfortranを使う場合、複素数型を利用するすべてのFortranコードは、ライブラリを含め、再コンパイルする必要があります。
  • CUDA Fortran textureのサポートはCUDA 11.0と11.8で非推奨となり、CUDA 12で削除されました。23.9のリリースは、CUDA Fortran textureのサポートを含むHPCコンパイラの最後のバージョンです。
  • -Minfo=intensityオプションはサポートされなくなりました。
  • CUDA_HOME環境変数はHPCコンパイラに無視されます。NVHPC_CUDA_HOMEを利用してください。
  • HPCコンパイラ23.3から-Mipaオプションが無効になりました。
  • NVIDIA HPC SDKの23.11 から、CUDA 11.8 と CUDA 12.x シリーズの最新バージョンのみがバンドルされています。11.0 より古い CUDA バージョンをサポートする HPC コンパイラ内のコードパスは検査や保守管理されなくなりました。
  • CUDA FortranのcudaDeviceSynchronize()は非推奨となり、デバイスコードから削除されました。ホストコード内ではサポートされます。
  • NVIDIA HPC SDK 21.5から、NVC++とNVFORTRANの-cudaオプションは、NVIDIA GPU数学ライブラリを自動的にリンクしません。-cudalibオプションを参照ください。
  • NVIDIA HPC SDK 21.3から、NVIDIA GPUのKeplerアーキテクチャのHPCコンパイラサポートが廃止されました。

Notices

原文をご確認ください。

前の記事

Version 24.7