zig-simd - 評価

評価スケール

基本評価 (100点満点)

項目 配点 評価基準
コンパイル 10点 `zig build` でエラーなく完了
ベクトル加算 20点 正確性とSIMD使用
ドット積 25点 正確性とSIMD最適化
行列乗算 25点 正確性とSIMD実装
テスト 10点 エッジケース含む
コード品質 10点 可読性、最適化

ボーナス評価 (最大30点)

項目 配点
画像処理 10点
文字列検索 10点
ベンチマーク 10点

課題の目的

学習目標

  • SIMD概念の理解
- データ並列処理の原理 - ベクトル化の利点と制約

  • Zig の @Vector 型
- コンパイル時ベクトル化 - アーキテクチャ抽象化

  • 性能最適化
- ベンチマーキング手法 - ボトルネック分析

習得スキル

  • 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倍高速であること