ユニファイドメモリアーキテクチャ

出典: フリー百科事典『ウィキペディア(Wikipedia)』

これはこのページの過去の版です。Japanbird (会話 | 投稿記録) による 2016年4月2日 (土) 12:35個人設定で未設定ならUTC)時点の版であり、現在の版とは大きく異なる場合があります。

ユニファイドメモリアーキテクチャ (Unified Memory Architecture) は、メインメモリCPUだけでなく、他のデバイスにも共有して使用するメモリアーキテクチャの一つである。

概要

この方式は、古くはNECPC-8001で実装された。メインメモリの一部をVRAMの一部として扱い、CRTC(CRTコントローラー)にDMA転送することで、画面を表示していた。DMAが動作中CPUはメモリバスの使用権を失い、画面表示中はCPU本来の能力を発することができなかった。そこで計算などの用途においてDMAを停止し、CPUがメインメモリをフルにアクセスできるようにすることが一般的だった。この手法は後に、PC-8800シリーズでも使用された。

現代のこの方式の応用もまた、VRAMをメインメモリにマッピングする場合に用いられていることが多い。このアーキテクチャがPCに適用された時は、CPU本来の性能を発揮できないことから嫌われた。そこでCPU動作速度の低下を避けるため、メモリバスの周波数をCPU本来のバス周波数より高く設定し、CPUからのメモリアクセスをさまたげないよう工夫されるようになった。CPUがメモリにアクセスする際にGPUは目的の演算を遅延することから、表示にジッターが現れることが多かった。後にこれはメモリアクセス方式を工夫したり、あるいは最終的に表示に使うメモリのみを、グラフィックボードに搭載することで解決した。しかし、さらに時代が下って再び採用され始める。PCに限らずワークステーションでも一般的であった。3Dアクセラレーターにおいて、VRAMだけでなくテクスチャメモリ、イメージキャプチャ結果を保持するメモリとしても使われた。

メモリがモジュールとして増設が簡単になり、単価も下がるにしたがい、32bitアドレスのメモリ空間である4GBなども普通に実装できるようになったが、ハードウェアの予約されているメモリ番地はメモリがリニアに使えない。そのうえ、UMA方式に割く場合はさらにビデオ回路用として実メモリを用いるので、32bitモードで動かす場合にはその部分がさらに削られる。

複数のCPUが共有するメインメモリにアクセスする対称型マルチプロセッサにおいて、そのメモリアクセスのことを「Uniform Memory Access」と呼ぶ。この言葉はNUMA(Non-Uniform Memory Access)ではないことを強調して指す言葉であり、あまり一般的ではない[要出典]

従来PCのアーキテクチャ(オンボードグラフィックスなど)やXbox 360等でUMAと呼ばれているアーキテクチャは、あくまでもメモリの部品としての共用であり、メモリマップ(メモリ空間)までは統合されていない。これはUMAの中でもNUMAとして分類される[1]

hUMA

ヘテロジニアス・ユニフォームメモリアクセス (heterogeneous Uniform Memory Access) とは、UMAの中でもさらに統合が進み、CPUGPUがメモリマップまで統合されているUMAのことを指す。AMDがHSA (Heterogeneous System Architecture) の鍵となる技術の一つとして発表した[1]

CPUとGPUで同じメモリマップを共有しているということは、必然的にGPU側もページフォールトに対応し、MMUで仮想メモリ管理が可能となっていることになる。また、hUMAではCPUとGPUのメモリ一貫性(メモリコヒーレンス/メモリコヒーレンシ)がハードウェアレベルで確保されており、CPUとGPUが扱うデータの一貫性や同期をソフトウェア側で気にする必要がなくなる[2]。これはGPUを汎用目的に利用するGPGPUにおいて大きなメリットとなる。

hUMAの実装例としてPlayStation 4が挙げられる[疑問点]。そのため、PlayStation 4ではPC等と違ってGPUに処理を渡すためのデータを、その都度VRAMに転送する必要が無い。GPUにはデータのアドレスを渡すだけで済む[3]

つまり、hUMAの場合は同じアドレスのメモリは、CPUやGPUにかかわらず同じメモリを指すということである。一見当たり前の話に聞こえるが、hUMAではない一般的なUMAではメモリという部品を容量で用途別に分けあっているだけなので、CPUとGPUでそれぞれ個別にアドレスが振られているうえにメモリ自身もあくまで別物扱いである。それゆえに例え同じアドレスであっても、CPUとGPUでは全く別のメモリを指している。CPUとGPU間(これは、PCにおいては同時にマザーボードビデオカード間をも指す)に接続されたバスを通して転送するしか、両者間でメモリ内容のやりとりは不可能である。しかし、先述の通りhUMAの場合は単純に同じアドレスのメモリに書いて読むやりとりだけで済み、転送の手間が省ける。

脚注

関連項目

外部リンク