質問: 普段はバックエンドのコードを書いているものです。 インフラ分野のスキルもあると幅が広がるなと思い、"ゴミPCを再利用して高性能なマシンを作る" というテーマで目標設定しました。 「分散共有メモリ(distributed shared memory)」というものが私のやりたいことに該当するというところまでは調べられたのですが、具体的にどのような技術を勉強すれば目標が達成できるのかが分からずつまづいてしまいました。 質問したいのは以下の点です。 1. ネットワークでメモリを共有する、という技術は実用化されているのでしょうか?(もしや研究段階?) 2. 分散共有メモリを構成する技術やプロトコルの名前を知りたい(上手くググれないため) よろしくおねがいします。
回答: (私はこの分野の専門家ではなく、Internetでアクセスできた情報に基づく回答となります) > > ネットワークでメモリを共有する、という技術は実用化されているのでしょうか?(もしや研究段階?) > > > 2021年現在、研究用途ではない実用的な「分散共有メモリ(distributed shared memory; DSM)」システムが存在するかは疑問です。英語版Wikipediaページ にはいくつかシステム例が挙がっていますが、プロジェクト終了しているものもあったり、実用レベルのプロダクトか否かまでは分かりません。 それ以外で見つけられたDSMシステム: * Omni/SCASH: Cluster-enabled Omni OpenMP on a software distributed shared memory system SCASH > > 分散共有メモリを構成する技術やプロトコルの名前を知りたい(上手くググれないため) > > > 分散共有メモリ(DSM)の第一目的は「アプリケーションプログラムに対して、分散処理を意識させることなく単一ノードで動作しているかのような、単一のメモリ空間を提供する」ことです。 DSMシステムはこの目的を達成すべく、専用ハードウェアやミドル層ソフトウェア側でさまざまな仕掛けを用意します。ノード間の通信プロトコルは具体的なDSMシステムごとに設計・選択されるものとなります。 参考リンク > > アプリ自体は共有メモリの形で生産的に記述しつつも, 実際には分散メモリシステム上で高速実行できるシステムを作る, という考え方が1980年代ぐらいからあって, こういう形態のシステムを「 分散共有メモリ (Distributed Shared Memory, DSM) 」と呼びます. スパコン上だと実際のところメモリは共有されていないので, その上で「あたかも共有されているかのように」見せるために システムが自動的に通信を行うわけです. DSMとは,共有メモリのインターフェイスを分散メモリシステムで 仮想化 (virtualization) する技法であると捉えられ, ハードウェアでもソフトウェアでも実装することができます. 当初は性能と生産性を両立できるシステム形態として注目されたのですが, 数十コア程度ならまだしも,それ以上のシステムできちんと性能を出す (=スケールさせる)ことが難しいと分かってきたため, 次第に研究者が諦めていったという世知辛い事情があります. > > >