Skip to content

Commit 399ec00

Browse files
authored
Do not rely on managed memory in EM PIC tutorial (#164)
1 parent 3bbe258 commit 399ec00

File tree

1 file changed

+12
-3
lines changed

1 file changed

+12
-3
lines changed

ExampleCodes/Particles/ElectromagneticPIC/Source/EMParticleContainerInit.cpp

Lines changed: 12 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -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

Comments
 (0)