問題タブ [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.
spring - Spring と Tomcat で休止状態の L2 キャッシュに Infinispan を使用する
春にL2キャッシュとしてinfinispanを正常にセットアップした人はいますか?
データソースに XA を使用したくない。現在、JPATransactionManager で LocalContainerEntityManagerFactoryBean を使用しています。
Infinispan が必要とする JTATransactionManager の設定に関するヒントはありますか?
現在、私のトランザクション マネージャーには次のようなものがあります。エンティティ マネージャー ファクトリーをトランザクション マネージャーに渡す必要があることに注意してください。そのため、TransactionManager を作成するには、エンティティ マネージャーを完全に作成する必要があります。しかし、Infinispan が TransactionManager を必要とする場合、これは循環依存関係を作成しませんか?
更新: 私は bitronix を使用しており、動作しているように見えますが、いくつかの警告が表示されます:
1) Infinispan からの起動時:
STDOUT [警告] [2012.02.20 14:29:00] statetransfer.BaseStateTransferManagerImpl - ISPN000159: トランザクションのブロック解除に失敗しました java.lang.IllegalStateException: キャッシュ ビュー 1 の書き込みコマンドのブロックを解除しようとしましたが、org.infinispan.statetransfer でブロックされませんでした。 StateTransferLockImpl.unblockNewTransactions(StateTransferLockImpl.java:260) org.infinispan.statetransfer.BaseStateTransferManagerImpl.postInstallView(BaseStateTransferManagerImpl.java:351) org.infinispan.cacheviews.CacheViewsManagerImpl.handleCommitView(CacheViewsManagerImpl.java:520) org.infinispan.cacheviews .CacheViewsManagerImpl.clusterCommitView(CacheViewsManagerImpl.java:387) at org.infinispan.cacheviews.CacheViewsManagerImpl.clusterInstallView(CacheViewsManagerImpl.java:271) at org.infinispan.cacheviews.CacheViewsManagerImpl$ViewInstallationTask.call(CacheViewsManagerImpl.java:876) で java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:303) で java.util.concurrent.FutureTask.run(FutureTask.java:138) で java.util.concurrent で.ThreadPoolExecutor$Worker.runTask(ThreadPoolExecutor.java:886) で java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:908) で java.lang.Thread.run(Thread.java:680) で
2) 書き込みトランザクションを実行する場合:
linux - プロセスをCPUコアまたはSMPノードに固定すると、キャッシュコヒーレンシトラフィックを削減できますか?
呼び出しを使用して、プロセスを特定のCPUコアのセットに固定することができsched_setaffinity()
ます。マニュアルページには次のように書かれています。
これはほとんど明白なことです(またはそうではありませんか?)。私にはそれほど明白ではないのはこれです-
LWPを特定のCPUまたはSMPノードに固定すると、キャッシュコヒーレンシバストラフィックが減少しますか?たとえば、プロセスは固定されて実行されているため、他のCPUはそのプライベートメモリを変更しないでください。したがって、同じSMPノードの一部であるCPUのみがキャッシュコヒーレントを維持する必要があります。
c - 2D 配列を反復処理するためのネストされたループの順序はどれがより効率的か
2D 配列を反復処理するネストされたループの次の順序のうち、時間 (キャッシュ パフォーマンス) の点でより効率的なのはどれですか? なんで?
また
cuda - CUDA ですべての SM メモリを L1 キャッシュとして使用できないのはなぜですか?
CUDA デバイスでは、各 SM に 64KB のオンチップ メモリがあり、近くに配置されます。デフォルトでは、これは 48KB の共有メモリと 16KB のL1 キャッシュに分割されます。メモリ アクセス パターンを特定するのが難しいカーネルの場合、このパーティショニングを 16KB の共有メモリと 48KB の L1 キャッシュに変更できます。
CUDA では、SM ごとに 64KB のオンチップ メモリのすべてをL1 キャッシュとして使用できないのはなぜですか?
共有メモリを使用しないが、余分な 16KB の L1 キャッシュを使用できるカーネルには多くの種類があります。
c - 2D 配列を反復処理するときにループの順序がパフォーマンスに影響するのはなぜですか?
以下の 2 つのプログラムは、変数i
とj
変数を入れ替えた以外はほとんど同じです。どちらも異なる時間で実行されます。誰かがなぜこれが起こるのか説明できますか?
バージョン 1
バージョン 2
c - キャッシュミス&キャッシュヒット
次のコードを考えると:
仮定:
int は 4 バイト
src
配列は address0
からdst
始まり、 address から始まります64
キャッシュのサイズは
32
bytes で、最初はキャッシュは空ですライトスルー、ライトアロケートを使用した直接マッピングで動作する L1 キャッシュがあります。
ブロックのサイズは 16 バイトです
と のキャッシュミスとキャッシュヒットを把握しようとしていdst
ますsrc
。
質問 - srcおよびdst配列のテーブルに入力します。最初は空です:実行前
まず、私の教授の解決策を提示します。実行後
これが私の解決策ですが、どこかで間違いを犯しています:
i
私が逃げるのでは1 to 4
なく逃げると仮定して0 to 3
最初の反復:
2 回目の反復:
3 回目の反復:
4 回目の反復:
の表に HITS がある理由がまったくわかりませんdst
。間違っていることはわかっています。上記のソリューションに実際に HITS がある理由を誰か説明してもらえますか?
よろしくロン
performance - LinuxでCプログラムキャッシュのヒット/ミスとCPU時間を測定する最も簡単なツールは?
C で小さなプログラムを書いていますが、そのパフォーマンスを測定したいと考えています。
プロセッサでの実行時間と、キャッシュ ヒット + ミスの回数を確認したいと考えています。コンテキスト スイッチとメモリ使用量に関する情報もあると便利です。
プログラムの実行には 1 秒もかかりません。
/proc/[pid]/stat の情報は気に入っていますが、プログラムが終了した/終了した後にそれを確認する方法がわかりません。
何か案は?
編集: Valgrind は多くのオーバーヘッドを追加すると思います。そのため、/proc/[pid]/stat のような、常にそこにあるシンプルなツールが必要でした。
visual-studio-2010 - VsPerfCmd.exe を使用したハードウェア カウンター プロファイリングは、どこまで信頼できますか?
VsPerfCmd.exe を使用して、インストルメント化されたネイティブ アプリケーションで分岐の予測ミスと最終レベルのキャッシュ ミスをプロファイリングしようとしています。
設定はTinに記載されているとおりに機能しますが、得られる結果は賢明ではないようです。たとえば、常に 24MB のデータ セットにアクセスする関数は、約 2000 回呼び出されたときに、約 700 のキャッシュ ミスしか発生しないと報告されています。これを概観してみましょう - 関数は、12 バイト要素の 1024*1024 要素の 2 つの配列を直線的にトラバースします。すべての要素について、その前または後の要素 1024 インデックスの情報が必要かどうかをランダムに決定します。つまり、キャッシュ ミスを発生させないためには、CPU は常に、キャッシュ内にこれら両方の配列のそれぞれに 1024*12 バイトの少なくとも 3 つのセクションを持たなければなりません。さらに、各反復の後、プロセスは約 8 ミリ秒間 sleep() を使用して CPU を解放します。ハードウェア プリフェッチャーがこれほど優れた仕事をしているとは想像できません。
このばかげた量のデータが、VsPerfCmd が言うよりも多くの最終レベルのキャッシュ ミスを生成しないのはどうしてでしょうか? 私の i7 には 8MB の共有 L3 キャッシュがありますが、これはほとんどありそうにありません。ここで何が起こっているのかについて、誰か意見を共有できますか? もちろん、「VsPerfCmd.exe はひどい」というのは有効な答えですが、誰かがそう言うなら、少なくとも、この主張の根拠として誰かが経験した同様の経験を聞きたいです。
c# - C# .net コードの CPU キャッシュをプロファイリングしていますか?
C および C++ のキャッシュをプロファイリングできるいくつかのツールを見てきましたが、ツール (Valgrind) は Linux を対象としており、Windows 用に開発するには作業が多すぎると Web サイトで述べています)。
C# 開発者がキャッシュのプロファイリングに使用できるツールはありますか?
ANTS Performance Profiler を持っていますが、キャッシュ プロファイリングを実行しません。
cpu - マルチレベルキャッシュパフォーマンス
私は2つの問題に悩まされています。問題の関連する詳細を含めます。ガイダンスをいただければ幸いです。できれば説明をお願いします。
メモリ階層にいくつかの異なる選択肢があるプロセッサについて、次の統計があるとします。
注:グローバルミス率は、すべてのレベルのキャッシュでミスする(したがってメインメモリにアクセスする必要がある)参照の割合です。
L2キャッシュが使用可能であり、直接マッピングされている場合は、合計CPIを計算します。
L2が利用可能で、8ウェイセットアソシアティブである場合は、合計CPIを計算します。