019: #define N   4
省略
032: // 1次元配列を2次元配列的にアクセスするためのマクロ
033: #define mat_a_(x, y)   mat_a[(y) * N + (x)]
034: #define mat_b_(x, y)   mat_b[(y) * N + (x)]
035: #define mat_c_(x, y)   mat_c[(y) * N + (x)]

346: // 4x4行列の掛け算を計算する関数：ピュアCコード
347: void mat_mul(const float *mat_a, const float *mat_b, float *mat_c)
348: {
349:    int x, y, i;
350:    float sum;
351:    
352:    // 行列 C = A × B の計算を行う．
353:    for (y = 0; y < N; y++) {
354:        for (x = 0; x < N; x++) {
355:            sum = 0.0f;
356:            for (i = 0; i < N; i++) {
357:                sum += mat_a_(i, y) * mat_b_(x, i);
                      // この行は64回実行する
358:            }
359:            mat_c_(x, y) = sum;
                      // この行は16回実行する
360:        }
361:    }
361: }
