@@ -60,12 +60,11 @@ void accelerator_inline conformable(GridBase *lhs,GridBase *rhs)
6060#define LATTICE_VIEW_STRICT
6161template <class vobj > class LatticeAccelerator : public LatticeBase
6262{
63- protected :
63+ public :
6464 GridBase *_grid;
6565 int checkerboard;
6666 vobj *_odata; // A managed pointer
6767 uint64_t _odata_size;
68- public:
6968 accelerator_inline LatticeAccelerator () : checkerboard(0 ), _odata(nullptr ), _odata_size(0 ), _grid(nullptr ) { };
7069 accelerator_inline uint64_t oSites (void ) const { return _odata_size; };
7170 accelerator_inline int Checkerboard (void ) const { return checkerboard; };
@@ -230,6 +229,7 @@ class Lattice : public LatticeAccelerator<vobj>
230229 this ->checkerboard =cb;
231230
232231 auto me = View ();
232+ // #pragma omp target teams distribute parallel for
233233 accelerator_for (ss,me.size (),1 ,{
234234 auto tmp = eval (ss,expr);
235235 vstream (me[ss],tmp);
@@ -249,9 +249,26 @@ class Lattice : public LatticeAccelerator<vobj>
249249 this ->checkerboard =cb;
250250
251251 auto me = View ();
252+ int size = me.size ();
253+ // printf("size:%d\n",size);
254+ /*
255+ auto in1 = expr.arg1;
256+ auto in2 = expr.arg2;
257+
258+ int in_size = in1.size();
259+ auto in1_ptr = &in1[0];
260+ auto in2_ptr = &in2[0];
261+ int me_size = me.size();
262+ auto me_ptr = &me[0];
263+ */
264+
265+ // #pragma omp target teams distribute parallel for
252266 accelerator_for (ss,me.size (),1 ,{
253- auto tmp = eval (ss,expr);
254- vstream (me[ss],tmp);
267+ me[ss] = eval (ss,expr);
268+ #ifdef DEBUG
269+ if (ss==0 ) printf (" operator= in lattice/Lattice_base.h: me[ss] = %f\n " ,me[ss]._internal ._internal ._internal .v .v [0 ]);
270+ #endif
271+ // vstream(me[ss],tmp);
255272 });
256273 return *this ;
257274 }
@@ -284,10 +301,13 @@ class Lattice : public LatticeAccelerator<vobj>
284301 CBFromExpression (cb,expr);
285302 assert ( (cb==Odd) || (cb==Even));
286303 this ->checkerboard =cb;
287-
304+ int gsize = this -> _grid -> oSites ();
288305 resize (this ->_grid ->oSites ());
289-
290306 *this = expr;
307+ std::cout<<" 1" <<std::endl;
308+ // #pragma omp target enter data map(to:this[0:1])
309+ // #pragma omp target enter data map(to:this->_odata[0:gsize])
310+ std::cout<<" 2" <<std::endl;
291311 }
292312 template <class Op ,class T1 , class T2 >
293313 Lattice (const LatticeBinaryExpression<Op,T1,T2> & expr) {
@@ -300,9 +320,14 @@ class Lattice : public LatticeAccelerator<vobj>
300320 assert ( (cb==Odd) || (cb==Even));
301321 this ->checkerboard =cb;
302322
323+ int gsize = this ->_grid ->oSites ();
303324 resize (this ->_grid ->oSites ());
304325
305326 *this = expr;
327+ std::cout<<" 3" <<std::endl;
328+ // #pragma omp target enter data map(to:this[0:1])
329+ // #pragma omp target enter data map(to:this->_odata[0:gsize])
330+ std::cout<<" 4" <<std::endl;
306331 }
307332 template <class Op ,class T1 , class T2 , class T3 >
308333 Lattice (const LatticeTrinaryExpression<Op,T1,T2,T3> & expr) {
@@ -315,16 +340,23 @@ class Lattice : public LatticeAccelerator<vobj>
315340 assert ( (cb==Odd) || (cb==Even));
316341 this ->checkerboard =cb;
317342
343+ int gsize = this ->_grid ->oSites ();
318344 resize (this ->_grid ->oSites ());
319345
320346 *this = expr;
347+ std::cout<<" 5" <<std::endl;
348+ // #pragma omp target enter data map(to:this[0:1])
349+ // #pragma omp target enter data map(to:this->_odata[0:gsize])
350+ std::cout<<" 6" <<std::endl;
321351 }
322352
323353 template <class sobj > inline Lattice<vobj> & operator = (const sobj & r){
324354 auto me = View ();
325355 thread_for (ss,me.size (),{
326356 me[ss] = r;
327357 });
358+ // std::cout<<"AA"<<std::endl;
359+ // #pragma omp target update to(me[0:me.size()])
328360 return *this ;
329361 }
330362
@@ -339,6 +371,12 @@ class Lattice : public LatticeAccelerator<vobj>
339371 resize (this ->_grid ->oSites ());
340372 assert ((((uint64_t )&this ->_odata [0 ])&0xF ) ==0 );
341373 this ->checkerboard =0 ;
374+ int gsize=this ->_grid ->oSites ();
375+ // std::cout<<"7"<<std::endl;
376+ // #pragma omp target enter data map(to:this[0:1])
377+ // #pragma omp target enter data map(to:this->_odata[0:gsize])
378+ // std::cout<<"8"<<std::endl;
379+
342380 }
343381
344382 // virtual ~Lattice(void) = default;
@@ -358,6 +396,12 @@ class Lattice : public LatticeAccelerator<vobj>
358396 this ->_grid = r.Grid ();
359397 resize (this ->_grid ->oSites ());
360398 *this = r;
399+
400+ int gsize=this ->_grid ->oSites ();
401+ std::cout<<" 9" <<std::endl;
402+ // #pragma omp target enter data map(to:this[0:1])
403+ // #pragma omp target enter data map(to:this->_odata[0:gsize])
404+ std::cout<<" 10" <<std::endl;
361405 }
362406 // /////////////////////////////////////////
363407 // move constructor
@@ -382,6 +426,7 @@ class Lattice : public LatticeAccelerator<vobj>
382426 accelerator_for (ss,me.size (),vobj::Nsimd (),{
383427 coalescedWrite (me[ss],him (ss));
384428 });
429+ std::cout<<" BB" <<std::endl;
385430 return *this ;
386431 }
387432
@@ -396,6 +441,7 @@ class Lattice : public LatticeAccelerator<vobj>
396441 accelerator_for (ss,me.size (),vobj::Nsimd (),{
397442 coalescedWrite (me[ss],him (ss));
398443 });
444+ std::cout<<" CC" <<std::endl;
399445 return *this ;
400446 }
401447 // /////////////////////////////////////////
@@ -411,7 +457,8 @@ class Lattice : public LatticeAccelerator<vobj>
411457
412458 r._odata = nullptr ;
413459 r._odata_size = 0 ;
414-
460+ std::cout<<" DD" <<std::endl;
461+
415462 return *this ;
416463 }
417464
0 commit comments