• ベストアンサー

データキャッシュ、命令キャッシュ、キャッシュフラッシュ

データキャッシュ 命令キャッシュ キャッシュフラッシュ  この三つの差がよくわかりません。キャッシュはCPUの処理速度を上げるためのものであることは理解しています。私が知っていたのはデータキャッシュのみで、同じデータのやり取りを行う時に使用するものですよね?  では、命令キャッシュとは、同じ命令を行うときに使用する?いつ、どこで、その命令をキャッシュに入れておくのでしょうか?  キャッシュフラッシュはなんとなくわかります。キャッシュに格納してある情報を要求先へ送ることですか?  会社でこの質問に答えれなくて、宿題にされてしまいました・・・・。答えでも、答えでなくてもいいです。情報をいただけたらと思い質問させていただきました。 よろしくお願い致します。

質問者が選んだベストアンサー

  • ベストアンサー
  • Tacosan
  • ベストアンサー率23% (3656/15482)
回答No.2

プロセッサとメインメモリの処理速度は全然違うので, データが必要なたびにメインメモリにアクセスするのでは実行速度が大幅に低下してしまいます. そのため「メインメモリほど容量はないけどメインメモリより高速なメモリ」を間に入れて実行速度の低下を防ごうというのがキャッシュの主目的です. ここでは「データ」と書きましたが, プログラムの命令そのものもプロセッサから見ればデータの一種ですので, 当然命令に対しても同様に考えることができます. つまり, プロセッサから見ると, メモリアクセスは全てキャッシュに対して行われます. また, 今のプロセッサは当然のようにパイプライン化されていますので, 命令の読み込み・実行・データのアクセスが全て同時に行われます. そのため, 命令を格納するメモリとデータを格納するメモリが同じバスに接続されていると, やはり実行速度は低下してしまうため, この 2つは異なるバスに接続するハーバードアーキテクチャが使われています. ということで, 「命令に対するキャッシュ」と「データに対するキャッシュ」を分けておくとうのは合理的である, ということになります. そして, 処理が進んでいくと「キャッシュが全ていっぱいになってしまい, 新たなデータをキャッシュに読み込めなくなる」ことになります. このとき, キャッシュ上のデータを捨てる必要があるのですが, これを「キャッシュのフラッシュ」と呼びます. 命令キャッシュであったり, データキャッシュでもデータを読み込んでいるだけならいいのですが, データを書き込んでいる場合にはキャッシュ上のデータをメインメモリに書き戻す必要がある場合があります. これはデータをメモリに書き込むときに「メインメモリにも同時に書き込む (= write-through)」なら必要ないのですが, 「メインメモリにはあとで書き込む (= write-back)」場合には必須となります. したがって write-back の方がフラッシュの処理が面倒になりますが性能は一般に write-through より高くなります. なお, #1 でも書かれているようにキャッシュは「アクセスの局所性」に基づいていますので, 分岐命令に対してうまく処理しなければならないという問題点があります (分岐先の命令をキャッシュに入れておかないと実行できないので). 普通は分岐予測というものを使うのですが, SPARC V9 では「絶対分岐しない分岐命令」というおもしろいものを用意してあります. これは命令単独では全く意味を持たないのですが, その副作用として「分岐先アドレスの命令をキャッシュに先読みする*かもしれない*」という機能があったりします.

その他の回答 (1)

  • elmclose
  • ベストアンサー率31% (353/1104)
回答No.1

キャッシュが有効である理由は、いわゆる参照の局所性(Locality of reference)があるからです。 そして、その参照の局所性は、データだけではなく、命令についても言えます。例えば、いかなる言語であっても普通にプログラムを書いた場合、一般的にループはよく現われます。そのプログラムをコンパイルした結果、通常は(つまりリバースエンジニアリングしにくくするためにわざとあっちこっちに飛ぶようなコードがはき出されていたりしない限りは)、そのループ部分の命令は局所的に存在します。よって、最近実行した命令をキャッシュに残しておけば、所定の確率で再度その命令をフェッチすることになります。 また、命令を先読みする場合があります。この場合も、先読みした命令をキャッシュに入れておくことにより、CPUから見た命令転送コストは、トータルとして少なくて済みます。 また、PCに基づいて単純に命令を先読みする場合だけではなく、分岐キャッシュ(分岐命令のアドレスとその分岐先とのアドレスのペアを保持)に基づいて、分岐先を予測して命令を先読みする場合もあります。 なお、キャッシュフラッシュは、キャッシュにおいている情報を捨てることではないでしょうか。

