Peano
Loading...
Searching...
No Matches
ParticleSetIterators.h File Reference
#include "ParticleUpdatePredicates.h"
#include "swift2/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  swift2::kernels::kernelrealisation::GenericRealisation
 
class  swift2::kernels::kernelrealisation::CoalescedMemoryRealisation
 
class  swift2::kernels::kernelrealisation::CoalescedMemoryLocalActiveRealisation
 
class  swift2::kernels::kernelrealisation::CoalescedMemoryActiveLocalRealisation
 
class  swift2::kernels::kernelrealisation::EvaluatePredicateInPrologueRealisation
 
class  swift2::kernels::kernelrealisation::EvaluatePredicateInPrologueLocalActiveRealisation
 
class  swift2::kernels::kernelrealisation::EvaluatePredicateInPrologueActiveLocalRealisation
 
class  swift2::kernels::kernelrealisation::GenericOffloadRealisation
 
class  swift2::kernels::kernelrealisation::CoalescedMemoryOffloadRealisation
 
class  swift2::kernels::kernelrealisation::CoalescedMemoryLocalActiveOffloadRealisation
 
class  swift2::kernels::kernelrealisation::CoalescedMemoryActiveLocalOffloadRealisation
 

Namespaces

namespace  swift2
 This file is part of the SWIFT 2 project.
 
namespace  swift2::kernels
 
namespace  swift2::kernels::kernelrealisation
 Different (generic) kernel realisations.
 
namespace  swift2::kernels::internal
 

Concepts

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

Typedefs

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

Functions

template<auto ParticleOp, auto PredicateOp>
void swift2::kernels::forAllParticles (const peano4::datamanagement::VertexMarker &marker, auto &assignedParticles, int numberOfCoalescedAssignedParticles, ::swift2::kernels::kernelrealisation::GenericRealisation realisation)
 Run over all particles and update them independent of each other.
 
