-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathmatrixMul_baseline.c
99 lines (77 loc) · 1.67 KB
/
matrixMul_baseline.c
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
/*************************************************************************
> File Name: matrixMul_baseline.c
> Author: logos
> Mail: [email protected]
> Created Time: 2019年04月18日 星期四 14时22分44秒
************************************************************************/
#include<stdio.h>
#include<stdlib.h>
#include<sys/time.h>
float rand_float(float s){
return 4*s*(1-s);
}
void matrix_gen(float *a,float *b,int N,float seed){
float s=seed;
for(int i=0;i<N*N;i++){
s=rand_float(s);
a[i]=s;
s=rand_float(s);
b[i]=s;
}
}
float cal_trace(float *a,int N){
float result=0;
for(int i=0;i<N;i++){
result+=a[i*(N+1)];
}
}
void print_matrix(float *a, int N){
for(int i=0;i<N;i++){
for(int j=0;j<N;j++){
printf("%f ",a[i*N+j]);
}
printf("\n");
}
printf("\n");
}
/*
* inputs: N, seed
*/
int main(int argc, char *argv[]){
//parameter initiation
const int N= atoi(argv[1]); //the size of matrix
float seed=atof(argv[2]);
//matrix init
float *a;
float *b;
float *c;
a=(float*)malloc(N*N*sizeof(float));
b=(float*)malloc(N*N*sizeof(float));
c=(float*)malloc(N*N*sizeof(float));
//matrix generation
matrix_gen(a,b,N,seed);
//run time calculation
struct timeval start;
struct timeval end;
gettimeofday(&start,NULL);
//matrix c calculation
for(int i=0;i<N;i++){
for(int j=0;j<N;j++){
int temp=i*N;
int index=temp+j;
c[index]=0;
for(int k=0;k<N;k++){
c[index]+=a[temp+k]*b[k*N+j];
}
}
}
gettimeofday(&end,NULL);
float duration=end.tv_sec-start.tv_sec;
float trace=0;
//trace calculation
trace=cal_trace(c,N);
//print_matrix(a,N);
//print_matrix(b,N);
print_matrix(c,N);
printf("%f %f",trace,duration);
}