Skip to content

ベンチマーク

Celox には Rust コア、TypeScript ランタイム、および参照ベースラインとしての Verilator のベンチマークスイートが含まれています。CI は master への push ごとにベンチマークを自動実行し、インタラクティブなトレンドダッシュボードを公開します。

ダッシュボード

生データは外部ダッシュボードでも確認できます。

測定対象

Counter (N=1000)

メインワークロードは N=1000 個の並列 32 ビットカウンタインスタンスを持つカウンタモジュール(Top)を使用します。現実的なワークロードで JIT パイプライン全体を検証します。Rust、TypeScript、Verilator すべてで同一設計を使用し、直接比較が可能です。

ベンチマークRustTSVerilator
simulation_build_top_n1000JIT コンパイルNAPI ビルドVerilate + C++ コンパイル
simulation_tick_top_n1000_x1単一ティック単一ティック単一ティック
simulation_tick_top_n1000_x1000000100 万ティック100 万ティック100 万ティック
testbench_tick_top_n1000_x1ティック + 読出ティック + 読出ティック + 読出
testbench_tick_top_n1000_x1000000100 万テストベンチサイクル100 万テストベンチサイクル100 万テストベンチサイクル
testbench_array_tick_top_n1000_x1配列 .at() 単一
testbench_array_tick_top_n1000_x1000000配列 .at() 100 万

標準ライブラリモジュール

Veryl 標準ライブラリモジュールのベンチマーク。

Linear SEC (P=6) — ハミング単一誤り訂正エンコーダ/デコーダ(57 ビットデータ、63 ビット符号語)。組合せ回路。

ベンチマークRustTSVerilator
simulation_build_linear_sec_p6JIT コンパイルNAPI ビルドVerilate + C++ コンパイル
simulation_eval_linear_sec_p6_x1単一評価単一評価単一評価
simulation_eval_linear_sec_p6_x1000000100 万評価100 万評価100 万評価
testbench_eval_linear_sec_p6_x1000000100 万評価 + 訂正フラグ読出100 万評価 + 訂正フラグ読出100 万評価 + 訂正フラグ読出

Countones (W=64) — 再帰的組合せポップカウントツリー。

ベンチマークRustTSVerilator
simulation_build_countones_w64JIT コンパイルNAPI ビルドVerilate + C++ コンパイル
simulation_eval_countones_w64_x1単一評価単一評価単一評価
simulation_eval_countones_w64_x1000000100 万評価100 万評価100 万評価

std::counter (WIDTH=32) — マルチモード アップ/ダウンカウンタ(ラップアラウンド付き)。

ベンチマークRustTSVerilator
simulation_build_std_counter_w32JIT コンパイルNAPI ビルドVerilate + C++ コンパイル
simulation_tick_std_counter_w32_x1単一ティック単一ティック単一ティック
simulation_tick_std_counter_w32_x1000000100 万ティック100 万ティック100 万ティック
testbench_tick_std_counter_w32_x1000000100 万ティック + 読出100 万ティック + 読出100 万ティック + 読出

std::gray_counter (WIDTH=32) — Gray エンコード付きカウンタ(counter + gray_encoder)。

ベンチマークRustTSVerilator
simulation_build_gray_counter_w32JIT コンパイルNAPI ビルドVerilate + C++ コンパイル
simulation_tick_gray_counter_w32_x1単一ティック単一ティック単一ティック
simulation_tick_gray_counter_w32_x1000000100 万ティック100 万ティック100 万ティック
testbench_tick_gray_counter_w32_x1000000100 万ティック + 読出100 万ティック + 読出100 万ティック + 読出

std::fifo (WIDTH=8, DEPTH=16) — 同期 FIFO(コントローラ + RAM)。順序回路。

ベンチマークRustVerilator
simulation_build_fifo_w8_d16JIT コンパイルVerilate + C++ コンパイル
simulation_tick_fifo_w8_d16_x1単一ティック(push/pop 交互)単一ティック(push/pop 交互)
testbench_tick_fifo_w8_d16_x1000000100 万ティック + 読出100 万ティック + 読出

std::gray_encoder + gray_decoder (WIDTH=32) — Gray エンコード/デコードラウンドトリップ。組合せ回路。

ベンチマークRustVerilator
simulation_build_gray_codec_w32JIT コンパイルVerilate + C++ コンパイル
simulation_eval_gray_codec_w32_x1単一評価単一評価
simulation_eval_gray_codec_w32_x1000000100 万評価100 万評価

std::edge_detector (WIDTH=32) — ビット単位エッジ検出(posedge/negedge)。順序回路。

ベンチマークRustVerilator
simulation_build_edge_detector_w32JIT コンパイルVerilate + C++ コンパイル
simulation_tick_edge_detector_w32_x1単一ティック単一ティック
testbench_tick_edge_detector_w32_x1000000100 万ティック + 読出100 万ティック + 読出

std::onehot (W=64) — ワンホット検出・ゼロ検出。組合せ回路。

ベンチマークRustVerilator
simulation_build_onehot_w64JIT コンパイルVerilate + C++ コンパイル
simulation_eval_onehot_w64_x1単一評価単一評価
simulation_eval_onehot_w64_x1000000100 万評価100 万評価

std::lfsr_galois (SIZE=32) — ガロアモード線形帰還シフトレジスタ。順序回路。

ベンチマークRustVerilator
simulation_build_lfsr_w32JIT コンパイルVerilate + C++ コンパイル
simulation_tick_lfsr_w32_x1単一ティック単一ティック
simulation_tick_lfsr_w32_x1000000100 万ティック100 万ティック
testbench_tick_lfsr_w32_x1000000100 万ティック + 読出100 万ティック + 読出

API & オーバーヘッド

ベンチマーク説明
simulator_tick_x10000生の Simulator::tick オーバーヘッド(Rust & TS)
simulation_step_x20000Simulation::step 時間ベース API オーバーヘッド(Rust & TS)

ローカル実行

Rust

bash
cargo bench -p celox

TypeScript

bash
pnpm bench

リリースモードで NAPI アドオンをビルドし、パッケージをビルドした後、Vitest ベンチマークを実行します。

Verilator

bash
bash scripts/run-verilator-bench.sh

verilator と C++ ツールチェーンが必要です。

CI 環境

ベンチマークは GitHub Actions の共有ランナー(ubuntu-latest)で実行されます。共有ハードウェアのため、結果にノイズが含まれることがあります。誤検知を避けるため、アラート閾値は 200% に設定されています。個々のデータポイントではなく、長期的なトレンドに注目してください。