問題タブ [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.
performance - L1 キャッシュ ヒットと x86 での登録のサイクル/コストは?
私のアーキテクチャ クラスでは、L1 キャッシュ ヒットは 1 サイクル (つまり、レジスタ アクセス時間と同じ) であると仮定したことを覚えていますが、最新の x86 プロセッサでは実際にそうでしょうか?
L1 キャッシュ ヒットには何サイクルかかりますか? 登録アクセスと比べてどうですか?
cpu-cache - キャッシュ メモリの混乱
プログラマーが UC モードで動作している間、CPU キャッシュを使用してメモリーを使用することはできますか? それとも、プログラマーがキャッシュ メモリをアドレス指定できないため、これは不可能ですか? MTRR を使用して CPU キャッシュ メモリをアドレス指定できると誤解していましたか?
linux - /proc/mtrr 経由でキャッシュを無効にする
このコマンドを発行しているとき
/proc/mtrr は変更されていませんが、新しいエントリが追加されることを期待しています。
次のコマンドで動作します。
次のエントリを追加します。
そのため、サイズ パラメータは何らかの方法で制限されていると思います。そのような制限はありますか?任意のメモリ領域を「キャッシュ不可」に設定することは可能ですか?
元の (起動後) /proc/mtrr は次のようになります。
Pentium M で Linux 2.6.32-41-generic #89-Ubuntu SMP を使用しています。参照: http://www.mjmwired.net/kernel/Documentation/mtrr.txt
背景: タイミング実験のために、特定のプロセスのメモリ領域の CPU キャッシュを無効にしたいと考えています。
c - movndq は動作しますか?
私の仕事は、RAM の読み取り/書き込み速度を計算することです。コンパイラの最適化を避けるために asm 挿入を使用しています。時間を測定するには、TSC と CPU 周波数を使用します。データを移動するには、キャッシュ階層を使用しない asm 命令 MOVNTDQ を使用します。
問題は結果です。データ レート (データシートによる) は 800 Mbps で、私のテストでは 2000 Mbps を超える書き込み速度が得られました。
私が使用したRAMのデータシート - http://www.alldatasheet.com/datasheet-pdf/pdf/308537/ELPIDA/EBE11UE6ACUA-8G-E.html
ソースコード (Win patform 用に作成): https://bitbucket.org/closed_eyes/ram_speed_for_win/downloads/memory_test.cpp
caching - Nehalem l2 キャッシュのバンク数
cacti インターフェイスの「Number of Banks」という用語に出くわしたとき、さまざまなキャッシュ構成のアクセス時間を調べていました。
バンク数は、キャッシュ内のインターリーブされたモジュールの数であり、キャッシュの帯域幅とキャッシュへの並列アクセスの数を増加させます。
このコンテキストでは、Nehalem アーキテクチャのキャッシュ内のバンクの数を見つけたいと考えていました。私はこのことをグーグルで検索しましたが、有用なものは見つかりませんでした。
ここでの私の推論は次のとおりです。
- L1 データと命令キャッシュには単一のバンクが必要です。アクセス粒度は、ここでの単語です。
- L2 キャッシュは、L1 データと命令キャッシュのミスをサポートします。したがって、2 つのバンクをサポートする必要があります。
- 通常、L3 キャッシュはシステム内のすべてのコアで共有されるため、多数 (32) のバンクが必要です。
私の直感は正しいですか?? さらに、バンクの数によって、データ/プログラムの構造が変わりますか (理想的にはそうすべきではありませんが、それでも ...)??
c - x86 命令キャッシュはどのように同期されますか?
私は例が好きなので、C言語で自己修正コードを少し書きました...
...明らかに動作します:
しかし、正直なところ、私はそれがうまくいくとはまったく予想していませんでした。への最初の呼び出しで を含む命令c[2] = 0がキャッシュされることを期待していましたc。その後、への連続したすべての呼び出しは、へcの繰り返しの変更を無視しますc(何らかの方法で明示的にキャッシュを無効にしない限り)。幸いなことに、私の CPU はそれよりも優れているようです。
CPUcは、命令ポインタが(上記のmmapされたメモリへの呼び出しと同様に)大規模なジャンプを行うたびにRAM(RAMに存在すると仮定しても)を命令キャッシュと比較し、一致しない場合はキャッシュを無効にすると思います(すべて?)、しかし、私はそれについてより正確な情報を得ることを望んでいます. 特に、この動作が予測可能 (ハードウェアと OS の違いを除いて) であると見なされ、信頼できるかどうかを知りたいですか?
(おそらく Intel のマニュアルを参照する必要がありますが、それは何千ページにもわたる長さであり、迷子になりがちです...)
java - オブジェクトがCPUキャッシュにあるかどうかを確認するにはどうすればよいですか?
特定のオブジェクトがCPUキャッシュにあるかどうかをJavaでチェックする方法はありますか?そのフィールドの1つを読み書きするとキャッシュミスが発生するかどうかをテストする方法はありますか?
私は過去にJavaプログラムを作成しましたが、複雑なプログラムは作成していません。現在、Javaでいくつかの学術研究を行う必要があります。
これが不可能な場合、この種のことをシミュレートする一般的な方法はありますか?そして、これはCなどの低レベルプログラミングで可能ですか?
cuda - CUDA共有メモリもキャッシュされていますか
私のCUDAアプリケーションでは、デバイスメモリから共有メモリにデータをコピーしています。そのデータはL1にもキャッシュされていますか?
cuda - GPU上のL1キャッシュストレージ
コンピューティング機能2.xを備えたGPUは、オンチップメモリを32のバンクに編成します。オンチップメモリは、共有48KBとL116 KB、またはその逆の2つの構成で使用できます。48KBの共有および16KBのL1構成の場合、メモリバンクにはL1キャッシュが格納されます。私が共有メモリストレージを理解しているように、それに書き込むとき、連続する32ビットワードは連続するバンクに格納されます。これにより、48KBの共有および16KBのL1構成の場合、各メモリバンクは共有メモリ用に384個の32ビットワードを格納し、L1キャッシュ用に128個の32ビットワードを格納すると思います。これは正しいです?
cuda - CUDAカーネル間でのL1キャッシュの永続性
GPUの共有メモリが異なるカーネル間で持続しないことを理解しています。ただし、L1キャッシュは異なるカーネル呼び出し間で持続しますか?