@@ -14,12 +14,13 @@ void single_type(int num_tuples) {
1414 Controller c (num_tuples);
1515 MeshField::MeshField<Controller> cabMeshField (c);
1616
17- auto field = cabMeshField.makeField <0 >();
17+ auto field0 = cabMeshField.makeField <0 >();
1818
1919 auto vector_kernel = KOKKOS_LAMBDA (const int s, const int a)
2020 {
21- field.access (s,a);
22- printf (" test %d %d\n " , s,a);
21+ double d0 = 10 ;
22+ field0.access (s,a) = d0;
23+ assert (field0.access (s,a) == d0);
2324 };
2425
2526 cabMeshField.parallel_for (0 ,num_tuples,vector_kernel," single_type_pfor" );
@@ -39,7 +40,28 @@ void multi_type(int num_tuples) {
3940 auto field2 = cabMeshField.makeField <2 >();
4041 auto field3 = cabMeshField.makeField <3 >();
4142 auto field4 = cabMeshField.makeField <4 >();
42-
43+
44+ auto vector_kernel = KOKKOS_LAMBDA (const int s, const int a)
45+ {
46+ double d0 = 10.456 ;
47+ field0.access (s,a) = d0;
48+ double d1 = 43.973234567 ;
49+ field1.access (s,a) = d1;
50+ float f0 = 123.45 ;
51+ field2.access (s,a) = f0;
52+ int i0 = 22 ;
53+ field3.access (s,a) = i0;
54+ char c0 = ' a' ;
55+ field4.access (s,a) = c0;
56+
57+ assert (field0.access (s,a) == d0);
58+ assert (field1.access (s,a) == d1);
59+ assert (field2.access (s,a) == f0);
60+ assert (field3.access (s,a) == i0);
61+ assert (field4.access (s,a) == c0);
62+ };
63+
64+ cabMeshField.parallel_for (0 ,num_tuples,vector_kernel," multi_type_pfor" );
4365}
4466
4567void many_type (int num_tuples) {
@@ -59,6 +81,34 @@ void many_type(int num_tuples) {
5981 auto field4 = cabMeshField.makeField <4 >();
6082 auto field5 = cabMeshField.makeField <5 >();
6183 auto field6 = cabMeshField.makeField <6 >();
84+
85+ auto vector_kernel = KOKKOS_LAMBDA (const int s, const int a)
86+ {
87+ double d0 = 10.456 ;
88+ field0.access (s,a) = d0;
89+ double d1 = 43.973234567 ;
90+ field1.access (s,a) = d1;
91+ float f0 = 123.45 ;
92+ field2.access (s,a) = f0;
93+ float f1 = 543.21 ;
94+ field3.access (s,a) = f1;
95+ int i0 = 222 ;
96+ field4.access (s,a) = i0;
97+ short int i1 = 50 ;
98+ field5.access (s,a) = i1;
99+ char c0 = ' h' ;
100+ field6.access (s,a) = c0;
101+
102+ assert (field0.access (s,a) == d0);
103+ assert (field1.access (s,a) == d1);
104+ assert (field2.access (s,a) == f0);
105+ assert (field3.access (s,a) == f1);
106+ assert (field4.access (s,a) == i0);
107+ assert (field5.access (s,a) == i1);
108+ assert (field6.access (s,a) == c0);
109+ };
110+
111+ cabMeshField.parallel_for (0 ,num_tuples,vector_kernel," many_type_pfor" );
62112}
63113
64114void rank1_arr (int num_tuples) {
@@ -70,6 +120,19 @@ void rank1_arr(int num_tuples) {
70120 MeshField::MeshField<Controller> cabMeshField (c);
71121
72122 auto field0 = cabMeshField.makeField <0 >();
123+
124+
125+ auto vector_kernel = KOKKOS_LAMBDA (const int s, const int a)
126+ {
127+ for (int i = 0 ; i < width; i++)
128+ {
129+ double d0 = 10 +i;
130+ field0.access (s,a,i) = d0;
131+ assert (field0.access (s,a,i) == d0);
132+ }
133+ };
134+
135+ cabMeshField.parallel_for (0 ,num_tuples,vector_kernel," rank1_arr_pfor" );
73136}
74137
75138void rank2_arr (int num_tuples) {
@@ -83,6 +146,21 @@ void rank2_arr(int num_tuples) {
83146 MeshField::MeshField<Controller> cabMeshField (c);
84147
85148 auto field0 = cabMeshField.makeField <0 >();
149+
150+ auto vector_kernel = KOKKOS_LAMBDA (const int s, const int a)
151+ {
152+ for (int i = 0 ; i < width; i++)
153+ {
154+ for (int j = 0 ; j < height; j++)
155+ {
156+ double d0 = (10 +i)/(j+1 );
157+ field0.access (s,a,i,j) = d0;
158+ assert (field0.access (s,a,i,j) == d0);
159+ }
160+ }
161+ };
162+
163+ cabMeshField.parallel_for (0 ,num_tuples,vector_kernel," rank2_arr_pfor" );
86164}
87165
88166void rank3_arr (int num_tuples) {
@@ -97,6 +175,25 @@ void rank3_arr(int num_tuples) {
97175 MeshField::MeshField<Controller> cabMeshField (c);
98176
99177 auto field0 = cabMeshField.makeField <0 >();
178+
179+ auto vector_kernel = KOKKOS_LAMBDA (const int s, const int a)
180+ {
181+ for (int i = 0 ; i < width; i++)
182+ {
183+ for (int j = 0 ; j < height; j++)
184+ {
185+ for (int k = 0 ; k < depth; k++)
186+ {
187+ double d0 = ((10 +i)*(k+1 ))/(j+1 );
188+ field0.access (s,a,i,j,k) = d0;
189+ assert (field0.access (s,a,i,j,k) == d0);
190+ }
191+ }
192+ }
193+ };
194+
195+ cabMeshField.parallel_for (0 ,num_tuples,vector_kernel," rank3_arr_pfor" );
196+
100197}
101198
102199void mix_arr (int num_tuples) {
@@ -116,19 +213,50 @@ void mix_arr(int num_tuples) {
116213 auto field1 = cabMeshField.makeField <1 >();
117214 auto field2 = cabMeshField.makeField <2 >();
118215 auto field3 = cabMeshField.makeField <3 >();
216+
217+ auto vector_kernel = KOKKOS_LAMBDA (const int s, const int a)
218+ {
219+ float f0;
220+ int i0;
221+ char c0 = ' s' ;
222+ field3.access (s,a) = c0;
223+
224+ for (int i = 0 ; i < width; i++)
225+ {
226+ i0 = i+s+a;
227+ field2.access (s,a,i) = i0;
228+ for (int j = 0 ; j < height; j++)
229+ {
230+ f0 = i0 / (i+j+1.123 );
231+ field1.access (s,a,i,j) = f0;
232+ for (int k = 0 ; k < depth; k++)
233+ {
234+ double d0 = ((10 +i)*(k+1 ))/(j+1 );
235+ field0.access (s,a,i,j,k) = d0;
236+ assert (field0.access (s,a,i,j,k) == d0);
237+ }
238+ assert (field1.access (s,a,i,j) == f0);
239+ }
240+ assert (field2.access (s,a,i) == i0);
241+ }
242+ assert (field3.access (s,a) == c0);
243+ };
244+
245+ cabMeshField.parallel_for (0 ,num_tuples,vector_kernel," mix_arr_pfor" );
246+
119247}
120248
121249int main (int argc, char * argv[]) {
122250 int num_tuples = (argc < 2 ) ? (1000 ) : (atoi (argv[1 ]));
123251 Kokkos::ScopeGuard scope_guard (argc, argv);
124- printf ( " num_tuples: %d \n " , num_tuples);
252+
125253 single_type (num_tuples);
126- // multi_type(num_tuples);
127- // many_type(num_tuples);
128- // rank1_arr(num_tuples);
129- // rank2_arr(num_tuples);
130- // rank3_arr(num_tuples);
131- // mix_arr(num_tuples);
254+ multi_type (num_tuples);
255+ many_type (num_tuples);
256+ rank1_arr (num_tuples);
257+ rank2_arr (num_tuples);
258+ rank3_arr (num_tuples);
259+ mix_arr (num_tuples);
132260
133261 return 0 ;
134262}
0 commit comments