問題タブ [cpu-cache]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
arm - ARM11 でのキャッシュの改善点は何ですか
ARM11 で言われているように、キャッシュは物理的にアドレス指定され、多くのキャッシュ エイリアシングの問題を解決し、コンテキスト スイッチのオーバーヘッドを削減します。
物理アドレスを理解するには?キャッシュ エイリアシングの問題を解決し、コンテキスト スイッチのオーバーヘッドを削減するには、どのように役立つのでしょうか?
cpu-cache - 2つの異なるL1icacheラインサイズを取得します
PCでUbuntu12.04とInteli5450を使用しています。レベル1の命令キャッシュのキャッシュラインサイズを取得するために、2つの方法を使用しました。しかし、結果は異なります。
何か問題がありますか?それはとても混乱しています。
java - 読み取りと書き込みに関する休止状態のパフォーマンス
読み取りと書き込みに関して、休止状態はどのように機能しますか。
アプリケーションが DB にさらに書き込みを行う場合、休止状態はどのように機能しますか? この場合、書き込みごとにキャッシュを更新する必要があることを理解していますが、これとは別に、(JDBC と比較して) パフォーマンスのオーバーヘッドがあります。
アプリケーションがデータを読み取るだけの場合 (書き込み/更新はほとんどありません)、休止状態はどのように機能しますか? この場合、キャッシュを更新する必要がないため、休止状態のパフォーマンスは JDBC と同じくらい (またはそれ以上) になると期待できます (適切に調整されている場合)。
また、ケース 2 で (ORM 以外で) 使用する最適なオプションを理解したいと考えています。
cpu - Sandy-BridgeCPU仕様
Sandy Bridge-Eアーキテクチャについてあちこちでまとめることができましたが、L2キャッシュのサイズなど、すべてのパラメータについて完全にはわかりません。誰かがそれらがすべて正しいことを確認できますか?私の主な情報源は64-ia-32-architectures-optimization-manual.pdfでした
java - JavaアプリケーションのCPUキャッシュパフォーマンスを分析するためのツール?
私はOSに関しては好みがありません。Core 2およびi7アーキテクチャーでキャッシュのパフォーマンスを測定できる限り、どのツールでも問題ありません。
x86-64 - 書き込みのプリフェッチは、シングル コアのパフォーマンスに影響しますか?
一部のアーキテクチャには、実際に書き込む前にメモリ位置に書き込むことを CPU に示す「プリフェッチ書き込み」命令があります。マルチコア マシンでは、コアが指定されたキャッシュ ラインの所有権を取得して、後でより迅速にその場所に書き込むことができるようにするヒントとして、これを使用できることを理解しています。ただし、AFAICT は、2 つのコアがキャッシュ ラインをめぐって競合する可能性がある状況でのみ問題になるはずです。単一のコアによってのみ読み書きされるキャッシュ ラインの場合、プリフェッチ書き込みは何の役にも立ちませんか?
performance - ハイパースレッディングでの L1 キャッシュの適応モードについて
私は最近、ハイパースレッディングについて研究している学生です。L1 Data Cache Context Mode という機能について少し混乱しています。
アーキテクチャ最適化マニュアルでは、L1 キャッシュは 2 つのモードで動作できると説明されています。
第 1 レベルのキャッシュは、コンテキスト ID ビットに応じて 2 つのモードで動作できます。
共有モード: L1 データ キャッシュは、2 つの論理プロセッサによって完全に共有されます。
適応モード: 適応モードでは、ページ ディレクトリを使用するメモリ アクセスは、L1 データ キャッシュを共有する論理プロセッサ間で同じようにマップされます。
ただし、説明に従って、適応モードでキャッシュがどのように分割されるかについては興味があります。
java - CおよびJavaでCPUキャッシュ効果を生成する方法は?
Ulrich Drepperの論文で、すべてのプログラマーがメモリについて知っておくべきこと、第3部:CPUキャッシュ、彼は「ワーキングセット」サイズと操作ごとに消費するCPUサイクル(この場合は順次読み取り)の関係を示すグラフを示しています。また、グラフには、L1キャッシュとL2キャッシュのサイズを示す2つのジャンプがあります。cで効果を再現するために独自のプログラムを作成しました。int []配列を頭から尾まで順番に読み取るだけで、さまざまなサイズの配列(1KBから1MB)を試しました。データをグラフにプロットしましたが、ジャンプはなく、グラフは直線です。
私の質問は次のとおりです。
- 私の方法に何か問題がありますか?CPUキャッシュ効果を生成する正しい方法は何ですか(ジャンプを確認するため)。
- シーケンシャル読み取りの場合、次のように動作するはずだと思っていました。最初の要素を読み取ると、キャッシュミスであり、キャッシュラインサイズ(64K)内でヒットが発生します。プリフェッチの助けを借りて、次のキャッシュラインを読み取るレイテンシーは隠されます。ワーキングセットのサイズがL1キャッシュのサイズを超えている場合でも、データを連続してL1キャッシュに読み込み、最も使用頻度の低いものを削除して、プリフェッチを続行します。したがって、キャッシュミスのほとんどは非表示になり、L2からのデータのフェッチにかかる時間は読み取りアクティビティの背後に非表示になります。つまり、同時に動作しているということです。連想性(私の場合は8ウェイ)は、L2からデータを読み取るレイテンシーを隠します。だから、私のプログラムの現象は正しいはずです、私は何かが欠けていますか?
- Javaで同じ効果を得ることができますか?
ちなみに、私はこれをLinuxで行っています。
編集1
Stephen Cの提案に感謝します、ここにいくつかの追加情報があります:これは私のコードです:
main()関数では、配列サイズの1KBから100MBを試しましたが、それでも同じですが、要素ごとにかかる平均時間は2ナノ秒です。時間はL1dのアクセス時間だと思います。
私のキャッシュサイズ:
L1d == 32k
L2 == 256k
L3 == 6144k
編集2
リンクリストを使用するようにコードを変更しました。
最後に、コンパイラの最適化を回避するために、globalSumをprintfします。ご覧のとおり、これはまだ順次読み取りです。最大500MBの配列サイズを試しましたが、要素あたりの平均時間は約4ナノ秒です(データ「パッド」とポインター「にアクセスする必要があるためかもしれません)」 n'、2回のアクセス)、アレイサイズの1KBと同じ。ですから、プリフェッチのようなキャッシュの最適化がレイテンシーを非常にうまく隠しているからだと思いますよね?ランダムアクセスを試して、後で結果を表示します。
編集3
リンクリストへのランダムアクセスを試しましたが、結果は次のとおりです。
最初の赤い線は私のL1キャッシュサイズ、2番目はL2です。だから私たちはそこに少しジャンプするのを見ることができます。また、レイテンシーがまだうまく隠されている場合もあります。
caching - CUDAは1つの変数に対してのみL1キャッシュを無効にします
CUDA 2.0 デバイスで、特定の 1 つの変数に対してのみ L1 キャッシュを無効にする方法はありますか? すべてのメモリ操作に対してフラグ-Xptxas -dlcm=cg
を追加して、コンパイル時に L1 キャッシュを無効にできることを知っています。nvcc
ただし、特定のグローバル変数でのメモリ読み取りに対してのみキャッシュを無効にして、残りのすべてのメモリ読み取りが L1 キャッシュを通過するようにしたいと考えています。
私が Web で行った検索に基づいて、考えられる解決策は PTX アセンブリ コードを使用することです。
arm - ARM Cortex-M0 でデータがキャッシュ可能かどうかを判断するために使用されるアルゴリズム (HPROT[3] 信号ビットで示される)
前述のように、ARM Cortex-M0 の HPROT[3] シグナルは、バス上のデータがキャッシュ可能かどうかを示します。MCはどうやって決めるの?