[解決済み] キャッシュラインはどのように機能するのですか?
質問
プロセッサはキャッシュラインを通じてデータをキャッシュに取り込みますが、例えば私のAtomプロセッサでは、実際に読み込まれるデータのサイズにかかわらず、一度に約64バイトを取り込むと理解しています。
私の疑問は
メモリから1バイト読み出す必要があると仮定して、どの64バイトをキャッシュに持ち込むか?
64バイトは、対象のバイトの下にある最も近い64バイトの境界から始まるか、64バイトが何らかの決められた方法でバイトの周りに広がっている(例えば、半分の下、半分の上、またはすべて上)かの2つの可能性が考えられます。
どっちなんだ?
解決方法は?
読み込むバイトまたはワードを含むキャッシュラインがまだキャッシュ内に存在しない場合、CPUはキャッシュライン境界から始まる64バイトを要求します(必要なバイトの下のアドレスで64の倍数である最大のもの)。
最近のPCのメモリモジュールは、一度に64ビット(8バイト)転送します。 8回転送のバーストで そのため、1つのコマンドでキャッシュライン全体の読み書きを行うことができます。 (DDR1/2/3/4 SDRAMのバースト転送サイズは最大64Bまで設定可能で、CPUはキャッシュラインサイズに合わせてバースト転送サイズを選択しますが、64Bが一般的です)
経験則では、プロセッサがメモリアクセスを予測できない(そしてプリフェッチする)場合、検索プロセスには~90ナノ秒、または~250クロックサイクル(CPUがアドレスを知ってからデータを受け取るまで)かかることがあります。
一方、最近のx86CPUでは、L1キャッシュのヒットのロードユーズレイテンシは3、4サイクル、ストアリロードのストアフォワーディングレイテンシは4、5サイクルである。 他のアーキテクチャでも似たようなものです。
さらに読む。Ulrich Drepperの プログラマーが知っておくべきメモリについての知識 . ソフトウェアプリフェッチのアドバイスは少し時代遅れです: 最近のハードウェアプリフェッチはより賢く、ハイパースレッディングは P4 時代よりはるかに優れています (従って、プリフェッチスレッドは通常無駄です)。 また x86 タグの wiki には、このアーキテクチャのパフォーマンスに関するリンクがたくさんあります。
関連
-
[解決済み] アドレス空間識別子(ASID)の目的
-
[解決済み] Javaでメモリーリークを発生させるにはどうしたらいいですか?
-
[解決済み] Flash CS4が手放せなくなる
-
[解決済み] ウェブサイト制作のためのChromeキャッシュの無効化
-
[解決済み] C言語で配列のサイズを決定するにはどうすればよいですか?
-
[解決済み] キャッシュフレンドリーコードとは何ですか?
-
[解決済み] Cache-Control: max-age=0とno-cacheの違いは何ですか?
-
[解決済み] gradleのキャッシュをクリアする方法は?
-
[解決済み】全てのブラウザで、Webページのキャッシュを制御するには?
-
[解決済み】メモリアライメントの目的について
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み】Rustでメモリリークを起こすことは可能か?
-
[解決済み] ARM TCMメモリとは
-
[解決済み] アドレス空間識別子(ASID)の目的
-
[解決済み] Apache Spark Executorのメモリを設定する方法
-
[解決済み] キャッシュラインはどのように機能するのですか?
-
[解決済み] HTOPのVIRT列とは何ですか? メモリのオーバーヘッド?
-
[解決済み] キャッシュフレンドリーコードとは何ですか?
-
[解決済み】メモリアライメントの目的について
-
[解決済み] 各種キャッシュやメインメモリにアクセスするためのコストの目安は?
-
[解決済み] スタックオーバーフローはどのように発生し、どのように防止するのですか?