tc-linarr.c - numeric - C++ library with numerical algorithms | |
git clone git://src.adamsgaard.dk/numeric | |
Log | |
Files | |
Refs | |
LICENSE | |
--- | |
tc-linarr.c (1062B) | |
--- | |
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) default(none) shared(A,B,C,N)… | |
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[k*N+i] * B[j*N+k]; | |
14 C[j*N+i] = sum; | |
15 } | |
16 } | |
17 } | |
18 | |
19 | |
20 int main(int argc, char* argv[]) | |
21 { | |
22 unsigned int i, 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 * N * sizeof(double)); | |
35 B = (double*) malloc(N * N * sizeof(double)); | |
36 C = (double*) malloc(N * N * sizeof(double)); | |
37 | |
38 for (i = 0; i < N*N; i++) { | |
39 A[i] = 2.0; | |
40 B[i] = (double)i; | |
41 } | |
42 | |
43 matrixMult(A, B, C, N); | |
44 | |
45 free(A); | |
46 free(B); | |
47 free(C); | |
48 | |
49 /* Exit with success */ | |
50 return 0; | |
51 } |