16#include <View_Types.h>
20#include <ParserView.h>
21#define KOKKOS_IMPL_PUBLIC_INCLUDE
22#include <Kokkos_UnorderedMap.hpp>
23#include <Kokkos_UniqueToken.hpp>
28void kokkos_self_test()
32 static bool kokkos_self_tested_ =
false;
34 if (kokkos_self_tested_)
return;
35 kokkos_self_tested_=
true;
40 DoubleTab a(nb_elem, nb_compo);
42 DoubleTab b(nb_elem, nb_compo);
47 DoubleTabView b_v = b.view_rw();
48 Kokkos::parallel_for(nb_elem, KOKKOS_LAMBDA(
const int i)
50 assert(b_v(i, 0) == 2);
51 for (
int j = 0; j < nb_compo; j++)
52 b_v(i, j) = 2 * b_v(i, j);
59 CDoubleTabView a_v = a.view_ro();
60 Kokkos::parallel_for(nb_elem, KOKKOS_LAMBDA(
const int i)
62 assert(a_v(i, 0) == 1);
71 CDoubleTabView a_v = a.view_ro();
72 DoubleTabView b_v = b.view_rw();
73 Kokkos::parallel_for(nb_elem, KOKKOS_LAMBDA(
76 for (
int j = 0; j < nb_compo; j++)
78 b_v(i, j) = 2 * b_v(i, j) + a_v(i, j);
83 assert(est_egal(b(0, 0), 5));
88 DoubleVect u(nb_elem);
90 ArrOfDouble v(nb_elem);
92 CDoubleArrView a_v = u.view_ro();
93 DoubleArrView b_v = v.view_rw();
94 Kokkos::parallel_for(nb_elem, KOKKOS_LAMBDA(
const int i)
96 b_v(i) = 2 * b_v(i) + a_v(i);
99 assert(est_egal(v(0), 5));
103 DoubleTab tab(nb_elem);
104 DoubleArrView vect_v =
static_cast<DoubleVect&
>(tab).view_rw();
105 Kokkos::parallel_for(nb_elem, KOKKOS_LAMBDA(
const int i)
113 DoubleTab tab(nb_elem, dim);
114 DoubleVect& vect = tab;
115 DoubleArrView vect_v = vect.view_rw();
117 Kokkos::parallel_for(size, KOKKOS_LAMBDA(
const int i)
124 DoubleTab tab(nb_elem,2);
125 for (
int i=0; i<nb_elem; i++)
126 for (
int j=0; j<2; j++)
127 tab(i,j) = i + 0.1*j;
128 CDoubleTabView tab_v = tab.view_ro();
131 assert(a.data() != addrOnDevice(a));
135 assert(tab_v.data()==addrOnDevice(tab));
140 DoubleTab tab(nb_elem,2);
141 for (
int i=0; i<nb_elem; i++)
142 for (
int j=0; j<2; j++)
143 tab(i,j) = i + 0.1*j;
144 CDoubleTabView tab_v = tab.view_ro();
145 assert(tab_v.data()==addrOnDevice(tab));
148 allocateOnDevice(tab);
150 CDoubleTabView tab_v2 = tab.view_ro();
151 assert(tab_v2.data()==addrOnDevice(tab));
155 ArrOfDouble f(nb_elem);
157 std::string expr(
"2*x+2");
161 parser.parseString();
162 DoubleArrView f_v = f.view_rw();
163 Kokkos::parallel_for(nb_elem, KOKKOS_LAMBDA(
166 int threadId = parser.acquire();
167 double x = (double) i;
168 parser.setVar(0, x, threadId);
169 f_v(i) = parser.eval(threadId);
170 parser.release(threadId);
173 assert(f(nb_elem - 1) == 2 * nb_elem);
180 Kokkos::Array<CDoubleTabView, nb> tabs;
181 for (
int n=0; n<nb; n++)
183 tab[n].resize(nb_elem);
185 auto tab_view = tab[n].view_ro();
188 Kokkos::parallel_for(nb_elem, KOKKOS_LAMBDA(
const int i)
190 for (
int n=0; n<nb; n++)
192 auto tab_v = tabs[n];
193 assert(tab_v(i,0)==n);
_SIZE_ size_array() const