問題タブ [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.
x86 - in/out 命令を使用したメモリー・マップド i/o 操作 (インテル・プロセッサー内) ... まだキャッシュされていますか?
in/out 命令を使用した場合でも、マップされた i/o のアドレス範囲がライトバック (WB) として入力されている場合、(インテル プロセッサの) メモリ マップされた i/o 操作は引き続きキャッシュされますか?
編集:この質問は解決されました。MMIO はキャッシュ可能であり、メモリの種類に応じて MMIO 操作を並べ替えることができることがわかりました。そのため、Intel は、MTRR を UC (キャッシュ不可) として使用して MMIO を設定することを推奨しました。Intel ソフトウェア開発者マニュアル v3A で見つけました。これは、AMD プロセッサにも適用される可能性があります...
c - CPU キャッシュとキャッシュ ラインについて
CPUキャッシュがどのように動作しているかを理解しようとしています。この構成があるとしましょう (例として)。
- キャッシュサイズ 1024 バイト
- キャッシュライン 32 バイト
- 1024/32 = 32 キャッシュ ラインがすべて一緒になります。
- Singel キャッシュ ラインは 32/4 = 8 int を格納できます。
1) これらの構成によれば、タグの長さは 32-5=27 ビット、インデックスのサイズは 5 ビット (キャッシュ ラインの各バイトに対して 2^5 = 32 アドレス) である必要があります。
合計キャッシュ サイズが 1024 で、キャッシュ ラインが 32 ある場合、タグとインデックスはどこに保存されますか? (他に 4*32 = 128 バイトあります。) キャッシュの実際のサイズは 1024+128 = 1152 ということですか?
2) この例でキャッシュ ラインが 32 バイトの場合、これは、CPU が RAM から新しいバイトを取得する必要があるたびに、32 バイトがキャッシュにコピーされることを意味します。要求されたバイトのキャッシュ ラインの位置がそのアドレスによって決定されると仮定するのは正しいですか?
つまり、CPU が でバイトを要求した場合、利用可能なキャッシュ ラインは からまで[FF FF 00 08]
のバイトで満たされます。そして、要求された 1 バイトは position になります。[FF FF 00 00]
[FF FF 00 1F]
[08]
3) 前のステートメントが正しい場合、32 バイトすべてがとにかくキャッシュ ラインにあるため、インデックスに使用される 5 ビットは技術的に必要ないということですか?
何か問題がありましたらお知らせください。ありがとう
optimization - マシンコードの位置合わせ
マシンコードのアライメントの原則を理解しようとしています。実行時にマシンコードを生成できるアセンブラー実装があります。すべての分岐先で 16 バイトのアラインメントを使用していますが、最適な選択ではないようです。アラインメントを削除すると、同じコードよりも高速に動作する場合があることに気付いたからです。キャッシュ ライン幅と関係があると思います。そのため、一部のコマンドがキャッシュ ラインによってカットされ、そのために CPU がストールします。そのため、ある場所に数バイトのアラインメントが挿入されると、キャッシュの境界線を越えてどこかに命令が移動します...
コード全体を処理し、CPU の仕様 (キャッシュ ライン幅、32/64 ビットなど) に従ってアラインメントを挿入できる自動アラインメント手順を実装したいと考えていました...
誰かがこの手順についていくつかのヒントを与えることができますか? 例として、ターゲット CPU は Intel Core i7 CPU 64 ビット プラットフォームである可能性があります。
ありがとうございました。
android - AndroidでCPUキャッシュのヒット/ミス率を読み取ることはできますか?
AndroidでCPUキャッシュのヒット/ミス率を読み取ることはできますか?
caching - L1 および L2 キャッシュをどのように検索しますか?
最近、CPUキャッシュに関する資料を読んでいました。CPU はどのように L1 および L2 キャッシュを検索し、CPU キャッシュ内のデータはどのような形式で保存されるのでしょうか?
キャッシュの線形スキャンは非効率的だと思いますが、より良い解決策はありますか?
ありがとう。
c++ - キャッシュブロックサイズの検索
プログラムで(C ++を使用して)Ubuntuでキャッシュブロックサイズを見つけるにはどうすればよいですか?
amazon-ec2 - 仮想化環境でのCPUアフィニティ
Amazon EC2のような仮想化環境のマルチコアプロセッサでL2キャッシュを効率的に使用しようとする場合、CPUアフィニティのタスクセットは適用できますか?
android - Android(ARM)でL2キャッシュのヒット/ミス率を読み取る方法は?
http://infocenter.arm.com/help/index.jsp?topic=/com.arm.doc.faqs/ka4237.htmlを使用して L1 (データと命令) キャッシュを読み取る方法を見つけました。L2パフォーマンスカウンターも読みたいです。おそらくARMアセンブリまたはJavaのようなより高いレベルでL2キャッシュヒット率を測定する方法を知っている人はいますか?
caching - エイリアシングの定義/意味?(CPUキャッシュアーキテクチャ)
CPUキャッシュと物理アドレスの間の「エイリアシング」の意味に少し混乱しています。最初に私はそれがウィキペディアで定義されていることを発見しました:
ただし、VIVTにはエイリアシングの問題があり、複数の異なる仮想アドレスが同じ物理アドレスを参照する場合があります。もう1つの問題は同音異義語で、同じ仮想アドレスが複数の異なる物理アドレスにマップされます。
しかし、しばらくして、DAC'05のプレゼンテーション(ppt)で別の定義を見ました:「仮想メモリを備えた組み込みプロセッサ用のエネルギー効率の高い物理的にタグ付けされたキャッシュ」
キャッシュのエイリアシングと同義語:
エイリアス:異なる物理アドレスにマップされた異なるコンテキストからの同じ仮想アドレス同義語:同じ物理アドレスにマップされた異なる仮想アドレス(データ共有)
私はネイティブスピーカーではないので、どちらが正しいかわかりませんが、Wikiの定義は正しいと思います。
編集:
CPUキャッシュでの「エイリアシング」の概念は、通常「同義語」を意味し、逆に「同音異義語」を意味します。より一般的なレベルでは、「エイリアシング」は「混乱」や「カオス」などです。したがって、私の意見では、「エイリアシング」とは、(X-> Y)のマッピングが「全単射ではない」ことを正確に意味します。
「X」=キャッシュされた物理アドレスユニットのサブセット。(各要素は1行のバイトです)
「Y」=有効なキャッシュラインのセット。(要素は「行」でもあります)