Peano
Loading...
Searching...
No Matches
ParticleSetIterators.h File Reference
#include "ParticleUpdatePredicates.h"
#include "exaparty/CellMetaData.h"
#include "tarch/multicore/BooleanSemaphore.h"
#include "tarch/multicore/Lock.h"
#include "ParticleSetIterators.cpph"
Include dependency graph for ParticleSetIterators.h:

Go to the source code of this file.

Data Structures

class  exaparty::kernels::kernelrealisation::GenericRealisation
 
class  exaparty::kernels::kernelrealisation::CoalescedMemoryRealisation
 
class  exaparty::kernels::kernelrealisation::CoalescedMemoryLocalActiveRealisation
 
class  exaparty::kernels::kernelrealisation::CoalescedMemoryActiveLocalRealisation
 
class  exaparty::kernels::kernelrealisation::EvaluatePredicateInPrologueRealisation
 
class  exaparty::kernels::kernelrealisation::EvaluatePredicateInPrologueLocalActiveRealisation
 
class  exaparty::kernels::kernelrealisation::EvaluatePredicateInPrologueActiveLocalRealisation
 
class  exaparty::kernels::kernelrealisation::GenericOffloadRealisation
 
class  exaparty::kernels::kernelrealisation::CoalescedMemoryOffloadRealisation
 
class  exaparty::kernels::kernelrealisation::CoalescedMemoryLocalActiveOffloadRealisation
 
class  exaparty::kernels::kernelrealisation::CoalescedMemoryActiveLocalOffloadRealisation
 

Namespaces

namespace  exaparty
 This file is part of the ExaParty project.
 
namespace  exaparty::kernels
 
namespace  exaparty::kernels::kernelrealisation
 Different (generic) kernel realisations.
 
namespace  exaparty::kernels::internal
 

Concepts

concept  exaparty::kernels::ParticleUnaryOperatorOnVertex
 Definition of particle update (unary operation)
 
concept  exaparty::kernels::ParticleUnaryOperatorOnCell
 
concept  exaparty::kernels::ParticleBinaryOperator
 Definition of particle-particle interaction.
 

Typedefs

template<typename ParticleContainer >
using exaparty::kernels::PCParticle = typename std::remove_pointer< typename ParticleContainer::value_type >::type
 

Functions

template<auto ParticleOp, auto PredicateOp>
void exaparty::kernels::forAllParticles (const peano4::datamanagement::VertexMarker &marker, auto &assignedParticles, int numberOfCoalescedAssignedParticles, ::exaparty::kernels::kernelrealisation::GenericRealisation realisation)
 Run over all particles and update them independent of each other.
 
template<auto ParticleOp, auto PredicateOp>
void exaparty::kernels::forAllParticles (const peano4::datamanagement::VertexMarker &marker, auto &assignedParticles, int numberOfCoalescedAssignedParticles, ::exaparty::kernels::kernelrealisation::GenericOffloadRealisation)
 Exactly the same version as the generic variant, but we use the offload attribute.
 
template<auto PairOperator, auto LocalPredicate, auto PairPredicate>
void exaparty::kernels::forAllParticlePairs (const exaparty::CellMetaData &cellMetaData, auto &localParticles, auto &activeParticles, ::exaparty::kernels::kernelrealisation::GenericRealisation realisation)
 Run over all local particle-active particle combinations.
 
template<auto PairOperator, auto LocalPredicate, auto PairPredicate>
void exaparty::kernels::forAllParticlePairs (const exaparty::CellMetaData &cellMetaData, auto &localParticles, auto &activeParticles, ::exaparty::kernels::kernelrealisation::GenericOffloadRealisation)
 Exactly the same version as the generic variant, but with an additional offload annotation.
 
template<auto ParticleOp, auto PredicateOp>
void exaparty::kernels::forAllParticles (const peano4::datamanagement::VertexMarker &marker, auto &assignedParticles, int numberOfAssignedParticles, ::exaparty::kernels::kernelrealisation::CoalescedMemoryRealisation realisation)
 
template<auto ParticleOp, auto PredicateOp>
void exaparty::kernels::forAllParticles (const peano4::datamanagement::CellMarker &marker, auto &localParticles, const std::vector< int > &numberOfLocalParticles, ::exaparty::kernels::kernelrealisation::CoalescedMemoryRealisation realisation)
 
template<auto ParticleOp, auto PredicateOp>
void exaparty::kernels::forAllParticles (const peano4::datamanagement::VertexMarker &marker, auto &assignedParticles, int numberOfAssignedParticles, ::exaparty::kernels::kernelrealisation::CoalescedMemoryOffloadRealisation realisation)
 
template<auto ParticleOp, auto PredicateOp>
void exaparty::kernels::forAllParticles (const peano4::datamanagement::CellMarker &marker, auto &localParticles, const std::vector< int > &numberOfLocalParticles, ::exaparty::kernels::kernelrealisation::CoalescedMemoryOffloadRealisation realisation)
 
template<auto PairOperator, auto LocalPredicate, auto PairPredicate>
void exaparty::kernels::forAllParticlePairs (const exaparty::CellMetaData &cellMetaData, auto &localParticles, auto &activeParticles, ::exaparty::kernels::kernelrealisation::CoalescedMemoryActiveLocalRealisation realisation)
 Alternative implementation of CoalescedMemoryActiveLocalRealisation.
 
template<auto PairOperator, auto LocalPredicate, auto PairPredicate>
void exaparty::kernels::forAllParticlePairs (const exaparty::CellMetaData &cellMetaData, auto &localParticles, auto &activeParticles, ::exaparty::kernels::kernelrealisation::CoalescedMemoryActiveLocalOffloadRealisation realisation)
 