関連するQ&A

  • キャシュメモリに関する問題について、答えが分かりません

     すみません、カテ違いかもしれませんが宜しくお願いします。    実はシスアド(18春)の問題で「キャシュメモリに関する正しい表記を選択する」問題ですが、答えが分かりません宜しくお願いします。 ア.書き込み命令が実行されたときに、キャッシュメモリと主記憶の両方を書き換える方式と、キャッシュメモリだけを書き換えておき、  主記憶の書き換えはブロックの入れ替え時に行う方式がある。 イ.キャッシュメモリは、実記憶と仮想記憶のメモリ容量の差を埋めるために採用される。 ウ.主記憶へのアクセスでキャッシュメモリにヒットしないと割り込みが生じ、プログラムによって主記憶からキャッシュメモリへデーターが転送される。 エ.半導体メモリのアクセス速度の向上が著しいので、キャッシュメモリの必要性は減っている。 ・「ア」の「書き込み命令が実行されたとき」とは「何が何に」書き込み命令が実行されたときなのでしょうか。 「ブロック」とはどのようなものでしょうか。 ・「イ」の「実記憶」とは何を指しているのでしょうか。  答えは「イ」か「ウ」のような気がするのですが、具体的にどこがどのように間違っているのか理解できません。 ・シスアド、基本情報の過去問を解説しているサイトはどこかにあるのでしょうか。  

  • キャッシュミス率の増大2

    キャッシュミス率の増大によって、プロセッサの計算速度が劇的に低下することを具体的な事例を挙げて説明せよ。 という問題です。 実行する命令やデータがキャッシュメモリに入っているなら(これをヒットと言う)、CPUは高速で動作し続けることができる。必要な命令やデータが キャッシュメモリに入っていないときは(ミスヒット)、CPUは低速なDRAMから命令やデータを読み出さなければならず、CPUは処理を一時停止して待 つことになる。ミスヒットが続くと、CPUの処理速度は信じられないほど低下してしまう。だからヒット率の高いキャッシュシステムを実装することは、 CPU設計の最優先課題の1つである。 という答えに行き着きました。合っていますでしょうか?ご教示お願い致します。

  • キャッシュをhtmlとmysqlのデータではどちらの方が読み込む・書き込むのが速いでしょうか?

    取得したデータをキャッシュファイルとして、html形式で保存しているのですが、最近mySQL を使用し始め、データベース内に保存したほうが速いのではないかと思うようになりました。 そこでお尋ねしたいのですが、実際どの程度、処理速度に差があるのでしょうか?ディレクトリにファイルを作成、書き込み、読み込みを繰りかえすのと、mysqlのテーブルに行を追加したり、内容をアップデート、または読み込むのではスピード、CPUの負担等に違いがあるかと思います。 個人的に感覚的に、書き込む際はテキストファイルの場合遅く感じるのですが、気のせいでしょうか?また、読み込む際は逆にテキストファイルの方が速いような気もします。 同じ最新のマシン、同様のデータを扱った場合に、両者間で生じる違いがあればご教授いただけると感謝いたします。ご存知方おられましたらどうぞよろしくお願いいたします。

    • ベストアンサー
    • PHP
  • CPU-キャッシュ-メモリと速さ

    PC買い替えのため、特にスピードに重点を置いて各商品のスペックを比べています。その過程で、以下のように理解したつもりですが、自信がありません。どなたかアドバイスをいただけないでしょうか。 ・動作命令は、CPU⇒1次キャッシュ⇒2次キャッシュ⇒メモリ⇒デスク(ページング)と流れる。 ・この流れの中で上流ほど早く、自分の中で処理できない(自分の容量を超える)場合、遅い下流に流す。 ・したがって、CPU速度のみに目が向きがちだが、キャッシュも重要である。 ・1次キャッシュは高価なのでこの容量を押さえ、2次キャッシュの容量を大きくする傾向があるが、1次キャッシュの容量が大きければ2次キャッシュへ流さないで高速に処理できるので、1次キャッシュの容量も重要である。

  • VBAで高速にデータを処理するコツを教えてください

    いつもお世話になっております。 VBAのことで教えて欲しいことがあります。 EXCEL2000 VBAであるデータを処理するコードを作っています。 データ数は1万行×5列×6シート=30万です。 処理する際のパラメータの違いから、この30万個のデータをfor文を使って繰り返し処理します。 繰り返し回数は20万回です。 一回の処理に1秒かかるとすると1秒×20万回なので、2~3日かかります。 このデータを処理する速度の向上を考えています。 L1キャッシュ→L2キャッシュ→メインメモリ→HDD の順に処理速度(アクセス速度?)が遅くなると調べて分かりました。 30万個のデータを配列(メインメモリ?)に格納する方法は下記のようにすればいいと分かりました。 Dim myData as Variant myData = Worksheets("myData").range("A1:E10000") myDataから1行1列目のデータを取り出すのはmyData(1,1)でできると言うことも分かりました。 そこで質問です。 1.コードの記述により、メインメモリよりも高速なL1キャッシュ、L2キャッシュを意識して使うことはできるのでしょうか。 処理している間ずっと30万個のデータをL1,L2キャッシュに格納しておけば、メインメモリに格納しておくよりも高速に処理ができると単純に考えました。 2.私のPCはVista、Core2Quad Q9450、4GB DRAMです。 VBAでは4つのコアをすべて使って実行すること(CPU使用率100%)はできないと聞きました。 上記の処理を実行する時、1つのコアで処理させるのがいいのか、複数のコアで処理させるのがいいのか、プロセスの優先度はどうすべきか、など、コードの記述以外の方法で処理速度を上げる方法はあるのでしょうか。 3.処理速度を向上させるコツなどありますでしょうか。 4.VBA以外の言語なら4つのコアをフルパワーで使えるよ、というのがありましたら教えてください。 (C言語はそれに該当するというのは聞きました。) よろしくお願いいたします。

  • Flashで読込んだデータのセキュリティ

    「Flashで読込んだデータのセキュリティ」についての質問です。 現在、社内WEB上で公開する画像を悪用されないように方法を考えています。 一つの案として、Flash経由(外部から動的に読み込み)で表示することによって、保存できなくすることが可能だと思います。(PCのキャッシュに保存されません) 画面キャプチャ対策としては、うっすらと透かしを入れることで対応しようと考えています。 上記の方法でどの程度の悪用防止効果があるのでしょうか? ツール等で稼動中のFlash内のデータを簡単に抜き出せるものなどがあるのでしょうか? またこれ以外の方法で画像の悪用防止方法があればご教授ください。 よろしくお願いします。

  • 2次キャッシュの差は、どこに顕著に現れるのか?

    ThinkPadのX31とX32を比較した場合、 CPUの周波数が同一のモデルでも、2次キャッシュが倍、違います。 (X31:1MB、X32:2MB) 漠然とした質問ですみませんが、 この2次キャッシュの差は、どういう作業を行う時に 体感できるものなのでしょうか? よろしくお願いします。

  • CPUの2次キャッシュとクロック数と動画エンコードについて

    初めまして。 基本的な事(2次キャッシュとは…等)はネットで勉強しました。 新しくノートPCを購入しようと思っているのですが、CPUで何を買ったら良いか分からなくなってしまった為、質問させて頂きます。 【迷っているCPU】 Core 2 Duo の T5500(1.66GHz L2=2M) と T7200(2.00GHz L2=4M) で、 2~3万円の価格差が有りますが、 クロック数と2次キャッシュの関係で、どれ程違うものか教えて下さい。 特に、2次キャッシュの体感速度が如何程かが判れば嬉しいです。 【私の主な買換え目的】 (1)動画のエンコード時の処理速度が速くなる物 (2)一度に沢山のアプリを開けて使用しているので、フリーズし難いもの を求めています 【現在の環境】 ノートPCです CPU:P4 2.66GHZ メモリ:1G (PC3200) HDD:4200回転 【使用状況】 Excel・Word・ネット・メモ帳・動画ソフト(Shrink)・ビデオソフト(Win Media Player等)を良く同時に使用しています。 ゲームは特にしません。 お忙しい中すみませんが、御指導下さい。

  • CPUのキャッシュについて質問です。

    CPUのキャッシュについて質問です。 Athlon X2 とPhenom X2というCPUについてですが Athlonには2次キャッシュ2048KB Phenomには2次キャッシュ512KB 3次キャッシュ6MB OSの起動やネットサーフィン、動画鑑賞などの用途であればどっちのCPUを取るべきですか? 調べてみると3次キャッシュにはグラフィックなどのデータが主に入ると言うことらしいのですが ゲームをしないので2ジキャッシュの容量を取るべきか、それとも全体てきなキャッシュ容量と取るべきですか?

  • PLCの命令語の使い方について

    PLCのラダープログラムを勉強し始めたところの初心者です。 各種PLCには様々な命令語が用意されています。(基本命令、応用命令、演算命令など) これらの基本命令について、個々の動作については取扱説明書を読めば理解できますが、 実際にこれらの命令を使って装置のプログラムを書くときに、何をどう使うことが有効なのか? この辺りがよくわかりません。 たとえば、データシフト命令について、内部レジスタを右にシフトしたり左にシフトしたり。 そういうことができるのはわかりますが、じゃあそれを使ったら装置ではどんなことができるのでしょうか? データ転送命令などもよくわかりません。MOV命令でデータをレジスタに格納できることはわかりましたが、これが何の役に立つのやら… 全くの初歩的な質問で申し訳ないですが、取扱説明書を隅々まで読んでいますが、命令語の基本的な機能については紹介してくれていますが、実世界での使い方については全くと言っていいほど触れられていません。 どんな時に、こうした命令語が有効なのか?具体的な例を教えていただければ幸いです。 また、そうした具体例をまとめたようなサイトがあれば併せてご教授いただけませんでしょうか。 よろしくお願いします。