cuQuantumを勉強してたらHMMが出てきましたので学びます。
cuStateVecでは、今後登場するGraceを見込んで、CPUとGPUでの状態ベクトルの共有機能が実装されています。
その際に、Grace Hopperのような最新システムではなく、CPUとGPUのメモリを管理する必要があるシステムで下記のHMMが出てきます。
こちらのページです。
ほぼ翻訳ですが多少変えてあります。
異種メモリ管理(Heterogeneous Memory Management、HMM)は、CUDAメモリ管理機能の一つで、PCIe接続されたNVIDIA GPUを搭載したシステムにおいて、CUDA Unified Memoryプログラミングモデルの簡便さと生産性を、システムに割り当てられたメモリにまで拡張します。システムに割り当てられたメモリとは、最終的にオペレーティングシステムによって割り当てられたメモリのことを指します。
以前、PCIeベースのマシンでは、システムに割り当てられたメモリはGPUから直接アクセスできませんでした。GPUは、cudaMallocやcudaMallocManagedのような特別なアロケータからのメモリのみアクセス可能でした。
HMMが有効になると、すべてのアプリケーションスレッド(GPUまたはCPU)が、アプリケーションのシステムに割り当てられたメモリ全てに直接アクセスできるようになります。Unified Memoryと同様に(これはHMMの一部、あるいは先駆けと考えることができます)、システムに割り当てられたメモリをプロセッサ間で手動でコピーする必要はありません。これは、メモリが自動的にCPUまたはGPU上に配置されるため、プロセッサの使用に基づいています。
CUDAドライバスタック内では、CPUとGPUのページフォールト(プログラムが必要とするデータやコードが、現在の物理メモリスペースに存在しない場合、それを補うために必要なページをディスクから読み込む https://the-simple.jp/what-is-a-page-fault-clearly-explain-the-basic-concepts-of-memory-management#google_vignette)が一般的に使用され、メモリがどこに配置されるべきかを判断します。この自動配置は既にUnified Memoryで行われていますが、HMMはこの振る舞いをシステムに割り当てられたメモリ、およびcudaMallocManagedメモリにも拡張します。
アプリケーションのメモリアドレス空間全体に直接読み書きするこの新しい能力は、CUDA上に構築されたすべてのプログラミングモデルにおいて、プログラマの生産性を大幅に向上させるでしょう。これには、CUDA C++、Fortran、Pythonの標準並列処理、ISO C++、ISO Fortran、OpenACC、OpenMPなど、多くのものが含まれます。
実際、これから示される例が示すように、HMMはGPUプログラミングを非常に簡素化し、GPUプログラミングをCPUプログラミングとほぼ同じほど手軽にします。
GPUプログラムを書く際には、機能のための明示的なメモリ管理が必要ありません。したがって、最初の「ファーストドラフト」プログラムは小さくてシンプルにできます。パフォーマンスチューニングのための明示的なメモリ管理は、開発の後期段階に延期することができます。
CPUとGPUのメモリを区別しないプログラミング言語に対しても、GPUプログラミングが現実的になります。
大規模なアプリケーションは、大規模なメモリ管理のリファクタリングや、ソースコードが常に利用可能でないサードパーティライブラリへの変更を必要とせずに、GPUで高速化することができます。
NVIDIA Grace Hopperのような新しいハードウェアプラットフォームは、すべてのCPUとGPUの間でハードウェアベースのメモリコヒーレンスを通じて、Unified Memoryプログラミングモデルをネイティブにサポートしています。そのようなシステムでは、HMMは必要なく、実際にはHMMは自動的に無効になります。これについての一つの見方は、HMMがNVIDIA Grace Hopper Superchipと同じプログラミングモデルをソフトウェアベースで提供する効果的な方法であると考えることです。
ということで、CPUとGPUメモリの扱いに関して、Grace Hopperはハードウェアでのネイティブサポートなので考える必要がないですが、それ以外のアーキテクチャではソフトウェアレベルでこうした仕様が満たされると考えられ、より量子コンピュータのシミュレーションが快適になります。特に状態ベクトルシミュレータではメモリの利用が重要なので性能向上が期待できます。
以上です。