template<auto PairOperator, auto LocalPredicate, auto PairPredicate>
void exaparty::kernels::forAllParticlePairs (const exaparty::CellMetaData &cellMetaData, auto &localParticles, auto &activeParticles, ::exaparty::kernels::kernelrealisation::EvaluatePredicateInPrologueActiveLocalRealisation realisation)
 
template<auto PairOperator, auto LocalPredicate, auto PairPredicate>
void exaparty::kernels::forAllParticlePairs (const exaparty::CellMetaData &cellMetaData, auto &localParticles, auto &activeParticles, ::exaparty::kernels::kernelrealisation::EvaluatePredicateInPrologueLocalActiveRealisation realisation)
 
template<auto ParticlePairOp, auto LocalPredicateOp, auto ParticlePairPredicateOp>
void exaparty::kernels::forAllParticlePairs (const exaparty::CellMetaData &cellMetaData, auto &localParticles, auto &activeParticles, ::exaparty::kernels::kernelrealisation::CoalescedMemoryLocalActiveRealisation realisation)
 
template<auto ParticlePairOp, auto LocalPredicateOp, auto ParticlePairPredicateOp>
void exaparty::kernels::forAllParticlePairs (const exaparty::CellMetaData &cellMetaData, auto &localParticles, auto &activeParticles, ::exaparty::kernels::kernelrealisation::CoalescedMemoryLocalActiveOffloadRealisation realisation)
 
template<auto ParticleOp, auto PredicateOp>
void exaparty::kernels::forAllParticles (const peano4::datamanagement::VertexMarker &marker, auto &assignedParticles, int numberOfCoalescedAssignedParticles, ::exaparty::kernels::kernelrealisation::EvaluatePredicateInPrologueRealisation)
 We split up the loop into two loops: The first one runs over the predicates and collects all the results in one large bit field.
 
template<auto ParticleOp, auto PredicateOp>
void exaparty::kernels::forAllParticles (const peano4::datamanagement::CellMarker &marker, auto &localParticles, const std::vector< int > &numberOfCoalescedLocalParticles, ::exaparty::kernels::kernelrealisation::EvaluatePredicateInPrologueRealisation)
 
template<typename LocalParticleContainer , typename ActiveParticleContainer >
void exaparty::kernels::forAllParticlePairs (const exaparty::CellMetaData &cellMetaData, auto &localParticles, auto &activeParticles, ::exaparty::kernels::kernelrealisation::EvaluatePredicateInPrologueActiveLocalRealisation realisation)
 Move all the predicate evaluations into dedicated prologue.
 
template<typename LocalParticleContainer , typename ActiveParticleContainer >
void exaparty::kernels::forAllParticlePairs (const exaparty::CellMetaData &cellMetaData, auto &localParticles, auto &activeParticles, ::exaparty::kernels::kernelrealisation::EvaluatePredicateInPrologueLocalActiveRealisation realisation)
 
template<int SubChunkSize, typename LocalParticle , typename ActiveParticle >
std::pair< std::bitset< SubChunkSize >, std::bitset< SubChunkSize > > exaparty::kernels::internal::identifyInteractingParticlesFixedLocalParticle (const peano4::datamanagement::CellMarker &marker, LocalParticle *localParticle, ActiveParticle *firstActiveParticleInSubchunk, int thisSubchunkSize, UpdateParticlePairWithinCellPredicate< LocalParticle > particlePairPredicate)
 Identify interacting particles.
 
template<int SubChunkSize, typename LocalParticle , typename ActiveParticle >
std::pair< std::bitset< SubChunkSize >, std::bitset< SubChunkSize > > exaparty::kernels::internal::identifyInteractingParticlesFixedActiveParticle (const peano4::datamanagement::CellMarker &marker, LocalParticle *firstLocalParticleInSubchunk, int thisSubchunkSize, ActiveParticle *activeParticle, UpdateParticlePairWithinCellPredicate< LocalParticle > particlePairPredicate)
 Counterpart to other operations, but this time we loop over the local particle and keep the active one fixed.
 

Variables

GenericRealisation exaparty::kernels::kernelrealisation::Generic
 
CoalescedMemoryRealisation exaparty::kernels::kernelrealisation::CoalescedMemory
 
CoalescedMemoryLocalActiveRealisation exaparty::kernels::kernelrealisation::CoalescedMemoryLocalActive
 
CoalescedMemoryActiveLocalRealisation exaparty::kernels::kernelrealisation::CoalescedMemoryActiveLocal
 
EvaluatePredicateInPrologueRealisation exaparty::kernels::kernelrealisation::EvaluatePredicateInPrologue
 
EvaluatePredicateInPrologueLocalActiveRealisation exaparty::kernels::kernelrealisation::EvaluatePredicateInPrologueLocalActive
 
EvaluatePredicateInPrologueActiveLocalRealisation exaparty::kernels::kernelrealisation::EvaluatePredicateInPrologueActiveLocal
 
GenericOffloadRealisation exaparty::kernels::kernelrealisation::GenericOffload
 
CoalescedMemoryOffloadRealisation exaparty::kernels::kernelrealisation::CoalescedMemoryOffload
 
CoalescedMemoryLocalActiveOffloadRealisation exaparty::kernels::kernelrealisation::CoalescedMemoryLocalActiveOffload
 
CoalescedMemoryActiveLocalOffloadRealisation exaparty::kernels::kernelrealisation::CoalescedMemoryActiveLocalOffload
 
tarch::multicore::BooleanSemaphore exaparty::kernels::internal::_multiscaleInteractionSemaphore
 If particles on multiple levels interact, we have to be very careful and ensure that multiple subcells (if mapped onto tasks) do not write to the same coarse grid particles concurrently.