7 void check (int *a
, int *b
, int N
)
10 for (i
= 0; i
< N
; i
++)
15 void init (int *a1
, int *a2
, int N
)
18 for (i
= 0; i
< N
; i
++)
26 void init_again (int *a1
, int *a2
, int N
)
29 for (i
= 0; i
< N
; i
++)
37 void vec_mult_ref (int *p
, int *v1
, int *v2
, int N
)
43 for (i
= 0; i
< N
; i
++)
46 init_again (v1
, v2
, N
);
48 for (i
= 0; i
< N
; i
++)
49 p
[i
] = p
[i
] + (v1
[i
] * v2
[i
]);
52 void vec_mult (int *p
, int *v1
, int *v2
, int N
)
58 #pragma omp target data map(to: v1[:N], v2[:N]) map(from: p[0:N])
61 #pragma omp parallel for
62 for (i
= 0; i
< N
; i
++)
65 init_again (v1
, v2
, N
);
67 #pragma omp target update to(v1[:N], v2[:N])
70 #pragma omp parallel for
71 for (i
= 0; i
< N
; i
++)
72 p
[i
] = p
[i
] + (v1
[i
] * v2
[i
]);
78 int *p1
= (int *) malloc (MAX
* sizeof (int));
79 int *p2
= (int *) malloc (MAX
* sizeof (int));
80 int *v1
= (int *) malloc (MAX
* sizeof (int));
81 int *v2
= (int *) malloc (MAX
* sizeof (int));
83 vec_mult_ref (p1
, v1
, v2
, MAX
);
84 vec_mult (p2
, v1
, v2
, MAX
);