Files
hakorune/docs/research/paper-02-box-theory-jit/archives/evaluation-methodology.md

156 lines
4.1 KiB
Markdown
Raw Normal View History

# JIT論文評価方法論
## 評価の3本柱Gemini先生提案
### 1. 性能評価
- **ベースライン**: インタープリター、VMJITなし
- **比較対象**: GraalVM/Truffle、V8可能な範囲で
- **測定項目**:
- スループットops/sec
- レイテンシ(関数呼び出し)
- メモリ使用量
- コンパイル時間
### 2. 回復力評価
- **故障注入実験**:
- JIT内部での意図的panic
- メモリ不足状況
- 無限ループ検出
- **測定項目**:
- フォールバック成功率
- 復旧時間
- 状態の一貫性
### 3. モジュール性評価
- **拡張性テスト**:
- 新しい型の追加Complex、Decimal等
- バックエンド交換Cranelift→LLVM
- 新しい最適化パスの追加
- **測定項目**:
- 変更必要行数
- インターフェース安定性
- ビルド時間への影響
## 実験計画
### Phase 1: マイクロベンチマーク(実施済み)
✅ 基本演算(整数、浮動小数点)
✅ 制御フロー(分岐、ループ)
✅ PHIード値の合流
### Phase 2: アプリケーションベンチマーク(計画中)
- [ ] フィボナッチ数列(再帰 vs ループ)
- [ ] 素数判定(計算集約型)
- [ ] ソートアルゴリズム(配列操作)
- [ ] 簡易インタープリター(複雑な制御)
### Phase 3: ストレステスト(計画中)
- [ ] 長時間実行(メモリリーク検証)
- [ ] 並行実行(マルチスレッド環境)
- [ ] エラー注入ランダムfault
### Phase 4: 比較評価(計画中)
- [ ] Node.js相当ベンチマーク移植
- [ ] Python相当ベンチマーク移植
- [ ] 実行時間・メモリ使用量比較
## データ収集自動化
### ベンチマークハーネス
```nyash
// benchmark_suite.nyash
static box BenchmarkRunner {
init { timer, results }
constructor() {
me.timer = new TimerBox()
me.results = new MapBox()
}
runBenchmark(name, func, iterations) {
local start = me.timer.now()
loop(i < iterations) {
func()
i = i + 1
}
local elapsed = me.timer.now() - start
me.results.set(name, elapsed / iterations)
}
exportResults() {
return me.results.toJson()
}
}
```
### 統計収集スクリプト
```bash
#!/bin/bash
# collect_stats.sh
echo "=== Nyash JIT Benchmark Suite ==="
# 環境変数設定
export NYASH_JIT_EXEC=1
export NYASH_JIT_THRESHOLD=1
export NYASH_JIT_STATS_JSON=1
# 各ベンチマーク実行
for bench in benchmarks/*.nyash; do
echo "Running: $bench"
./target/release/nyash --backend vm "$bench" > "results/$(basename $bench .nyash).json"
done
# 結果集計
python3 aggregate_results.py results/*.json > final_report.md
```
## 再現性の確保
### 環境記録
- Git commit hash
- Rustコンパイラバージョン
- OS/カーネル情報
- CPU/メモリ情報
- 環境変数設定
### 結果アーカイブ
```
results/
├── 2025-08-27/
│ ├── environment.json
│ ├── raw_data/
│ │ ├── fib_recursive.json
│ │ ├── fib_iterative.json
│ │ └── ...
│ └── summary_report.md
```
## 統計的妥当性
### 測定方法
1. **ウォームアップ**: 最初の10回は除外
2. **繰り返し**: 最低100回実行
3. **外れ値除去**: 上下5%を除外
4. **信頼区間**: 95%信頼区間を算出
### レポート形式
- 平均値 ± 標準偏差
- 中央値(外れ値の影響を排除)
- 最小値・最大値
- ヒストグラム(分布の可視化)
## 論文での提示方法
### 図表案
1. **性能グラフ**: ベンチマーク別の実行時間比較
2. **フォールバック率**: エラー注入量とフォールバック成功率
3. **モジュール性**: 機能追加時の変更行数比較
4. **アーキテクチャ図**: 箱境界とJIT/VMの関係
### 主張の裏付け
- 定量的データ(ベンチマーク結果)
- 定性的分析(コード複雑度、保守性)
- 事例研究(実際の拡張例)