Bridge++  Ver.2.1.3
afield_copy_openacc-inc.h
Go to the documentation of this file.
1 
10 //====================================================================
11 void copy(double* RESTRICT v, int nv1, float* RESTRICT w, int nv2,
12  int nin, int Nst)
13 {
14  int Nst_pad = CEIL_NWP(Nst);
15  int nv = nin * Nst_pad;
16 
17 #pragma acc data present(v[nv1:nv], w[nv2:nv]) \
18  copyin(nin, Nst, nv1, nv2)
19 
20 #pragma acc parallel num_workers(NUM_WORKERS) vector_length(VECTOR_LENGTH)
21  {
22 #pragma acc loop gang worker vector
23  for(int ist = 0; ist < Nst; ++ist){
24  for(int in = 0; in < nin; ++in){
25  v[nv1 + IDX2(nin, in, ist)] = w[nv2 + IDX2(nin, in, ist)];
26  }
27  }
28  }
29 
30 }
31 
32 //====================================================================
33 void copy(float* RESTRICT v, int nv1, double* RESTRICT w, int nv2,
34  int nin, int Nst)
35 {
36  int Nst_pad = CEIL_NWP(Nst);
37  int nv = nin * Nst_pad;
38 
39 #pragma acc data present(v[nv1:nv], w[nv2:nv]) \
40  copyin(nin, Nst, nv1, nv2)
41 
42 #pragma acc parallel num_workers(NUM_WORKERS) vector_length(VECTOR_LENGTH)
43  {
44 #pragma acc loop gang worker vector
45  for(int ist = 0; ist < Nst; ++ist){
46  for(int in = 0; in < nin; ++in){
47  v[nv1 + IDX2(nin, in, ist)] = w[nv2 + IDX2(nin, in, ist)];
48  }
49  }
50  }
51 
52 }
53 
54 //====================================================================
CEIL_NWP
#define CEIL_NWP(nst)
Definition: define_params.h:47
IDX2
#define IDX2(nin, in, ist)
Definition: define_index.h:28
copy
void copy(double *RESTRICT v, int nv1, float *RESTRICT w, int nv2, int nin, int Nst)
Definition: afield_copy_openacc-inc.h:11