問題タブ [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.

0 投票する
4 に答える
22138 参照

caching - 参照の局所性とは何ですか?

参照の局所性を理解するのに問題があります。誰でも、それが何を意味し、何が何であるかを理解するのを手伝ってくれませんか?

  • 基準の空間的局所性
  • 参照の時間的場所
0 投票する
0 に答える
983 参照

linux-kernel - キャッシュ無効化後の mcr 命令

arm をプラットフォーム、Linux を使用する OS と考えてください。

カーネル構成で CONFIG_CPU_DCACHE_DISABLE を有効にすることにより、キャッシュが無効になっていることを考慮してください。このオプションは、基本的に L1 キャッシュを無効にします。L1キャッシュを無効にすると、明らかにL2キャッシュが無効になりますか?

これ以降、mcr 命令はキャッシュに影響を与えません。これは、dma_cache_maint() 操作が NULL と同等であることを意味しますか?

リンク: http://lxr.linux.no/#linux+v2.6.35/arch/arm/kernel/head.S#L166

0 投票する
1 に答える
887 参照

hibernate - Hibernate は、リスト内の主キーで検索し、L2 キャッシュに直接送信します

単純な長い主キーを持つエンティティがあります。私は次のようなクエリを実行します: Select from table where primary_key IN (....);

Hibernate はクエリを実行して Id (指定したばかりです!) を取得し、L2 キャッシュに移動するようです。最初のクエリをスキップする方法はありますか? 主キーによる一連のエンティティが必要です。これが JPA 1 なのか JPA 2.0 なのか (Lists をより適切にサポートする) は不明です。

ループで findById() を実行して目的の結果を得ることができますが、これは明らかに最適ではありません。

0 投票する
1 に答える
186 参照

c - ベンチマーク機能は複数回-最初以降のすべての呼び出しは命令キャッシュされますか?

単一の関数のベンチマークに使用される小さなベンチマークライブラリをCで作成しています。voidそれが機能する方法は、パラメーターと反復回数のない関数へのポインターをベンチマーク関数に提供することです。次に、関数は次のstruct情報を含むを返します。

ただし、個々の結果を見ると、最初の呼び出しに多くの時間がかかり、その後の呼び出しにかかる時間はごくわずかであることがわかります。

だから私は疑問に思っています:

  1. これは命令キャッシュによるものですか?
  2. 最初の質問に「はい」の場合、ベンチマークツールは一般的にこれにどのように準拠していますか?最初の呼び出しは除外されますか?
  3. 最初の質問に「はい」の場合、キャッシュが関数に適用されない場合はありますか?
  4. 最初の質問に「はい」の場合、キャッシュは関数全体または関数のセグメントで発生しますか?
  5. 最初の質問に「はい」の場合、他に何か読んで理解を深める必要があると考えるべきことはありますか?

データとコード

時間を取得する関数:

テスト結果:

フラグを最適化しない場合の結果:

この結果を生成するテスト中の関数:

ファイルを作成します。

すべてのコードを含むGithubリポジトリ:

https://github.com/Ancide/TinyBench

編集:コンパイラとコンパイラフラグについて言及するのを忘れた

編集2:誰かがすべてを見たい場合に備えて、すべてのコードを含むgitリポジトリを追加しました

編集3:O2フラグなしで結果を追加

0 投票する
2 に答える
1662 参照

c++ - CPUキャッシュはC++/Cプログラミングを認識します

私はCPUキャッシュに関するScottMeyerのポッドキャストを調べていましたが、なぜ気にするのかこれによりコードの実行が速くなるようです。参照用にそのようなコーディングが行われているオープンソースはありますか。または、誰もがに基づいたデータ構造/アルゴリズムの設計の例を持っていますCPU caches aware

0 投票する
2 に答える
48094 参照

operating-system - キャッシュにおける「ブロックサイズ」の概念

ダイレクト マップとセット アソシエイティブ キャッシュの概念を学び始めたところです。非常に初歩的な疑問がいくつかあります。ここに行きます。

アドレスの長さが 32 ビットで、64 バイトのブロック サイズと 512 フレームの 32 KB のキャッシュがあるとすると、「ブロック」内に実際に格納されるデータの量は? メモリ ロケーションの値からロードする命令があり、その値が 16 ビット整数である場合、64 バイト ブロックの 1 つが 16 ビット (2 バイト) 整数値のみを格納するようになりました。ブロック内の他の 62 バイトは? 16ビット整数値もロードする別のロード命令がある場合、この値はロードアドレスに応じて別のフレームの別のブロックに入ります(アドレスが前の命令の同じフレームにマップされている場合、前の値は削除されます)ブロックは再び 64 バイトで 2 バイトのみを格納します)。正しい?

これが非常にばかげた疑いのように思われる場合は、ご容赦ください。私の概念を正しく理解したいだけです。

0 投票する
3 に答える
34367 参照

optimization - すべてのプログラマーがメモリについて知っておくべきことは?

2007 年に出版された Ulrich Drepper のWhat Every Programmer Should Know About Memoryのどれだけが今でも有効なのか疑問に思っています。また、1.0 よりも新しいバージョンやエラッタも見つかりませんでした。

(また、Ulrich Drepper 自身のサイトの PDF 形式: https://www.akkadia.org/drepper/cpumemory.pdf )

0 投票する
1 に答える
4843 参照

tags - CPUキャッシュのタグ、インデックスフィールドのビット単位のサイズを計算する方法は?

キャッシュのサイズ (バイト単位)、各キャッシュ ラインの長さ (バイト単位)、およびキャッシュ内のセット/グループの数を取得する CPU キャッシュ エミュレーターを作成しています。

私はそのほとんどを書きましたが、何時間も苦労してきたのは、指定されたアドレスのタグインデックスフィールドを抽出するために左/右にシフトする必要があるビット数を把握することです。

たとえば、アドレスが48の場合、タグとインデックスを特定する必要があります。

タグを抽出するために私が持っているものは次のとおりですが、それは間違っていると確信しています。

0 投票する
2 に答える
2149 参照

caching - L1ミスがL2アクセスと大きく異なる場合...TLB関連ですか?

私はいくつかのアルゴリズムでいくつかのベンチマークを実行し、それらのメモリ使用量と効率(L1 / L2 / TLBアクセスとミス)をプロファイリングしてきましたが、結果のいくつかは私にとって非常に興味深いものです。

包括的キャッシュ階層(L1およびL2キャッシュ)を考慮すると、L1キャッシュミスの数はL2キャッシュアクセス の数と一致するべきではありませんか?私が見つけた説明の1つは、TLBに関連するものです。仮想アドレスがTLBにマップされていない場合、システムは一部のキャッシュレベルでの検索を自動的にスキップします。これは合法だと思いますか?

0 投票する
1 に答える
469 参照

tlb - TLBの結合性(ウェイの数)を知る方法は?

TLBキャッシュのさまざまな方法を学ぶタスクがあります。どのアルゴリズムを使用する必要がありますか?