ARMのWendy Elasser氏のポジション

TSVによる3D積層で、ロジックダイの上にメモリダイを載せるという構造が取れるようになり、処理とメモリを近づけることが可能となった。グラフ解析、機械学習、インメモリデータベースやHPC全般のようなデータインテンシブな処理には朗報である。

ロジックダイとメモリダイをTSVで接続するという構造で、Processing near Memoryの構成が可能になった。データインテンシブな処理には朗報

これにより、エネルギー消費の大きいデータの移動を減らし、CPUをオフロードすることができるが、解決しなければならないことがある。その第1はキャッシュコヒーレンシで、PIMのプロセッシングはメモリと直結されているので、その書き込みはプロセサのキャッシュには反映されない。このため、コヒーレンシの維持は、キャッシュをフラッシュするなど、ソフトウェアで行う必要がある。また、一般的な処理の場合は、異なるPIMスタックの間のデータアクセスが必要であるので、チップ間のデータパスが必要となる。

さらに、PIMは物理アドレスでメモリをアクセスするので、どのようにしてソフトウェアが使う仮想アドレスを物理アドレスに変換してやるかという問題がある。

処理をニアメモリで行う場合の問題点

PIMがうまく使えるケースでは、飛び飛びのアドレスをアクセスするGather/Scatterを行うPIMアクセラレータを付けて、よりキャッシュフレンドリなデータ構造を作ることにより、Page Rankで1.24~1.29倍、ランダムアクセスでは1.48~2.06倍、イメージの比較では2.99~4.15倍という大幅な性能向上が得られる。なお、値に幅があるのは、アクセス要求のキューイングの遅延を0から40nsまで変えた場合に対応している。

Gather/Scatter処理をPIMで実装した場合、PageRankで1.2~1.3倍の性能。イメージの差分では最大4倍を超える性能

AMDのMike Ignatowski氏のポジション

処理機能をメモリの中、下、あるいは近くに設ける方式では、DRAMメモリボードに処理機能を持ったチップを搭載する、あるいは、メモリチップのスタックの一番下に処理を行うロジックチップを付ける。現状のSSDのコントローラは相当な機能を持っており、この位置にコンピュートの機能を入れるというのは、当然、考えられる方向である。

PIMを作る場合は、メモリボードに処理を行うチップを搭載する、あるいはメモリダイのスタックの底に処理を行うチップを付けるなどの方法をとる

多階層のヘテロなメモリにヘテロなコンピュートを付けたシステムは、コンピュートとメモリのペアでメモリのアクセス速度が異なり、性能/電力がデータのローカリティで変わってくるので最適化が難しいが、HSAのようなハードウェアインタフェースの抽象化はこの点で有効である。

IBMのDoug Joseph氏のポジション

DRAMでExascaleまで行けるか? という問いについては、レーテンシ、バンド幅の点でDRAMは最良の解である。3D StackやLow Latency DRAMなど改良の方法も存在する。ただし、標準の大量生産のDRAMではないHPC用DRAMが必要になる。

飛躍的なメモリテクノロジとしては(Intel/Micronに限らず一般的な)3Dのクロスポイントメモリが一番有力。DRAMをFlashのようにマネージすべきかという問いについては、答えはNoで、そのような管理をするとDRAMの良いところであるアクセスレーテンシが長くなってしまう。また、DRAMは寿命問題はないのでFlashのような管理は不要である。しかし、信頼性、エラー訂正に関しては管理の必要性はある。

Exascaleの時代でもDRAMは考えられる最良の解。3D Stackなどでさらに改善ができる。寿命の点ではDRAMをFlashのように管理する必要は無いが、信頼性やエラー訂正では管理の必要性はある

PIMの与える影響として、Joseph氏はデータ移動を減らし、メモリバンド幅を増幅する効果があり有効である。しかし、イメージ処理など効果の高い処理があるが、多くの処理は必ずしも、うまくPIM処理ができない。

また、PIMはプロセサのMMUやキャッシュよりメモリ側に処理機能を置くので、MMUのアドレス変換が適用されないし、PIMで書き換えたメモリの情報はキャッシュには伝わらず、コヒーレンシが保たれないという大きな問題がある。したがって、PIMは汎用の処理というより、FPGAを使う専用的なアプライアンスとして使うという方が考えやすい。