タグ付けされた質問 「cpu-cache」

CPUに近いスペースに制限された高速メモリ。キャッシュは、メモリにアクセスする平均時間を短縮するように設計されています。


2
世代別ガベージコレクターは本質的にキャッシュフレンドリーですか?
典型的な世代別ガベージコレクタは、最近割り当てられたデータを別のメモリ領域に保持します。典型的なプログラムでは、多くのデータは短命であるため、若いガベージ(マイナーGCサイクル)を頻繁に収集し、古いガベージを頻繁に収集しないことは、メモリオーバーヘッドとGCの実行時間の適切な妥協点です。 直感的には、若いリージョンのデータに頻繁にアクセスし、すべてを1か所に保持するため、キャッシュに対するメインメモリの待機時間比率が増加すると、単一リージョンコレクターと比較した世代別ガベージコレクターの利点が大きくなります。実験結果はこの直感を裏付けていますか?


3
ランダム読み取りの並列化はうまくいくようです-なぜですか?
次の非常に単純なコンピュータープログラムを検討してください。 for i = 1 to n: y[i] = x[p[i]] ここで、とは要素のバイト配列であり、は要素の単語配列です。ここで、は大きく、たとえば(したがって、データのごく一部のみがあらゆる種類のキャッシュメモリに収まります)。y n p n n n = 2 31xxxyyynnnpppnnnnnnn=231n=231n = 2^{31} がから間に一様に分布した乱数で構成されていると仮定します。1 nppp111nnn 最新のハードウェアの観点から見ると、これは次のことを意味するはずです。 読書安い(シーケンシャルリード)でありますp[i]p[i]p[i] 読ん非常に高価である(ランダム読み取り、ほぼすべてのあるキャッシュミスを読み込みます。私たちは、メインメモリから個々のバイトを取得する必要があります)x[p[i]]x[p[i]]x[p[i]] 書き込み安い(シーケンシャル書き込み)です。y[i]y[i]y[i] そして、これはまさに私が観察していることです。このプログラムは、シーケンシャルな読み取りと書き込みのみを行うプログラムと比較して非常に遅いです。すごい。 ここで疑問が生じます。このプログラムは、最新のマルチコアプラットフォームでどの程度並列化されますか? 私の仮説では、このプログラムはうまく並列化されません。結局のところ、ボトルネックはメインメモリです。単一のコアは、メインメモリからのデータを待機するだけで、すでにほとんどの時間を無駄にしています。 ただし、これは、この種の操作がボトルネックとなっているいくつかのアルゴリズムを試し始めたときに観察したものではありませんでした! 単純なforループをOpenMP並列forループに置き換えました(本質的に、範囲を小さな部分に分割し、これらの部分を異なるCPUコアで並列に実行します)。[1,n][1,n][1,n] ローエンドのコンピューターでは、スピードアップは確かに軽微でした。しかし、ハイエンドプラットフォームでは、優れた線形に近い高速化が得られたことに驚きました。いくつかの具体的な例(正確なタイミングは少しずれている可能性があり、多くのランダムな変動があります;これらは単なる簡単な実験でした): 2 x 4コアXeon(合計8コア):シングルスレッドバージョンと比較して、5〜8倍高速化。 2 x 6コアXeon(合計12コア):シングルスレッドバージョンと比較して8〜14倍高速化。 今、これは全く予想外でした。質問: 正確になぜプログラムの並列化のこの種のは、とてもよくありませんか?ハードウェアで何が起こりますか?(私の現在の推測は、これらの線に沿ったものです:異なるスレッドからのランダムな読み取りは「パイプライン化」されており、これらに対する回答を取得する平均レートは、単一のスレッドの場合よりもはるかに高くなります。) 速度を上げるには、複数のスレッドと複数のコアを使用する必要がありますか?メインメモリとCPUの間のインターフェイスで何らかのパイプライン処理が実際に行われる場合、シングルスレッドアプリケーションでは、メインメモリに、、...、コンピュータはメインメモリから関連するキャッシュラインのフェッチを開始できますか?これが原則的に可能である場合、実際にどのように達成しますか?x [ p [ i + 1 ] ]x[p[i]]x[p[i]]x[p[i]]x[p[i+1]]x[p[i+1]]x[p[i+1]] …

5
異なるキャッシュのタグ、インデックス、オフセットビットの数を計算する方法は?
具体的には: 1)各ブロックに8個の32ビットワードがある4096ブロック/ラインのダイレクトマップキャッシュ。32ビットアドレスを想定して、タグフィールドとインデックスフィールドには何ビットが必要ですか? 2)1)と同じ質問ですが、完全連想キャッシュについてですか? 私が間違っている場合、私を修正してください: タグビット=アドレスビット長-インデックスの指数-オフセットの指数? [オフセットは3 = 2 ^ 3 = 8ですか、それとも2 ^ 5 = 32から5ですか?]

