質問: データキャッシュ、命令キャッシュ、キャッシュフラッシュ データキャッシュ 命令キャッシュ キャッシュフラッシュ この三つの差がよくわかりません。キャッシュはcpuの処理速度を上げるためのものであることは理解しています。私が知っていたのはデータキャッシュのみで、同じデータのやり取りを行う時に使用するものですよね? では、命令キャッシュとは、同じ命令を行うときに使用する?いつ、どこで、その命令をキャッシュに入れておくのでしょうか? キャッシュフラッシュはなんとなくわかります。キャッシュに格納してある情報を要求先へ送ることですか? 会社でこの質問に答えれなくて、宿題にされてしまいました・・・・。答えでも、答えでなくてもいいです。情報をいただけたらと思い質問させていただきました。 よろしくお願い致します。
回答: キャッシュが有効である理由は、いわゆる参照の局所性(locality of reference)があるからです。 そして、その参照の局所性は、データだけではなく、命令についても言えます。例えば、いかなる言語であっても普通にプログラムを書いた場合、一般的にループはよく現われます。そのプログラムをコンパイルした結果、通常は(つまりリバースエンジニアリングしにくくするためにわざとあっちこっちに飛ぶようなコードがはき出されていたりしない限りは)、そのループ部分の命令は局所的に存在します。よって、最近実行した命令をキャッシュに残しておけば、所定の確率で再度その命令をフェッチすることになります。 また、命令を先読みする場合があります。この場合も、先読みした命令をキャッシュに入れておくことにより、cpuから見た命令転送コストは、トータルとして少なくて済みます。 また、pcに基づいて単純に命令を先読みする場合だけではなく、分岐キャッシュ(分岐命令のアドレスとその分岐先とのアドレスのペアを保持)に基づいて、分岐先を予測して命令を先読みする場合もあります。 なお、キャッシュフラッシュは、キャッシュにおいている情報を捨てることではないでしょうか。