92572


以下の記事について、疑問点があります。

[コンピュータアーキテクチャの話(139) ダイレクトマップキャッシュとその注意点 |
TECH+（テックプラス）](https://news.mynavi.jp/techplus/article/architecture-139/)

上記ページの末尾から6段落目に以下の記述があります。

> 本来、8バイトのリードと8バイトのライトで済む処理が、64バイトのキャッシュラインのリードが2回とライトが1回とメモリとのデータ転送量が24倍となり

これについて疑問があるのですが、「本来」のほうは、8byte + 8byte = 16byte, 「キャッシュをダミーなしで使ったほう」は、64 byte
* ( 2回 + 1回) = 16 * 12
byteになるので、データ転送量は12倍になると一瞬思いました。サイトには、24倍と書いてありますが、どうして、12倍ではなく、24倍になるのでしょうか。この理由が分かる方がいらっしゃいましたら、教えていただけると幸いです。


CC BY-SA 4.0
2022-11-28T00:43:07.927
92467
2022-12-05T00:41:55.940
2022-11-28T02:12:54.073
4236
55639
question
ハードウェア cpu
キャッシュを使うことで、むしろ処理に時間がかかってしまう例について


質問のもととなる  
[コンピュータアーキテクチャの話(139) ダイレクトマップキャッシュとその注意点 |
TECH+（テックプラス）](https://news.mynavi.jp/techplus/article/architecture-139/)

に以下の説明があります。

> そして、次にiを+1して、a[2]をロードしようとすると、キャッシュラインにはbが入っているので、これもミスになる。  
>
> というように、a、bのアクセスごとに、毎回、キャッシュミスが起こってしまう。こうなると、メインメモリへのアクセス回数を減らすというキャッシュの魔法はうまく働かず、本来、8バイトのリードと8バイトのライトで済む処理が、64バイトのキャッシュラインのリードが2回とライトが1回とメモリとのデータ転送量が24倍となり、キャッシュが無い場合よりも性能が低下してしまう。

キャッシュミスが発生しているので、64バイトのデータをメモリからキャッシュに読み込むとき、読み込み先のキャッシュ64バイトをメモリに書き戻しておく必要があります。  
このため、メモリ転送は`64 byte * ( 2回 + 1回) `の2倍になり、12倍ではなく24倍になると解釈できます。


CC BY-SA 4.0
2022-12-04T09:43:12.867
92572
2022-12-05T00:41:55.940
2022-12-05T00:41:55.940
35558
35558
92467
answer