Version 23.11

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

1. 新機能について

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

  • Grace Hopperスーパーチップを使うシステム上のコヒーレントメモリをサポートするために、HPCコンパイラは-gpu=unifiedオプションを実装しました。-gpu=unifiedオプションは、HMMドライバーを使用するx86_64システム上でも動作します。-gpu=unifiedオプションは、C++とFortran両方のStandard ParallelismやOpenACCモード、またはCUDA Fortranに対してサポートされます。
  • nvfortranのバージョン23.11は、Fortran 2018 Cディスクリプタのサポートを導入します。標準Cプロトタイプを持つライブラリ関数と共に、この機能はC関数内部からFortranデータオブジェクトを定義または操作するための手段を提供します。
  • HPC-Xは、x86_64とaarch64アーキテクチャに対するデフォルトのMPIライブラリになりました。OpenMPIはppc64leアーキテクチャに対してデフォルトになりました。
    • 以前は、OpenMPI 3は全てのプラットフォーム上でデフォルトでした。現在は、nvhpc-openmpi3 environment moduleを読み込むことによって利用可能です。
    • comm_libs/mpi/bin内のMPIラッパーは、CUDAドライバーを自動的に検出し、comm_libs/X.Yから適合するMPIライブラリを選択します。完全なMPIディレクトリ階層(例えば、bin、include、lib)を要求するアプリケーションは、インストールされたCUDAドライバーバージョンに依存したnvhpc-hpcx-cuda11nvhpc-hpcx-cuda12 environment moduleを読み込むことによって、MPIラッパーをバイパスする必要があります。
  • バージョン23.11から、NVTXを使ってC++ standard language parallelismを使って書かれたコードをプロファイリングすることが可能で、NVTX tracingが有効な場合、nsysタイムライン上で可視化できます。この機能はコンパイラオプション-DNVHPC_STDPAR_DISABLE_NVTX_RANGESで無効にできます。
  • HPC SDKはCUDA 11.8と12.3のライブラリとツールに対するサポートします。CUDA Compatibiilityの利用やNVHPC_CUDA_HOMEを直接使うことによって、他のCUDA 11と12のサポートを利用できます。
  • nvc++によって、ホストCPU上でのC++20コルーチンの実行がサポートされます。この機能は-fcoroutinesオプションで有効にできます。

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 23.11は以下のtoolchainを含みます。

  • CUDA 11.8
  • CUDA 12.3

4. 制限事項

  • 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で利用できない可能性があります。
  • 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
  • 提供されたモジュールファイルを利用しない場合は、HPC-Xを利用する前に、利用者は hpcx-init.shスクリプトを実行するよう注意が必要です。$ ./[install-path]/Linux_x86_64/dev/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=""
  • sourced allocationまたはallocatable assignmentで利用される、サイズが0の派生タイプallocatable componentを持つFortran派生タイプオブジェクトは、セグメント違反が発生する可能性があります。
  • C++の並列アルゴリズムを高速化するために-stdparを利用する場合、アルゴリズムの呼び出しは、仮想関数呼び出しや、関数ポインタによる関数呼び出し、C++例外を含むことができません。ランダムアクセスイテレータを利用する必要があります(通常のポインタをイテレータとするのが最善です)。Unified memoryが無効な場合、アルゴリズムの呼び出しは、ヒープを指すデリファレンスポインタのみを利用できます。詳細はc++ parallel algorithms documentationを参照ください。

5. 廃止事項

  • 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コンパイラの最後のバージョンです。
  • OpenMPI 3ライブラリは、今後のリリースでHPC SDKから削除される予定です。
  • -Minfo=intensityオプションはサポートされなくなりました。
  • CUDA_HOME環境変数はHPCコンパイラに無視されます。NVHPC_CUDA_HOMEを利用してください。
  • HPCコンパイラ23.3から-Mipaオプションが無効になりました。
  • HPCコンパイラの-ta=tesla, -Mcuda, -Mcudalibオプションは非推奨となりました。
  • アップストリームのend-of-life (EOL)に合わせて、RHEL 7ベースのオペレーティングシステムのサポートは、HPC SDK 23.7では削除されます。
  • 今後のリリースで、HPC SDKはCUDA12.xシリーズの最新のバージョンとCUDA 11.8のみバンドルする予定です。11.0より古いCUDAバージョンをサポートするHPCコンパイラ内のコードパスは検査や保守管理されなくなります。
  • アップストリームのend-of-life (EOL)に合わせて、HPC SDK 23.5ではUbuntu 18.04のサポートは削除されました。
  • CUDA FortranのcudaDeviceSynchronize()は非推奨となり、デバイスコードから削除されました。ホストコード内ではまだサポートされます。
  • NVIDIA HPC SDKの21.11から、HPC-XパッケージはPOWERアーキテクチャ向けのパッケージには含まれません。
  • NVIDIA HPC SDK 21.5から、NVC++とNVFORTRANの-cudaオプションは、NVIDIA GPU数学ライブラリを自動的にリンクしません。-cudalibオプションを参照ください。
  • NVIDIA HPC SDK 21.3から、NVIDIA GPUのKeplerアーキテクチャのHPCコンパイラサポートが廃止されました。

Notices

原文をご確認ください。

前の記事

Version 23.9

次の記事

Version 24.1