Skip to content

Commit 450b8b3

Browse files
authored
Merge pull request #5582 from franzpoeschel/dont-use-remap-buffer
openPMD plugin: optimized restart from partial domain
2 parents 45bc74b + 9ede729 commit 450b8b3

File tree

1 file changed

+13
-27
lines changed

1 file changed

+13
-27
lines changed

include/picongpu/plugins/openPMD/restart/LoadSpecies.hpp

Lines changed: 13 additions & 27 deletions
Original file line numberDiff line numberDiff line change
@@ -51,12 +51,13 @@ namespace picongpu
5151
template<typename T_Identifier>
5252
struct RedistributeFilteredParticles
5353
{
54-
template<typename FrameType, typename FilterType, typename RemapType>
54+
template<typename FrameType, typename FilterType>
5555
HINLINE void operator()(
5656
FrameType& frame,
5757
FilterType const& filter,
58-
RemapType const& remap,
5958
uint64_t const numParticlesCurrentBatch,
59+
// becomes numParticlesAfterFiltering after this function call
60+
MemIdxType& particleIndexTarget,
6061
char const filterRemove)
6162
{
6263
using Identifier = T_Identifier;
@@ -65,13 +66,14 @@ namespace picongpu
6566

6667
ValueType* dataPtr = frame.getIdentifier(Identifier()).getPointer();
6768

68-
for(size_t particleIndex = 0; particleIndex < numParticlesCurrentBatch; ++particleIndex)
69+
particleIndexTarget = 0;
70+
for(MemIdxType particleIndexSrc = 0; particleIndexSrc < numParticlesCurrentBatch; ++particleIndexSrc)
6971
{
70-
if(filter[particleIndex] == filterRemove)
72+
if(filter[particleIndexSrc] == filterRemove)
7173
{
7274
continue;
7375
}
74-
dataPtr[remap[particleIndex]] = dataPtr[particleIndex];
76+
dataPtr[particleIndexTarget++] = dataPtr[particleIndexSrc];
7577
}
7678
}
7779
};
@@ -291,17 +293,13 @@ namespace picongpu
291293
manager::Device<HostDevice>::get().current(),
292294
manager::Device<ComputeDevice>::get().getPlatform(),
293295
MemSpace<DIM1>(maxChunkSize).toAlpakaMemVec());
294-
auto remap = alpaka::allocMappedBuf<MemIdxType, MemIdxType>(
295-
manager::Device<HostDevice>::get().current(),
296-
manager::Device<ComputeDevice>::get().getPlatform(),
297-
MemSpace<DIM1>(maxChunkSize).toAlpakaMemVec());
298296

299297
loadMatchesGeneric(
300298
partialMatches,
301299
threadParams,
302300
totalNumParticles,
303301
maxChunkSize, /* forEachPatch = */
304-
[this, threadParams, &filter, &remap, &patchTotalOffset, &patchExtent, &patchUpperCorner](
302+
[this, threadParams, &filter, &patchTotalOffset, &patchExtent, &patchUpperCorner](
305303
uint64_t loadRound,
306304
uint64_t numParticlesCurrentBatch,
307305
FrameType& mappedFrame,
@@ -330,39 +328,27 @@ namespace picongpu
330328
alpaka::getPtrNative(filter));
331329
eventSystem::getTransactionEvent().waitForFinished();
332330

333-
// For simplicity, do the remapping on the CPU again
334-
MemIdxType remapCurrent = 0;
335-
for(size_t particleIndex = 0; particleIndex < numParticlesCurrentBatch; ++particleIndex)
336-
{
337-
if(filter[particleIndex] == filterKeep)
338-
{
339-
remap[particleIndex] = remapCurrent++;
340-
}
341-
else
342-
{
343-
remap[particleIndex] = std::numeric_limits<MemIdxType>::max();
344-
}
345-
}
346-
331+
MemIdxType numParticlesAfterFiltering = 0;
347332
meta::ForEach<
348333
typename NewParticleDescription::ValueTypeSeq,
349334
RedistributeFilteredParticles<boost::mpl::_1>>
350335
redistributeFilteredParticles;
351336
redistributeFilteredParticles(
352337
mappedFrame,
353338
filter,
354-
remap,
355339
numParticlesCurrentBatch,
340+
numParticlesAfterFiltering,
356341
filterRemove);
357342

358343
log<picLog::INPUT_OUTPUT>(
359344
"openPMD: Keeping %1% of the current batch's %2% particles after filtering.")
360-
% remapCurrent % numParticlesCurrentBatch;
345+
% numParticlesAfterFiltering % numParticlesCurrentBatch;
361346

362347
pmacc::particles::operations::splitIntoListOfFrames(
363348
*speciesTmp,
364349
mappedFrame,
365-
remapCurrent, // !! not numParticlesCurrentBatch, filtered vs. unfiltered number
350+
// @attention not numParticlesCurrentBatch, filtered vs. unfiltered number
351+
numParticlesAfterFiltering,
366352
cellOffsetToTotalDomain,
367353
totalCellIdx_,
368354
*threadParams->cellDescription,

0 commit comments

Comments
 (0)