Virtual memory technology will allow different types of IA core to efficient share memory(Photo07,08)
Photo07: これは軟体物理演算の例。要するに剛体(力を加えても変形しない。加える力にもよるが、例えば人間の力で鉄骨を押す様なシミュレーションでは、鉄骨の変形は無視できるほど小さいので剛体として扱える)と異なり、力をうけると自身の形も変形するようなケース。こうしたケースでは計算が非常に面倒である。 |
Photo08: これは実際にLarrabeeとCPUを共同で動作させた場合の例。変形だけならLarrabeeのみ、移動だけならCPUのみメモリアクセスが発生するが、両方が同時に行われるとCPUとLarrabeeでメモリアクセスが激しく発生し、ここがボトルネックとなる。 |
そのLarrabeeに絡んで出てきた話がこちらである。例えばSoftbody(軟体物理計算)の場合、まず全体にかかる力を適当に細かい要素に割り振り、そこで自身の変形の影響を計算、次いで全体としての影響を計算する。飛んできたボタ餅をバットで殴ると、ボタ餅は変形しながら他所に飛んでいくわけだが、このうち変形する部分をLarrabeeの様なアクセラレータで、飛んでゆく部分をCPUで計算するという形で作業を割り振る形が自然である。
ところが問題は、ここでCPUとアクセラレータの間で煩雑にデータの移動が発生する事になる。これを減らすためには、CPUとアクセラレータが同じ物理メモリを共有する形にすればいいのだが、通常アクセラレータはPCI Expressの様なI/Oバスに装着されるから、こことCPU上で動くアプリケーションが同じ物理メモリを共有することは有り得ない(これはOS側が安全対策として、両者がアクセスする物理メモリを分離させていることに起因する)。で、この制限を緩め、CPUとアクセラレータが同じ物理メモリをアクセスできるような仮想記憶の仕組みを作ってやることで高速化させよう、という試みである。
ちなみにGeneseoで知られるPCI Expressのアクセラレータ拡張とは異なり(こちらの場合、例えばRoot Complexにキャッシュ領域を持たせる事も可能なので、ここでデータ交換を高速化することが出来る)、あくまでもソフトウェアのみのインプリメントになるという話だった。