2026-04-01から1ヶ月間の記事一覧
前回の続き: この記事は Claude (AI) にまとめてもらいました。 msyksphinz.hatenablog.com CHI のトランザクションは「誰が何の状態でラインを持っているか」によって異なるメッセージシーケンスを辿る。 前提: キャッシュライン状態とノード キャッシュラ…
CPUの性能解析を行うとき、最初に直面する問題は「どこがボトルネックなのか分からない」というところだ。Linuxのperf statを用いると、各種イベントの回数などを取得することはできる: L1 miss LLC miss branch mispredict stall cycle TLB miss しかし、…
前回の続き。 msyksphinz.hatenablog.com REQ チャネルのフィールド 「何をしたいか」を伝えるコマンドチャネル。データは乗らない。 フィールド 幅 用途 QoS 4 bit サービス品質優先度(0 が最低、15 が最高) TgtID 可変 送り先ノード ID(どの HN-F に届…
前回の続き。 msyksphinz.hatenablog.com CHIとAXIで、各チャネルで実際にどのようなシグナルが定義されているかを整理しようと思う。 CHIとAXIのデータ転送構造の決定的な違いは、CHIはフリットベースの転送ということだ。 AXIは、以下のように各チャネルで…
前回の続き。 msyksphinz.hatenablog.com AXIとCHI構造の違い。ARとAWチャネルはREQに統合される AXI が AR と AW を分けているのは「読み取りと書き込みを完全に独立したパスにする」という設計だ。非コヒーレントバスではこれで十分だ。 CHI ではリクエス…
AMBAプロトコルには、AXI と CHI という2種類のプロトコルが存在する。AXIの方が歴史が古く、CHIの方が歴史が浅い。 AXIはキャッシュコヒーレントを取ることは不可能だが、CHIはそれを実現するためのプロトコルだといってもよい。 AXI: 非コヒーレントな汎用…
マルチコア環境で counter++ を複数スレッドから同時に実行すると、結果が期待より小さくなることがある。「キャッシュコヒーレンシがあるのになぜ?」という疑問を出発点に、MESI の状態遷移を手で追いながら整理してみる。 今回知りたいのは次の 2 点だ。 …
前回は MESI と CHI のプロトコルログを比較する環境を整え、Gem5による実行結果を確認した。 今回は、その実行結果を深堀してみる。 数値の読み方 ReadUnique が CHI のほうが少ない CHI=153 に対して MESI=216。この差は、ラインをすでにキャッシュに持っ…
前回は MESI と CHI のプロトコルログを比較する環境を整えるところまで書いた。今回は実際にビルドして動かし、Phase 1(競合なし読み取り)と Phase 2(書き込み ping-pong)でそれぞれのプロトコルがどんなトラフィックを発行するかを確認した。 ベンチマ…
前回は gem5 を Docker 上でビルドし、CHI プロトコルを有効にした状態で Hello World を動かすところまで確認した。今回はもう少し踏み込んで、MESI と CHI のプロトコルログを同一のベンチマークで比較する環境を整えた。 やりたいこと CHI プロトコルの学…
msyksphinz.hatenablog.com ここではInteractive実行で出てきた結果(sniper_results/ の sim.out をSimPoint weightで重み付けして再集計したもの)を眺める。 この手の話は「最速はどれ」よりも「遅い理由が何か」を掴む方が価値がある。今回の結果は、ベ…
SPEC CPU2006(SPECint2006)をSniperで回して、SimPointで重み付き集計して、ボトルネックを眺めるためのダッシュボードを作った。 AIに書かせたダッシュボード(spec2006_work/notebooks/dashboard.py)が結構よくできていて、まずは「ダッシュボード自体の構…
CHI (Coherent Hub Interface) は Arm が策定したキャッシュコヒーレントプロトコルで、大規模マルチコア SoC のインターコネクトに広く使われている。このプロトコルを手を動かしながら理解するために、オープンソースのアーキテクチャシミュレータ gem5 を…
msyksphinz.hatenablog.com 前回の記事で、SimPoint による IPC 推定値 (0.84) が full-run の実測値 (0.36) より大幅に高くなっている。 SimPoint にはウォームアップ区間 (20%) があるとはいえ、完全にキャッシュが温まった状態の full-run よりも IPC が…
msyksphinz.hatenablog.com SPEC CPU2006 の SimPoint ベースの IPC 推定パイプラインを整備していて、ふと気になることがあった。ipc_estimation.csv に記録されている simpoint_1824 の IPC が 0.5868 なのに、同じディレクトリの sim.out を見ると IPC は…
SimPoint を使った SPEC CPU2006 シミュレーションパイプラインを整備している。SimPoint の目的は「ベンチマーク全体を走らせなくても、代表区間を選んで加重平均すれば近似 IPC が得られる」という点にある。ただ、実際のところどれくらい正確なのか、ちゃ…
SimPoint を使った RISC-V サイクル精度シミュレーションのパイプラインを整備していると、あるスケール上の問題が見えてきた。SPEC CPU2006 の全ベンチマーク × 全 SimPoint 数だと、SIFT トレースファイルの総量がディスクを圧迫するのだ。 現在の構成は以…
msyksphinz.hatenablog.com 前回は Sniper のフロントエンドが Pin / QEMU / DynamoRIO の3種類あること、x86 は Pin で ELF を直接実行できるのに対して RISC-V は QEMU 経由で SIFT トレースファイルを生成する必要があること、を整理した。後編では SIFT …
最近、SPEC CPU2006 の SimPoint サンプリングを Sniper で回している。RISC-V バイナリのシミュレーションでは QEMU で SIFT トレースファイルを生成し、それを Sniper に食わせる構成を使っているのだが、ふと「x86 はトレースファイルなしで ELF を直接シ…
SPEC CPU2006 を SimPoint で代表区間サンプリングし、QEMU + Sniper でシミュレーションする自作 CI パイプラインを整備している。ある日、CI を回してみると Phase 2 (SIFT 生成 + Sniper シミュレーション) で断続的に失敗が発生するようになった。 [FAIL…