Classes and Kernels handling subdomains that distribute the workload among the MPI processes. More...
#include "../parameter.h"
#include "../cuda_utils/cuda_runtime.h"
#include "../cuda_utils/cuda_utilities.cuh"
#include "../helper_handler.h"
#include "tree.cuh"
Go to the source code of this file.
Classes | |
class | SubDomainKeyTree |
SubDomainKeyTree class handling rank, number of processes and ranges. More... | |
class | DomainList |
Namespaces | |
namespace | KeyNS |
Key (keyType) related functions and kernels. | |
namespace | SubDomainKeyTreeNS |
SubDomainKeyTree related functions and kernels. | |
namespace | SubDomainKeyTreeNS::Kernel |
Kernels. | |
namespace | SubDomainKeyTreeNS::Kernel::Launch |
Wrapped kernels. | |
namespace | DomainListNS |
namespace | DomainListNS::Kernel |
namespace | DomainListNS::Kernel::Launch |
namespace | ParticlesNS |
Particle class related functions and kernels. | |
namespace | ParticlesNS::Kernel |
namespace | ParticlesNS::Kernel::Launch |
namespace | CudaUtils |
namespace | CudaUtils::Kernel |
namespace | CudaUtils::Kernel::Launch |
namespace | Physics |
Physics related functions and kernels. | |
namespace | Physics::Kernel |
namespace | Physics::Kernel::Launch |
Macros | |
#define | MILUPHPC_DOMAIN_CUH |
Functions | |
CUDA_CALLABLE_MEMBER void | KeyNS::key2Char (keyType key, integer maxLevel, char *keyAsChar) |
Convert a key to a char for printing. More... | |
CUDA_CALLABLE_MEMBER integer | KeyNS::key2proc (keyType key, SubDomainKeyTree *subDomainKeyTree) |
Convert the key to the corresponding process. More... | |
__global__ void | SubDomainKeyTreeNS::Kernel::set (SubDomainKeyTree *subDomainKeyTree, integer rank, integer numProcesses, keyType *range, integer *procParticleCounter) |
Kernel call to setter. More... | |
__global__ void | SubDomainKeyTreeNS::Kernel::test (SubDomainKeyTree *subDomainKeyTree) |
Test kernel call (for debugging/testing purposes). More... | |
__global__ void | SubDomainKeyTreeNS::Kernel::buildDomainTree (Tree *tree, Particles *particles, DomainList *domainList, integer n, integer m) |
Kernel to build the domain tree. More... | |
__global__ void | SubDomainKeyTreeNS::Kernel::buildDomainTree (SubDomainKeyTree *subDomainKeyTree, Tree *tree, Particles *particles, DomainList *domainList, integer n, integer m, integer level) |
__global__ void | SubDomainKeyTreeNS::Kernel::getParticleKeys (SubDomainKeyTree *subDomainKeyTree, Tree *tree, Particles *particles, keyType *keys, integer maxLevel, integer n, Curve::Type curveType=Curve::lebesgue) |
Kernel to get all particle keys (and additional information for debugging purposes). More... | |
__global__ void | SubDomainKeyTreeNS::Kernel::particlesPerProcess (SubDomainKeyTree *subDomainKeyTree, Tree *tree, Particles *particles, integer n, integer m, Curve::Type curveType=Curve::lebesgue) |
Kernel to check particle's belonging and count in dependence of belonging/process. More... | |
__global__ void | SubDomainKeyTreeNS::Kernel::markParticlesProcess (SubDomainKeyTree *subDomainKeyTree, Tree *tree, Particles *particles, integer n, integer m, integer *sortArray, Curve::Type curveType=Curve::lebesgue) |
Kernel to mark particle's belonging. More... | |
__global__ void | SubDomainKeyTreeNS::Kernel::zeroDomainListNodes (Particles *particles, DomainList *domainList, DomainList *lowestDomainList) |
Zero domain list nodes. More... | |
template<typename T > | |
__global__ void | SubDomainKeyTreeNS::Kernel::prepareLowestDomainExchange (Particles *particles, DomainList *lowestDomainList, T *buffer, Entry::Name entry) |
Prepare lowest domain exchange via MPI by copying to contiguous memory. More... | |
template<typename T > | |
__global__ void | SubDomainKeyTreeNS::Kernel::updateLowestDomainListNodes (Particles *particles, DomainList *lowestDomainList, T *buffer, Entry::Name entry) |
Update lowest domain list nodes. More... | |
__global__ void | SubDomainKeyTreeNS::Kernel::compLowestDomainListNodes (Tree *tree, Particles *particles, DomainList *lowestDomainList) |
Compute/Find lowest domain list nodes. More... | |
__global__ void | SubDomainKeyTreeNS::Kernel::compLocalPseudoParticles (Tree *tree, Particles *particles, DomainList *domainList, int n) |
Compute local (tree) pseudo particles. More... | |
__global__ void | SubDomainKeyTreeNS::Kernel::compDomainListPseudoParticlesPerLevel (Tree *tree, Particles *particles, DomainList *domainList, DomainList *lowestDomainList, int n, int level) |
Compute domain list pseudo particles (per level). More... | |
__global__ void | SubDomainKeyTreeNS::Kernel::compDomainListPseudoParticles (Tree *tree, Particles *particles, DomainList *domainList, DomainList *lowestDomainList, int n) |
__global__ void | SubDomainKeyTreeNS::Kernel::repairTree (SubDomainKeyTree *subDomainKeyTree, Tree *tree, Particles *particles, DomainList *domainList, DomainList *lowestDomainList, int n, int m, Curve::Type curveType) |
Repair tree by removing received and inserted (pseudo-)particles. More... | |
__global__ void | SubDomainKeyTreeNS::Kernel::createKeyHistRanges (Helper *helper, integer bins) |
__global__ void | SubDomainKeyTreeNS::Kernel::keyHistCounter (Tree *tree, Particles *particles, SubDomainKeyTree *subDomainKeyTree, Helper *helper, int bins, int n, Curve::Type curveType=Curve::lebesgue) |
__global__ void | SubDomainKeyTreeNS::Kernel::calculateNewRange (SubDomainKeyTree *subDomainKeyTree, Helper *helper, int bins, int n, Curve::Type curveType=Curve::lebesgue) |
void | SubDomainKeyTreeNS::Kernel::Launch::set (SubDomainKeyTree *subDomainKeyTree, integer rank, integer numProcesses, keyType *range, integer *procParticleCounter) |
Wrapper for SubDomainKeyTreeNS::Kernel::set(). More... | |
void | SubDomainKeyTreeNS::Kernel::Launch::test (SubDomainKeyTree *subDomainKeyTree) |
Wrapper for SubDomainKeyTreeNS::Kernel::test(). More... | |
real | SubDomainKeyTreeNS::Kernel::Launch::buildDomainTree (Tree *tree, Particles *particles, DomainList *domainList, integer n, integer m) |
Wrapper for SubDomainKeyTreeNS::Kernel::buildDomainTree(). More... | |
real | SubDomainKeyTreeNS::Kernel::Launch::buildDomainTree (SubDomainKeyTree *subDomainKeyTree, Tree *tree, Particles *particles, DomainList *domainList, integer n, integer m, integer level) |
real | SubDomainKeyTreeNS::Kernel::Launch::getParticleKeys (SubDomainKeyTree *subDomainKeyTree, Tree *tree, Particles *particles, keyType *keys, integer maxLevel, integer n, Curve::Type curveType=Curve::lebesgue) |
Wrapper for SubDomainKeyTreeNS::Kernel::getParticleKeys(). More... | |
real | SubDomainKeyTreeNS::Kernel::Launch::particlesPerProcess (SubDomainKeyTree *subDomainKeyTree, Tree *tree, Particles *particles, integer n, integer m, Curve::Type curveType=Curve::lebesgue) |
Wrapper for SubDomainKeyTreeNS::Kernel::particlesPerProcess(). More... | |
real | SubDomainKeyTreeNS::Kernel::Launch::markParticlesProcess (SubDomainKeyTree *subDomainKeyTree, Tree *tree, Particles *particles, integer n, integer m, integer *sortArray, Curve::Type curveType=Curve::lebesgue) |
Wrapper for ::SubDomainKeyTreeNS::Kernel::markParticlesPerProcess(). More... | |
real | SubDomainKeyTreeNS::Kernel::Launch::zeroDomainListNodes (Particles *particles, DomainList *domainList, DomainList *lowestDomainList) |
Wrapper for SubDomainKeyTreeNS::Kernel::zeroDomainListNodes(). More... | |
template<typename T > | |
real | SubDomainKeyTreeNS::Kernel::Launch::prepareLowestDomainExchange (Particles *particles, DomainList *lowestDomainList, T *buffer, Entry::Name entry) |
Wrapper for SubDomainKeyTreeNS::Kernel::prepareLowestDomainExchange(). More... | |
template<typename T > | |
real | SubDomainKeyTreeNS::Kernel::Launch::updateLowestDomainListNodes (Particles *particles, DomainList *lowestDomainList, T *buffer, Entry::Name entry) |
Wrapper for SubDomainKeyTreeNS::Kernel::updateLowestDomainListNodes(). More... | |
real | SubDomainKeyTreeNS::Kernel::Launch::compLowestDomainListNodes (Tree *tree, Particles *particles, DomainList *lowestDomainList) |
Wrapper for SubDomainKeyTreeNS::Kernel::compLowestDomainListNodes(). More... | |
real | SubDomainKeyTreeNS::Kernel::Launch::compLocalPseudoParticles (Tree *tree, Particles *particles, DomainList *domainList, int n) |
Wrapper for SubDomainKeyTreeNS::Kernel::compLocalPseudoParticles(). More... | |
real | SubDomainKeyTreeNS::Kernel::Launch::compDomainListPseudoParticlesPerLevel (Tree *tree, Particles *particles, DomainList *domainList, DomainList *lowestDomainList, int n, int level) |
Wrapper for SubDomainKeyTreeNS::Kernel::compDomainListPseudoParticlesPerLevel(). More... | |
real | SubDomainKeyTreeNS::Kernel::Launch::compDomainListPseudoParticles (Tree *tree, Particles *particles, DomainList *domainList, DomainList *lowestDomainList, int n) |
Wrapper for SubDomainKeyTreeNS::Kernel::compDomainListPseudoParticles(). More... | |
real | SubDomainKeyTreeNS::Kernel::Launch::repairTree (SubDomainKeyTree *subDomainKeyTree, Tree *tree, Particles *particles, DomainList *domainList, DomainList *lowestDomainList, int n, int m, Curve::Type curveType) |
Wrapper for SubDomainKeyTreeNS::Kernel::repairTree(). More... | |
real | SubDomainKeyTreeNS::Kernel::Launch::createKeyHistRanges (Helper *helper, integer bins) |
real | SubDomainKeyTreeNS::Kernel::Launch::keyHistCounter (Tree *tree, Particles *particles, SubDomainKeyTree *subDomainKeyTree, Helper *helper, int bins, int n, Curve::Type curveType=Curve::lebesgue) |
real | SubDomainKeyTreeNS::Kernel::Launch::calculateNewRange (SubDomainKeyTree *subDomainKeyTree, Helper *helper, int bins, int n, Curve::Type curveType=Curve::lebesgue) |
__global__ void | DomainListNS::Kernel::set (DomainList *domainList, integer *domainListIndices, integer *domainListLevels, integer *domainListIndex, integer *domainListCounter, keyType *domainListKeys, keyType *sortedDomainListKeys, integer *relevantDomainListIndices, integer *relevantDomainListLevels, integer *relevantDomainListProcess) |
Kernel call to setter. More... | |
__global__ void | DomainListNS::Kernel::setBorders (DomainList *domainList, real *borders, integer *relevantDomainListOriginalIndex) |
__global__ void | DomainListNS::Kernel::info (Particles *particles, DomainList *domainList) |
Info kernel (for debugging purposes). More... | |
__global__ void | DomainListNS::Kernel::info (Particles *particles, DomainList *domainList, DomainList *lowestDomainList) |
Info kernel (for debugging purposes). More... | |
__global__ void | DomainListNS::Kernel::createDomainList (SubDomainKeyTree *subDomainKeyTree, DomainList *domainList, integer maxLevel, Curve::Type curveType=Curve::lebesgue) |
Kernel to create the domain list. More... | |
__global__ void | DomainListNS::Kernel::lowestDomainList (SubDomainKeyTree *subDomainKeyTree, Tree *tree, Particles *particles, DomainList *domainList, DomainList *lowestDomainList, integer n, integer m) |
Kernel to create the lowest domain list. More... | |
void | DomainListNS::Kernel::Launch::set (DomainList *domainList, integer *domainListIndices, integer *domainListLevels, integer *domainListIndex, integer *domainListCounter, keyType *domainListKeys, keyType *sortedDomainListKeys, integer *relevantDomainListIndices, integer *relevantDomainListLevels, integer *relevantDomainListProcess) |
Wrapper for DomainListNS::Kernel::set(). More... | |
void | DomainListNS::Kernel::Launch::setBorders (DomainList *domainList, real *borders, integer *relevantDomainListOriginalIndex) |
real | DomainListNS::Kernel::Launch::info (Particles *particles, DomainList *domainList) |
Wrapper for DomainListNS::Kernel::info(). More... | |
real | DomainListNS::Kernel::Launch::info (Particles *particles, DomainList *domainList, DomainList *lowestDomainList) |
real | DomainListNS::Kernel::Launch::createDomainList (SubDomainKeyTree *subDomainKeyTree, DomainList *domainList, integer maxLevel, Curve::Type curveType=Curve::lebesgue) |
Wrapper for DomainListNS::Kernel::createDomainList(). More... | |
real | DomainListNS::Kernel::Launch::lowestDomainList (SubDomainKeyTree *subDomainKeyTree, Tree *tree, Particles *particles, DomainList *domainList, DomainList *lowestDomainList, integer n, integer m) |
Wrapper for ::DomainListNS::Kernel::lowestDoainList(). More... | |
__device__ bool | ParticlesNS::applySphericalCriterion (SubDomainKeyTree *subDomainKeyTree, Tree *tree, Particles *particles, real d, int index) |
Check whether particle(s) are within sphere from simulation center. More... | |
__device__ bool | ParticlesNS::applyCubicCriterion (SubDomainKeyTree *subDomainKeyTree, Tree *tree, Particles *particles, real d, int index) |
Check whether particle(s) are within cube from simulation center. More... | |
__global__ void | ParticlesNS::Kernel::mark2remove (SubDomainKeyTree *subDomainKeyTree, Tree *tree, Particles *particles, int *particles2remove, int *counter, int criterion, real d, int numParticles) |
real | ParticlesNS::Kernel::Launch::mark2remove (SubDomainKeyTree *subDomainKeyTree, Tree *tree, Particles *particles, int *particles2remove, int *counter, int criterion, real d, int numParticles) |
template<typename T , typename U > | |
__global__ void | CudaUtils::Kernel::markDuplicatesTemp (Tree *tree, DomainList *domainList, T *array, U *entry1, U *entry2, U *entry3, integer *duplicateCounter, integer *child, int length) |
template<typename T , unsigned int blockSize> | |
__global__ void | CudaUtils::Kernel::reduceBlockwise (T *array, T *outputData, int n) |
template<typename T , unsigned int blockSize> | |
__global__ void | CudaUtils::Kernel::blockReduction (const T *indata, T *outdata) |
template<typename T , typename U > | |
real | CudaUtils::Kernel::Launch::markDuplicatesTemp (Tree *tree, DomainList *domainList, T *array, U *entry1, U *entry2, U *entry3, integer *duplicateCounter, integer *child, int length) |
template<typename T , unsigned int blockSize> | |
real | CudaUtils::Kernel::Launch::reduceBlockwise (T *array, T *outputData, int n) |
template<typename T , unsigned int blockSize> | |
real | CudaUtils::Kernel::Launch::blockReduction (const T *indata, T *outdata) |
template<unsigned int blockSize> | |
__global__ void | Physics::Kernel::calculateAngularMomentumBlockwise (Particles *particles, real *outputData, int n) |
Calculate angular momentum for all particles (per block). More... | |
template<unsigned int blockSize> | |
__global__ void | Physics::Kernel::sumAngularMomentum (const real *indata, real *outdata) |
Calculate angular momentum: sum over blocks. More... | |
__global__ void | Physics::Kernel::kineticEnergy (Particles *particles, int n) |
Calculate kinetic energy. More... | |
template<unsigned int blockSize> | |
real | Physics::Kernel::Launch::calculateAngularMomentumBlockwise (Particles *particles, real *outputData, int n) |
Wrapper for: Physics::Kernel::calculateAngularMomentumBlockwise(). More... | |
template<unsigned int blockSize> | |
real | Physics::Kernel::Launch::sumAngularMomentum (const real *indata, real *outdata) |
Wrapper for: Physics::Kernel::sumAngularMomentum(). More... | |
real | Physics::Kernel::Launch::kineticEnergy (Particles *particles, int n) |
Wrapper for: Physics::Kernel::kineticEnergy(). More... | |
Classes and Kernels handling subdomains that distribute the workload among the MPI processes.
Definition in file subdomain.cuh.
#define MILUPHPC_DOMAIN_CUH |
Definition at line 11 of file subdomain.cuh.