template<auto ParticleOp, auto PredicateOp>
void swift2::kernels::forAllParticles (const peano4::datamanagement::VertexMarker &marker, auto &assignedParticles, int numberOfCoalescedAssignedParticles, ::swift2::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 swift2::kernels::forAllParticlePairs (const swift2::CellMetaData &cellMetaData, auto &localParticles, auto &activeParticles, ::swift2::kernels::kernelrealisation::GenericRealisation realisation)
 Run over all local particle-active particle combinations.
 
template<auto PairOperator, auto LocalPredicate, auto PairPredicate>
void swift2::kernels::forAllParticlePairs (const swift2::CellMetaData &cellMetaData, auto &localParticles, auto &activeParticles, ::swift2::kernels::kernelrealisation::GenericOffloadRealisation)
 Exactly the same version as the generic variant, but with an additional offload annotation.
 
template<auto ParticleOp, auto PredicateOp>
void swift2::kernels::forAllParticles (const peano4::datamanagement::VertexMarker &marker, auto &assignedParticles, int numberOfAssignedParticles, ::swift2::kernels::kernelrealisation::CoalescedMemoryRealisation realisation)
 
template<auto ParticleOp, auto PredicateOp>
void swift2::kernels::forAllParticles (const peano4::datamanagement::CellMarker &marker, auto &localParticles, const std::vector< int > &numberOfLocalParticles, ::swift2::kernels::kernelrealisation::CoalescedMemoryRealisation realisation)
 
template<auto ParticleOp, auto PredicateOp>
void swift2::kernels::forAllParticles (const peano4::datamanagement::VertexMarker &marker, auto &assignedParticles, int numberOfAssignedParticles, ::swift2::kernels::kernelrealisation::CoalescedMemoryOffloadRealisation realisation)
 
template<auto ParticleOp, auto PredicateOp>
void swift2::kernels::forAllParticles (const peano4::datamanagement::CellMarker &marker, auto &localParticles, const std::vector< int > &numberOfLocalParticles, ::swift2::kernels::kernelrealisation::CoalescedMemoryOffloadRealisation realisation)
 
template<auto PairOperator, auto LocalPredicate, auto PairPredicate>
void swift2::kernels::forAllParticlePairs (const swift2::CellMetaData &cellMetaData, auto &localParticles, auto &activeParticles, ::swift2::kernels::kernelrealisation::CoalescedMemoryActiveLocalRealisation realisation)
 Alternative implementation of CoalescedMemoryActiveLocalRealisation.
 
template<auto PairOperator, auto LocalPredicate, auto PairPredicate>
void swift2::kernels::forAllParticlePairs (const swift2::CellMetaData &cellMetaData, auto &localParticles, auto &activeParticles, ::swift2::kernels::kernelrealisation::CoalescedMemoryActiveLocalOffloadRealisation realisation)
 
template<auto PairOperator, auto LocalPredicate, auto PairPredicate>
void swift2::kernels::forAllParticlePairs (const swift2::CellMetaData &cellMetaData, auto &localParticles, auto &activeParticles, ::swift2::kernels::kernelrealisation::EvaluatePredicateInPrologueActiveLocalRealisation realisation)
 
template<auto PairOperator, auto LocalPredicate, auto PairPredicate>
void swift2::kernels::forAllParticlePairs (const swift2::CellMetaData &cellMetaData, auto &localParticles, auto &activeParticles, ::swift2::kernels::kernelrealisation::EvaluatePredicateInPrologueLocalActiveRealisation realisation)
 
template<auto ParticlePairOp, auto LocalPredicateOp, auto ParticlePairPredicateOp>
void swift2::kernels::forAllParticlePairs (const swift2::CellMetaData &cellMetaData, auto &localParticles, auto &activeParticles, ::swift2::kernels::kernelrealisation::CoalescedMemoryLocalActiveRealisation realisation)
 
template<auto ParticlePairOp, auto LocalPredicateOp, auto ParticlePairPredicateOp>
void swift2::kernels::forAllParticlePairs (const swift2::CellMetaData &cellMetaData, auto &localParticles, auto &activeParticles, ::swift2::kernels::kernelrealisation::CoalescedMemoryLocalActiveOffloadRealisation realisation)
 
template<auto ParticleOp, auto PredicateOp>
void swift2::kernels::forAllParticles (const peano4::datamanagement::VertexMarker &marker, auto &assignedParticles, int numberOfCoalescedAssignedParticles, ::swift2::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 swift2::kernels::forAllParticles (const peano4::datamanagement::CellMarker &marker, auto &localParticles, const std::vector< int > &numberOfCoalescedLocalParticles, ::swift2::kernels::kernelrealisation::EvaluatePredicateInPrologueRealisation)
 
template<typename LocalParticleContainer , typename ActiveParticleContainer >
void swift2::kernels::forAllParticlePairs (const swift2::CellMetaData &cellMetaData, auto &localParticles, auto &activeParticles, ::swift2::kernels::kernelrealisation::EvaluatePredicateInPrologueActiveLocalRealisation realisation)
 Move all the predicate evaluations into dedicated prologue.
 
template<typename LocalParticleContainer , typename ActiveParticleContainer >
void swift2::kernels::forAllParticlePairs (const swift2::CellMetaData &cellMetaData, auto &localParticles, auto &activeParticles, ::swift2::kernels::kernelrealisation::EvaluatePredicateInPrologueLocalActiveRealisation realisation)
 
template<int SubChunkSize, typename LocalParticle , typename ActiveParticle >
std::pair< std::bitset< SubChunkSize >, std::bitset< SubChunkSize > > swift2::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 > > swift2::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 swift2::kernels::kernelrealisation::Generic
 
CoalescedMemoryRealisation swift2::kernels::kernelrealisation::CoalescedMemory
 
CoalescedMemoryLocalActiveRealisation swift2::kernels::kernelrealisation::CoalescedMemoryLocalActive
 
CoalescedMemoryActiveLocalRealisation swift2::kernels::kernelrealisation::CoalescedMemoryActiveLocal
 
EvaluatePredicateInPrologueRealisation swift2::kernels::kernelrealisation::EvaluatePredicateInPrologue
 
EvaluatePredicateInPrologueLocalActiveRealisation swift2::kernels::kernelrealisation::EvaluatePredicateInPrologueLocalActive
 
EvaluatePredicateInPrologueActiveLocalRealisation swift2::kernels::kernelrealisation::EvaluatePredicateInPrologueActiveLocal
 
GenericOffloadRealisation swift2::kernels::kernelrealisation::GenericOffload
 
CoalescedMemoryOffloadRealisation swift2::kernels::kernelrealisation::CoalescedMemoryOffload
 
CoalescedMemoryLocalActiveOffloadRealisation swift2::kernels::kernelrealisation::CoalescedMemoryLocalActiveOffload
 
CoalescedMemoryActiveLocalOffloadRealisation swift2::kernels::kernelrealisation::CoalescedMemoryActiveLocalOffload
 
tarch::multicore::BooleanSemaphore swift2::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.