zig-simd - 評価
評価スケール
基本評価 (100点満点)
| 項目 |
配点 |
評価基準 |
| コンパイル |
10点 |
`zig build` でエラーなく完了 |
| ベクトル加算 |
20点 |
正確性とSIMD使用 |
| ドット積 |
25点 |
正確性とSIMD最適化 |
| 行列乗算 |
25点 |
正確性とSIMD実装 |
| テスト |
10点 |
エッジケース含む |
| コード品質 |
10点 |
可読性、最適化 |
ボーナス評価 (最大30点)
| 項目 |
配点 |
| 画像処理 |
10点 |
| 文字列検索 |
10点 |
| ベンチマーク |
10点 |
課題の目的
学習目標
- データ並列処理の原理
- ベクトル化の利点と制約 - コンパイル時ベクトル化
- アーキテクチャ抽象化 - ベンチマーキング手法
- ボトルネック分析習得スキル
- SIMDプログラミングの基礎
- 数値計算の最適化
- パフォーマンス測定と分析
評価手順
1. 正確性テスト
test "vector addition correctness" {
const a = [_]f32{ 1.0, 2.0, 3.0, 4.0 };
const b = [_]f32{ 5.0, 6.0, 7.0, 8.0 };
var result: [4]f32 = undefined;
vectorAddSimd(&a, &b, &result);
try std.testing.expectApproxEqAbs(result[0], 6.0, 0.001);
try std.testing.expectApproxEqAbs(result[1], 8.0, 0.001);
try std.testing.expectApproxEqAbs(result[2], 10.0, 0.001);
try std.testing.expectApproxEqAbs(result[3], 12.0, 0.001);
}
2. 性能テスト
# ベンチマーク実行
zig build bench
# 期待される出力例:
# vectorAdd (scalar): 1.23ms
# vectorAdd (SIMD): 0.31ms
# Speedup: 3.97x
3. SIMD使用確認
# 生成されたアセンブリを確認
zig build-exe src/simd.zig -O ReleaseFast --verbose-asm
# SIMD命令(addps, mulps等)の存在を確認
減点対象
| 項目 |
減点 |
| 計算誤差 > 0.001 |
-10点 |
| SIMD未使用 |
-20点 |
| 境界チェック漏れ |
-10点 |
| メモリリーク |
-15点 |
合格基準
マンダトリーパート: 80点以上
SIMD版はスカラー版より最低2倍高速であること