MITの研究者が開発した新しい技術は、ハードウェアのデータ圧縮を再考することで、コンピューターやモバイルデバイスが使用するメモリをより多く解放し、より高速に動作させ、同時により多くのタスクを実行できるようにする。
データ圧縮は、冗長なデータを活用して記憶容量を解放し、演算速度を向上させ、その他の利点をもたらす。現在のコンピューターシステムでは、実際の計算に比べて主記憶へのアクセスは非常にコストがかかる。このため、メモリ内でデータ圧縮を用いると、プログラムが主記憶から取得する必要があるデータの頻度と量が減るため、性能向上に役立つ。
現代のコンピューターのメモリは、データを固定サイズのチャンク単位で管理・転送し、従来の圧縮技術はこの単位に対して動作しなければならない。しかし、ソフトウェアは自然にはデータを固定サイズのチャンクに格納しない。代わりに「オブジェクト」を使用する。オブジェクトとは、さまざまな種類のデータを含み、サイズが可変のデータ構造である。そのため、従来のハードウェア圧縮技術はオブジェクトをうまく扱えない。
今週開催されるACM国際会議「Architectural Support for Programming Languages and Operating Systems」で発表される論文において、MITの研究者らは、メモリ階層全体にわたってオブジェクトを圧縮する初のアプローチを提示している。これにより、性能と効率を向上させながらメモリ使用量を削減できる。
プログラマーは、JavaやPython、Goなど、データをオブジェクトとして格納・管理する現代のプログラミング言語であれば、コードを変更することなく、この技術の恩恵を受けられる可能性がある。消費者の側では、同じ速度でより多くのアプリを実行できる、または大幅に高速に動作するコンピューターを目にすることになるだろう。各アプリケーションが消費するメモリが減るため、アプリの動作が速くなり、デバイスは割り当てられたメモリ内でより多くのアプリケーションをサポートできるようになる。
修正版のJava仮想マシンを用いた実験では、この技術は従来のキャッシュベースの方式と比べて、2倍のデータを圧縮し、メモリ使用量を半分に削減した。
「動機は、キャッシュライン単位の圧縮ではなく、オブジェクト単位の圧縮が可能な新しいメモリ階層を考案しようとしたことでした。現代のほとんどのプログラミング言語がデータをそのように管理しているからです」と、筆頭著者でコンピューターサイエンス・人工知能研究所(CSAIL)の大学院生であるPo-An Tsai氏は述べている。
「すべてのコンピューターシステムがこの技術の恩恵を受けるでしょう」と、共著者でコンピューターサイエンスおよび電気工学の教授であり、CSAILの研究者でもあるDaniel Sanchez氏は付け加える。「メモリ帯域幅がボトルネックにならなくなるため、プログラムは高速化します。」
研究者らは、メモリアーキテクチャを再構築してオブジェクトを直接操作する、以前の研究を基にしている。従来のアーキテクチャでは、「キャッシュ」と呼ばれる、段階的に大きく低速になるメモリの階層内でデータをブロック単位で格納している。最近アクセスされたブロックはより小さく高速なキャッシュに移動し、古いブロックはより低速で大容量のキャッシュへ移され、最終的には主記憶に戻る。この構成は柔軟ではあるが、コストがかかる。メモリにアクセスするには、各キャッシュがその内容の中からアドレスを検索する必要があるためだ。
「現代のプログラミング言語におけるデータ管理の自然な単位はオブジェクトなのだから、オブジェクトを扱うメモリ階層を作ってはどうだろうか」とSanchez氏は述べている。
昨年10月に発表された論文で、研究者らは「Hotpads」と呼ばれるシステムを詳述した。このシステムは、オブジェクト全体を、階層的なレベル、すなわち「パッド」の中に密に詰めて格納する。これらのレベルは、効率的なオンチップの直接アドレス指定可能なメモリ上に完全に存在し、洗練された検索は一切不要である。
プログラムは、パッド階層全体にわたるすべてのオブジェクトの位置を直接参照する。新しく割り当てられたオブジェクトや最近参照されたオブジェクト、およびそれらが指し示すオブジェクトは、より高速なレベルに留まる。高速なレベルが満杯になると、「退避(エビクション)」処理が実行される。この処理では、最近参照されたオブジェクトは保持し、古いオブジェクトはより低速なレベルへ押し下げ、もはや有用でないオブジェクトは再利用して空き領域を確保する。その後、移動されたすべてのオブジェクトの新しい位置を指すよう、各オブジェクト内のポインターが更新される。このようにして、プログラムはキャッシュレベルを検索するよりもはるかに低コストでオブジェクトにアクセスできる。
今回の新たな研究では、研究者らは「Zippads」と呼ばれる技術を考案した。これはHotpadsアーキテクチャを活用してオブジェクトを圧縮するものだ。オブジェクトは最初は高速なレベルに置かれ、その時点では非圧縮の状態にある。しかし、より低速なレベルへ退避されるときには、すべて圧縮される。各レベルにまたがるすべてのオブジェクト内のポインターは、これらの圧縮済みオブジェクトを指すようになり、それにより高速なレベルへ容易に呼び戻せるうえ、従来の技術よりもコンパクトに格納できるようになる。
続いて圧縮アルゴリズムが、オブジェクト間の冗長性を効率的に活用する。この技術は、各固定サイズのブロック内の冗長性を見つけることに限られていた従来の技術よりも多くの圧縮機会を見出す。アルゴリズムはまず、いくつかの代表的なオブジェクトを「基準」オブジェクトとして選ぶ。次に、新しいオブジェクトについては、それらのオブジェクトと代表的な基準オブジェクトとの間で異なるデータのみを格納する。
カーネギーメロン大学の電気・コンピューター工学の助教授であるBrandon Lucia氏は、オブジェクト指向プログラミング言語の機能を活用してメモリをより効果的に圧縮している点でこの研究を評価している。「オブジェクト指向プログラミングのような抽象化は、プログラミングを簡単にするためにシステムに加えられるが、多くの場合、システムの性能や効率にコストをもたらす」と同氏は述べる。「この研究の興味深い点は、既存のオブジェクトという抽象化を、メモリ圧縮をより効果的にする手段として用い、その結果、新しいコンピューターアーキテクチャの機能によってシステムをより高速かつ効率的にしている点だ。」


