- ベストアンサー
cpuキャッシュメモリ→優劣の目の付け所は?
最近、キャッシュメモリなるものが気になります。 当サイトなどで概要については、なんとなく把握したつもりです。 わたしの理解は以下のようなものです。 基本的に、1次キャッシュと2次キャッシュがあって、 それらの容量が大きいほどよいプロセッサ。 よって、セレロンというcpuはこれらのキャッシュが 一般的にペンティアムやデュアルコアcpuに比べ低いため、 低価格で販売できている。 ↑このような理解でよろしいのでしょうか? また、キャッシュの容量が大きいほどスピードは、 下がってしまうというのもよく説明にありますよね。 そうすると、こんがらがってしまうのですが。
- みんなの回答 (5)
- 専門家の回答
質問者が選んだベストアンサー
L1(=Level1/一次)/L2またはTrace Cacheの役割は、速度隠蔽をすることにあります。i486SX/DXシリーズ頃から8KBのキャッシュを実装したのが始まりです。 このキャッシュは、CPUの周波数と同じクロックで同期するため、2GHzのプロセッサなら20億回キャッシュを参照できるほどの速さがあります。一般にL1キャッシュ(またはTrace Cache)がCPUのコアダイに内蔵されコンピュータ内で最も高速なアクセス速度となります。次いでL2が2番目となります。 このキャッシュには頻繁に使う命令が格納されており、最もアクセス頻度が高い直近の処理情報をL1に、次いで頻度が高い処理情報をL2にそして、それより頻度が低いものをL3または外部のメモリに蓄えます。 一般にキャッシュ容量を増やす場合は、L2またはL3キャッシュの容量が増加します。これが増えれば、速度がCPU内蔵キャッシュの最大で1/15程度に遅くなるメモリにいちいちアクセスしなくとも必要なデータにヒットする可能性が高くなります。そのため、容量が大きければより高速になるという考え方ができます。 しかし、それはあくまでそこに適当な命令が保存できており、キャッシュヒット率が一定以上確保できているという前提が必要です。キャッシュを極端に増やしすぎると今度はミスヒットした場合に、待ち時間が長くなります。また、一つの命令のサイズにも依存し、あまりにも小さいな命令情報を大量にキャッシュに確保していても速度隠蔽の効果はありません。 どういうことかというと、L1キャッシュにデータがなければL2を参照し、L2になければメモリまたはL3キャッシュを参照し、それより下ならメモリまたはハードディスクの仮想メモリを参照します。 そして、見つかった場所から上位のデータを置き換えていきます。 容量が大きければ、出入りの速さを早くしない限り置き換えに時間が掛かります。そのため、逆にミスヒット時の性能は低下することになります。 これは、コップに水を入れる作業と同じです。小さなコップに同じ10ml/秒で水を入れるのと大きなコップに同じ速さで入れるのでは、小さいほど早いです。大きなコップに水を短時間で入れるには20~30ml/秒で入れるしかありません。こういう改良がなければミス時の速度低下が大きくなるのです。 データの読み書きは、必ず全ての情報をチェックしますから、容量が大きければ、その速度が速くならない限りそれだけ時間が掛かります。 もう一つは、10MBのデータを10MBのキャッシュに保存すれば早くなります。 もしそれが4MBのキャッシュでは3回に分けて処理する必要がありますからね。 しかし、3MBのキャッシュで10KBの命令をループしていくとしたら速度はどうなるでしょうか?容量の少ないデータを連続で扱えば、速度はそれほど変化しません。1つの命令または連続する命令がキャッシュの容量を超える場合には、より大きなキャッシュほど速度が上がりますが、パソコンでそういうチャンスに巡り会うには、それだけプログラミングもそれに最適化されていなければ意味がないのです。 キャッシュは、容量が大きければ速度が速いわけではなく、プログラミングの手法がキャッシュ容量に最低化されているか、またはキャッシュに収まりきれないほどの連続データでなければ効果はないのです。逆に、ミスヒットとのトレードオフを考えてキャッシュ容量は決まっています。 Pentium4などのキャッシュは本気でキャッシュの容量を重視すれば2MBではなく4MBや6MBにもしたでしょう。そうしないのは、それが妥当な容量だったからです。尚、Celeronのキャッシュはそもそも普通より少ない容量にしてあります。
その他の回答 (4)
- Jimo
- ベストアンサー率37% (68/179)
メモリアクセスの多いプログラムほどキャッシュの効果が出ますが,キャッシュを大きく すると消費電力の増加も伴います。消費電力の増加はTDPの増加に直結します。また,CPU のアルゴリズムによってもその効果に多少影響してきますので,一概に言えないところが 難しいですね。ただし,Celeronなどのバリュー製品がCoreなどのハイパフォーマンス製品 よりも性能が劣るのは間違いありません。これは,性能の違いと言うよりも製造コストの 問題です。キャッシュを減らせば,それだけ歩留まりが上がりますし。
- a-saitoh
- ベストアンサー率30% (524/1722)
キャッシュの容量が大きいほど遅くなると言うのは、キャッシュの読み書きの所用時間です。遅いといってもメインメモリよりは大幅に早いですが。 キャッシュの容量を増やすとキャッシュのヒット率は上がりますがキャッシュのアクセスタイムは遅くなります。トータルで性能が上がるか下がるかは難しい問題です。 キャッシュが一次/二次に分かれているのは、このせいです。超高速キャッシュを少しと、普通の速度のキャッシュをたくさん(二次キャッシュ)。
- syunmaru
- ベストアンサー率37% (1635/4345)
>基本的に、1次キャッシュと2次キャッシュがあって、 それらの容量が大きいほど良いプロセッサ。 私の場合は、この容量の大きさが同じCPUのGHzでも、底力の違いだと思っています。 総合的には、早いと思います。 感じとして、サクサクと機敏に反応する感じがします。 セレロンは、何となく、もやっとした感じがします。(ワンテンポ遅れる感じ) ペンティアムとか、Cuo2Duoは、その点、サクサク感があります。 ですから、 >一般的にペンティアムやデュアルコアcpuに比べ低いため、 低価格で販売できている。 その通りだと思います。 個人的な意見です。 他の方は、違った見方をしていると思います。
お礼
こういう角度あるご回答をお待ちしておりました。 もうあくまで感覚的になんですが、 同クロック数のセレロンとペンティアムを使い比べた場合、 わたしもサクサク感の違いを感じていたんです。 この違いはどこから来るのかと調べていたら、 1・2次キャッシュの容量がことなるということに気づいたんですね。 ありがとうございます。
- Azuma1
- ベストアンサー率39% (78/200)
キャッシュというのはCPUが使用頻度の多い低速な装置から、いちいち読み出す手間を省くために命令もしくはデータをメモリに置くことを言います。 つまり、メモリに置いた内容を次に再利用すれば良いのですが、利用できないのなら、また低速な装置から読み出す事になります。従って、内容を沢山おけば再利用できる確率が高くなります。この再利用がヒットですね。 しかし、極端な例を挙げると、ハードディスクの内容をメモリに全部置くとしたら転送に時間がかかってしまいますし、これでヒットしなければ無駄になります。 ヒット率と容量のバランスが必要では無いでしょうか。
お礼
「極端な例を挙げると、ハードディスクの内容をメモリに全部置くとしたら転送に時間がかかってしまいますし、これでヒットしなければ無駄になります。 ヒット率と容量のバランスが必要では無いでしょうか。」 とてもわかりやすい例を挙げていただき、大変感謝いたします。 バランスなんですね。
お礼
丁寧なご解説、誠にありがとうございます。 この文章が理解できるよう何回も読み直して勉強します。 「逆に、ミスヒットとのトレードオフを考えてキャッシュ容量は決まっています」 この辺の感覚が難しいですね。 クロック数のように数値が大きいほど良いというわけではないということはわかりました。 妥当なラインというものがあるのですね。