@@ -70,10 +70,10 @@ InitParticles(const IntVect& a_num_particles_per_cell,
7070 const auto lo = amrex::lbound (tile_box);
7171 const auto hi = amrex::ubound (tile_box);
7272
73- Gpu::ManagedVector <unsigned int > counts (tile_box.numPts (), 0 );
73+ Gpu::DeviceVector <unsigned int > counts (tile_box.numPts (), 0 );
7474 unsigned int * pcount = counts.dataPtr ();
7575
76- Gpu::ManagedVector <unsigned int > offsets (tile_box.numPts ());
76+ Gpu::DeviceVector <unsigned int > offsets (tile_box.numPts ());
7777 unsigned int * poffset = offsets.dataPtr ();
7878
7979 amrex::ParallelFor (tile_box,
@@ -109,7 +109,16 @@ InitParticles(const IntVect& a_num_particles_per_cell,
109109
110110 Gpu::exclusive_scan (counts.begin (), counts.end (), offsets.begin ());
111111
112- int num_to_add = offsets[tile_box.numPts ()-1 ] + counts[tile_box.numPts ()-1 ];
112+ unsigned int last_offset;
113+ unsigned int last_count;
114+ #ifdef AMREX_USE_GPU
115+ Gpu::dtoh_memcpy (&last_offset,offsets.dataPtr ()+tile_box.numPts ()-1 ,sizeof (unsigned int ));
116+ Gpu::dtoh_memcpy (&last_count,counts.dataPtr ()+tile_box.numPts ()-1 ,sizeof (unsigned int ));
117+ #else
118+ std::memcpy (&last_offset,offsets.dataPtr ()+tile_box.numPts ()-1 ,sizeof (unsigned int )
119+ std::memcpy (&last_count,counts.dataPtr ()+tile_box.numPts ()-1 ,sizeof (unsigned int )
120+ #endif
121+ int num_to_add = last_offset + last_count;
113122
114123 auto & particles = GetParticles (lev);
115124 auto & particle_tile = particles[std::make_pair (mfi.index (), mfi.LocalTileIndex ())];
0 commit comments