1
メモリの一貫性とキャッシュの一貫性
Sequential ConsistencyがCache Coherenceよりも強力なプロパティであることは本当ですか? による ソリン、ダニエルJ; ヒル、マークD; Wood、David A:メモリの一貫性とキャッシュの一貫性に関する入門書、Morgan&Claypool、2011 順次一貫性は、(正式ではなく)と説明できます。 シーケンシャル整合性メモリモデルは、システムがすべてのスレッドのロードとストアをすべてのメモリ位置に実行し、各スレッドのプログラム順序を考慮した合計順序で実行する必要があることを指定します。各ロードは、その合計順序で最新のストアの値を取得します。 言い換えると、各スレッドのメモリイベント(ロードおよびストア)が与えられた場合、次のようにすべてのイベントを順序付けることができます。1)各スレッドについて、イベントの順序が保持され、2)グローバルな順序がシリアル(保存された最新の値を返すロード)。 今、彼らは一貫性を説明し続けています。 定義コヒーレンスシーケンシャル一貫性の定義に類似してコヒーレントシステムは、各スレッドのプログラム順序を尊重総ために単一のメモリ位置へのすべてのスレッドのロードとストアを実行するために現れなければならないということです。 つまり、システムは一貫性があり、各場所の各スレッドのメモリイベントが与えられた場合、1)各スレッドのその場所へのイベントの順序が保持され、2)それぞれの注文がシリアルである場所。 最後に、彼らは違いを指摘します: この定義は、一貫性と一貫性の重要な違いを強調しています。一貫性はすべてのメモリ場所に関して指定されるのに対し、一貫性はメモリ場所ごとに指定されます。 したがって、一貫性のあるシステムでは、各場所のすべてのイベントの合計順序(特定の場所のイベント間の順序)が必要ですが、一貫性のあるシステムでは、すべてのイベントの合計順序を定義する必要があります(したがって、順序は異なる場所のイベント間でもありますか?) それは、一貫性が一貫性ほど厳密ではないということですか?(面白いようです!)一貫性のある一貫性のないトレースはありますか?

1
TLBとデータキャッシュはどのように機能しますか?
私は試験のために勉強しようとしていますが、TLBとデータキャッシュがどのように機能するかについて混乱していることに気付きました。 TLBは本質的に、最近使用した物理アドレスのキャッシュであることを理解しています。しかし、私は教科書の図(下図)を見ていましたが、何が起こっているのかわかりません。突然物理アドレスを分割し、それを使用してキャッシュのインデックスを作成すると、推測します。しかし、なぜキャッシュとデータを別々に表示するのですか?そして、なぜバイトオフセットがフローティングのままになっているのですか?キャッシュにはデータも保存されるはずです。唯一の目的は、その中にヒットまたはミスがあるかどうかを判断することではないと思います。 私は事前に私の無知をおaびしますが、本はかろうじてTLBを扱っており(ページに少し似ています)、TLBとキャッシュの関係を説明するのにあまり良い仕事をしていません。

6
間隔内の2つの数値の最大XORを見つける:二次式よりも良いことはできますか?
lllrrr L ≤ I 、最大(I ⊕ J )最大(私⊕j)\max{(i\oplus j)}L ≤ I 、J ≤ Rl≤私、j≤rl\le i,\,j\le r ナイーブアルゴリズムは、考えられるすべてのペアを単純にチェックします。たとえば、ルビーでは次のようになります。 def max_xor(l, r) max = 0 (l..r).each do |i| (i..r).each do |j| if (i ^ j > max) max = i ^ j end end end max end 私感私たちはより良い次より行うことができます。この問題のためのより良いアルゴリズムはありますか?

