| tc-arrofarrs.c - numeric - C++ library with numerical algorithms | |
| git clone git://src.adamsgaard.dk/numeric | |
| Log | |
| Files | |
| Refs | |
| 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 argu… | |
| 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 } |