nob's Weblog

月曜日 6 20, 2005

Memory doesn't catch up

記憶が追いついてこない

コンピュータの高速化の歴史の中でも、おなじみの問題の一つがメモリ・ボトルネックというもの。

非常に大ざっぱに言うと、処理速度にメモリのアクセスが追いつかないという問題です。今回のプロセッサの例でいえば、命令を処理する部分が高速化されても、メモリへのアクセスによって発生する遅延が短くならない。

もちろん、メモリだって進歩はしているんですが、こちらの方はI/Oのプロトコルの問題や、データ幅の問題などもあって高速化は、せいぜい6年で2倍程度になっています。そうすると、2年で2倍ペースで高速化されている処理との差がどんどん開いてしまう訳です。

このギャップをいかに隠してあげるか、というのが腕の見せ所になる訳です。

一般的には、どうしているのか?

メイン・メモリにアクセスすると遅い訳ですから、一つの手として、なるべくメイン・メモリへアクセスをしない、ということが考えられます。これを実現する ための仕掛けの一つがキャッシュ・メモリの採用です。つまり、速度の遅いメイン・メモリの内容を高速のキャッシュ・メモリにコピーしておくことによって見 掛け上のアクセスを高速化してあげるのです。

この方法が進んでくると、より高速、大量のキャッシュを置くようになり、その結果キャッシュ・メモリも2段3段と階層化され、容量自体も数kバイト程度 だったものが数Mバイトを優に越えるようになってきました。でも、このまま大きくして行っても、どうやら見返りはどんどん目減りをして行くようです。

しかも、今回考えているような、比較的小さくて、しかも寿命の短いデータ、たとえば認証が済めば捨てられるあるいは転送・処理されたらそれでおしまいのヘッダ情報などを大きなキャッシュにため込んでもあまり意味はないのです。

そこで、出て来たのが、ある処理の単位でメモリ待ちになったときに、次の処理に資源を明け渡してしまうという考えです。そうすることによって、パイプライン、レジスタなどの資源を有効活用しながらメモリ待ちの時間を見えなくすることが可能になるのです。

でも、そんな風にして良いアプリケーションは一杯あるのでしょうか?それはまた次回。

投稿されたコメント:

コメント
  • HTML文法 不許可

Calendar

Feeds

Search

Links

Navigation

Referrers