1
実際のキャッシュ忘却のパフォーマンスの評価に関する研究
キャッシュを無視するアルゴリズムとデータ構造は、Frigo et alによって導入されたかなり新しいものです。中のCache-忘れアルゴリズム、1999。同じ年のプロコップの論文も初期のアイデアを紹介しています。 Frigoらによる論文。理論と、キャッシュを無視するアルゴリズムとデータ構造の可能性を示すいくつかの実験結果を提示します。キャッシュを意識しないデータ構造の多くは、静的検索ツリーに基づいています。これらのツリーを保存およびナビゲートする方法は、おそらく最も顕著なものとして、Bender et al。また、Brodal et al。Demaineが概要を説明します。 実際にキャッシュの動作を調査する実験的な作業は、少なくともLadnerらによって行われました。でプログラム計装、2002を使用してキャッシュを意識し、キャッシュ紛失静的検索木のA比較。ラドナー等。古典的なアルゴリズム、キャッシュ忘却型アルゴリズム、キャッシュ対応アルゴリズムを使用して、バイナリ検索問題を解決するアルゴリズムのキャッシュ動作をベンチマークしました。各アルゴリズムは、暗黙的および明示的なナビゲーション方法の両方でベンチマークされました。これに加えて、2003年のRønnの論文では、同じアルゴリズムを非常に詳細に分析し、Ladner et al。と同じアルゴリズムのさらに徹底したテストも実行しました。 私の質問は それ以来、実際にキャッシュを使用しないアルゴリズムのキャッシュ動作のベンチマークに関する新しい研究はありますか?特に静的検索ツリーのパフォーマンスに興味がありますが、他のキャッシュを意識しないアルゴリズムとデータ構造にも満足しています。

3
CPUキャッシュはどのソフトウェアコンポーネントによって管理されますか?
CPUキャッシュは、時間的および空間的局所性を利用して使用されます。私の質問は、これらのキャッシュを管理する責任があるのは誰ですか?このオペレーティングシステムは、低レベルのOS関数呼び出しを使用して、特定のアクセスパターンを識別し、キャッシュを管理(つまり、データを格納)しますか?

2
カーネルモードからユーザーモード(またはその逆)への変更
Galvinによるオペレーティングシステムの本を読んでいます。Galvinは、カーネルモードとユーザーモードとは何か、両方のモードに与えられる命令特権、およびモードビットについても説明しています。しかし、モードがどのように変化するか知りたいです。基本的に私は次の質問を解決したいと思います: CPUには、特権モードと非特権モードの2つのモードがあります。モードを事前から非事前に変更するため a)ハードウェア割り込みが必要 b)ソフトウェア割り込みが必要です。 c)特権命令が必要です。 d)非特権命令が必要です。 私が理解していることから、 ユーザーモードからカーネルモードへ-ハードウェア割り込みが必要です(ディスクI / Oのように)。ユーザープログラムが許容範囲を超えるメモリにアクセスするのに疲れた場合、トラップが発生します。トラップは基本的にOSによって処理されるソフトウェア割り込みです。これで、ユーザーモードでは特権命令を実行できなくなりました。したがって、I / O要求などの非特権命令は、ユーザーをカーネルモードに変更できます。だから私は、変えるために 非特権(ユーザー)から特権(カーネル)へ-H / W割り込み、S / W割り込み、非特権命令が実行します。 カーネルがユーザーモードになりました。OSはカーネルをユーザーモードに変更できます。そのため、カーネルからユーザーモードに変更する特権命令を実行します。H / wまたはS / w割り込みを生成する必要はありません。だから私は結論を変える previledgedからnon-previledgedへ-特権付きの命令で実行されます 私は正しいですか? また、カーネルモードで実行すると、すべての割り込みが無効になりますよね?したがって、答えは(a)または(b)にはできません。また、OSは基本的にはソフトウェアであるため、ハードウェア割り込みを発生させることはできません。 また、OS自体が割り込みを処理するため、カーネルからユーザーモードに変更するために割り込みを生成(およびサービス)する必要がある理由は私にはわかりません。 私がどこか間違っている場合はお知らせください。これに関するどんな助けでもありがたいです。

2
エイリアシングの問題は、仮想的にインデックス化された物理タグ付きキャッシュに現れますか?
基本的に、そして簡単な方法として、TLBからの物理アドレスでキャッシュにアクセスできます。 ただし、別の方法として、仮想アドレスを使用してキャッシュにアクセスできます。ただし、この場合、コンテキストスイッチ間でキャッシュが完全にフラッシュされない場合(他のプロセスのデータがキャッシュに存在する可能性があります)、エイリアスの問題があります。同じメモリを別の仮想アドレスから送信できます。 しかし、私の教科書では、これらの問題を含めて、多くのものが仮想的に索引付けされた物理的なタグ付けによって解決できます。これでもエイリアスの問題が発生する可能性があると思います。 私が間違っている?

1
静止整合性が構成的であるが、順次整合性が構成されていない理由
これら2つのメモリ整合性モデルの比較に問題があります。 基本的には、シーケンシャルな一貫性のために、次のような実際のコードを考えます。 int x, y; void ThreadA() { x = 20; //Write int a = y; //Read } void ThreadB() { y = 20; int b = x; } シーケンシャル一貫性の環境ではそれは不可能だためaか、bのどちらかである20ではないとa = 20、b = 20かa = 20 && b = 20。 しかし、静止時の一貫性はこの例にどのように適合し、なぜ構成的であるのでしょうか。
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.