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 }