tc-arrofarrs.c - numeric - C++ library with numerical algorithms
 (HTM) git clone git://src.adamsgaard.dk/numeric
 (DIR) Log
 (DIR) Files
 (DIR) Refs
 (DIR) LICENSE
       ---
       tc-arrofarrs.c (1283B)
       ---
            1 #include <stdio.h>
            2 #include <stdlib.h>
            3 
            4 void matrixMult(double** A, double** B, double** C, unsigned int N)
            5 {
            6     unsigned int i, j, k;
            7     double sum;
            8 #pragma omp parallel for private (j,k,sum) shared(A,B,C,N) default(none)
            9     for (i = 0; i<N; ++i) {
           10         for (j = 0; j<N; ++j) {
           11             sum = 0.0;
           12             for (k = 0; k<N; k++)
           13                 sum += A[i][k] * B[k][j];
           14             C[i][j] = sum;
           15         }
           16     }
           17 }
           18 
           19 
           20 int main(int argc, char* argv[])
           21 {
           22     unsigned int i, j, N;
           23     double** A;
           24     double** B;
           25     double** C;
           26 
           27     if (argc == 2) {
           28         N = atoi(argv[1]);
           29     } else {
           30         fprintf(stderr, "Sorry, I need matrix width as command line argument\n");
           31         return 1;
           32     }
           33 
           34     A = (double**) malloc(N * sizeof(double*));
           35     B = (double**) malloc(N * sizeof(double*));
           36     C = (double**) malloc(N * sizeof(double*));
           37 
           38     for (i = 0; i < N; ++i) {
           39         A[i] = (double*) malloc(N * sizeof(double));
           40         B[i] = (double*) malloc(N * sizeof(double));
           41         C[i] = (double*) malloc(N * sizeof(double));
           42     }
           43 
           44     for (i = 0; i < N; ++i) {
           45         for (j = 0; j < N; ++j) {
           46             A[i][j] = 2.0;
           47             B[i][j] = (double) N*j + i;
           48         }
           49     }
           50 
           51     matrixMult(A, B, C, N);
           52 
           53     free(A);
           54     free(B);
           55     free(C);
           56 
           57     return 0;
           58 }