milupHPC documentation
  • include
  • gravity
gravity.cuh
Go to the documentation of this file.
1
11#ifndef MILUPHPC_GRAVITY_CUH
12#define MILUPHPC_GRAVITY_CUH
13
14#include "../subdomain_key_tree/tree.cuh"
15#include "../subdomain_key_tree/subdomain.cuh"
16#include "../parameter.h"
17#include "../helper.cuh"
18#include <boost/mpi.hpp>
19#include <assert.h>
20#include <cmath>
21
23namespace Gravity {
24
26 namespace Kernel {
27
50 __global__ void collectSendIndices(Tree *tree, Particles *particles, integer *sendIndices,
51 integer *particles2Send, integer *pseudoParticles2Send,
52 integer *pseudoParticlesLevel,
53 integer *particlesCount, integer *pseudoParticlesCount,
54 integer n, integer length, Curve::Type curveType);
55
68 __global__ void testSendIndices(SubDomainKeyTree *subDomainKeyTree, Tree *tree, Particles *particles,
69 integer *sendIndices, integer *markedSendIndices,
70 integer *levels, Curve::Type curveType,
71 integer length);
72
99 __global__ void computeForces_v1(Tree *tree, Particles *particles, real radius, integer n, integer m,
100 SubDomainKeyTree *subDomainKeyTree, real theta, real smoothing,
101 bool potentialEnergy=false);
102
118 __global__ void computeForces_v1_1(Tree *tree, Particles *particles, real radius, integer n, integer m,
119 SubDomainKeyTree *subDomainKeyTree, real theta, real smoothing,
120 bool potentialEnergy=false);
121
137 __global__ void computeForces_v1_2(Tree *tree, Particles *particles, real radius, integer n, integer m,
138 SubDomainKeyTree *subDomainKeyTree, real theta, real smoothing,
139 bool potentialEnergy=false);
140
169 __global__ void computeForces_v2(Tree *tree, Particles *particles, real radius, integer n, integer m,
170 integer blockSize, integer warp, integer stackSize,
171 SubDomainKeyTree *subDomainKeyTree, real theta,
172 real smoothing, bool potentialEnergy=false);
173
191 __global__ void computeForces_v2_1(Tree *tree, Particles *particles, integer n, integer m, integer blockSize,
192 integer warp, integer stackSize, SubDomainKeyTree *subDomainKeyTree,
193 real theta, real smoothing, bool potentialEnergy=false);
194
195 //__global__ void computeForces_v3(Tree *tree, Particles *particles, real radius, integer n, integer m,
196 // integer blockSize, integer warp, integer stackSize,
197 // SubDomainKeyTree *subDomainKeyTree, real theta,
198 // real smoothing, bool potentialEnergy=false);
199
218 __global__ void intermediateSymbolicForce(SubDomainKeyTree *subDomainKeyTree, Tree *tree, Particles *particles,
219 DomainList *domainList, integer *sendIndices, real diam, real theta_,
220 integer n, integer m, integer relevantIndex, integer level,
221 Curve::Type curveType);
222
223 // Level-wise symbolicForce() to avoid race condition
252 __global__ void symbolicForce(SubDomainKeyTree *subDomainKeyTree, Tree *tree, Particles *particles,
253 DomainList *domainList, integer *sendIndices, real diam, real theta_,
254 integer n, integer m, integer relevantIndex, integer level,
255 Curve::Type curveType);
256
257 __global__ void symbolicForce_test(SubDomainKeyTree *subDomainKeyTree, Tree *tree, Particles *particles,
258 DomainList *domainList, integer *sendIndices, real diam, real theta_,
259 integer n, integer m, integer relevantIndex, integer level,
260 Curve::Type curveType);
261
262 __global__ void symbolicForce_test2(SubDomainKeyTree *subDomainKeyTree, Tree *tree, Particles *particles,
263 DomainList *domainList, integer *sendIndices, real diam, real theta_,
264 integer n, integer m, integer relevantProc, integer relevantIndicesCounter,
265 Curve::Type curveType);
266
267 __global__ void symbolicForce_test3(SubDomainKeyTree *subDomainKeyTree, Tree *tree, Particles *particles,
268 DomainList *domainList, integer *sendIndices, real diam, real theta_,
269 integer n, integer m, integer relevantProc, integer relevantIndicesCounter,
270 Curve::Type curveType);
271
272 __global__ void symbolicForce_test4(SubDomainKeyTree *subDomainKeyTree, Tree *tree, Particles *particles,
273 DomainList *domainList, integer *sendIndices, real diam, real theta_,
274 integer n, integer m, integer relevantProc, integer relevantIndicesCounter,
275 Curve::Type curveType);
276
290 __global__ void compTheta(SubDomainKeyTree *subDomainKeyTree, Tree *tree, Particles *particles,
291 DomainList *domainList, Curve::Type curveType=Curve::lebesgue);
292
293 // Version of inserting received pseudo particles, looping over levels within one kernel
294 // problem that __syncthreads() corresponds to blocklevel synchronization!
295 /*__global__ void insertReceivedPseudoParticles(SubDomainKeyTree *subDomainKeyTree, Tree *tree, Particles *particles,
296 integer *levels, int n, int m);*/
297
315 __global__ void insertReceivedPseudoParticles(SubDomainKeyTree *subDomainKeyTree, Tree *tree, Particles *particles,
316 integer *levels, int level, int n, int m);
317
332 __global__ void insertReceivedParticles(SubDomainKeyTree *subDomainKeyTree, Tree *tree, Particles *particles,
333 DomainList *domainList, DomainList *lowestDomainList, int n, int m);
334
335
337 namespace Launch {
338
344 real collectSendIndices(Tree *tree, Particles *particles, integer *sendIndices,
345 integer *particles2Send, integer *pseudoParticles2Send,
346 integer *pseudoParticlesLevel,
347 integer *particlesCount, integer *pseudoParticlesCount,
348 integer n, integer length, Curve::Type curveType = Curve::lebesgue);
349
350 real collectSendIndices_test4(Tree *tree, Particles *particles, integer *sendIndices,
351 integer *particles2Send, integer *pseudoParticles2Send,
352 integer *pseudoParticlesLevel,
353 integer *particlesCount, integer *pseudoParticlesCount,
354 integer numParticlesLocal, integer numParticles,
355 integer treeIndex, int currentProc,
356 Curve::Type curveType = Curve::lebesgue);
357
363 real testSendIndices(SubDomainKeyTree *subDomainKeyTree, Tree *tree, Particles *particles,
364 integer *sendIndices, integer *markedSendIndices,
365 integer *levels, Curve::Type curveType,
366 integer length);
367
373 real computeForces_v1(Tree *tree, Particles *particles, real radius, integer n, integer m,
374 SubDomainKeyTree *subDomainKeyTree, real theta, real smoothing,
375 bool potentialEnergy=false);
376
384 real computeForces_v1_1(Tree *tree, Particles *particles, real radius, integer n, integer m,
385 SubDomainKeyTree *subDomainKeyTree, real theta, real smoothing,
386 bool potentialEnergy=false);
387
393 real computeForces_v1_2(Tree *tree, Particles *particles, real radius, integer n, integer m,
394 SubDomainKeyTree *subDomainKeyTree, real theta, real smoothing,
395 bool potentialEnergy=false);
396
402 real computeForces_v2(Tree *tree, Particles *particles, real radius, integer n, integer m,
403 integer blockSize, integer warp, integer stackSize,
404 SubDomainKeyTree *subDomainKeyTree, real theta,
405 real smoothing, bool potentialEnergy=false);
406
412 real computeForces_v2_1(Tree *tree, Particles *particles, integer n, integer m,
413 integer blockSize, integer warp, integer stackSize,
414 SubDomainKeyTree *subDomainKeyTree, real theta,
415 real smoothing, bool potentialEnergy=false);
416
417
418 real computeForces_v3(Tree *tree, Particles *particles, real radius, integer numParticles, integer m,
419 integer blockSize, integer warp, integer stackSize,
420 SubDomainKeyTree *subDomainKeyTree, real theta,
421 real smoothing, bool potentialEnergy=false);
422
428 real intermediateSymbolicForce(SubDomainKeyTree *subDomainKeyTree, Tree *tree, Particles *particles,
429 DomainList *domainList, integer *sendIndices, real diam, real theta_,
430 integer n, integer m, integer relevantIndex, integer level,
431 Curve::Type curveType);
432
438 real symbolicForce(SubDomainKeyTree *subDomainKeyTree, Tree *tree, Particles *particles,
439 DomainList *domainList, integer *sendIndices, real diam, real theta_,
440 integer n, integer m, integer relevantIndex, integer level,
441 Curve::Type curveType);
442
443 real symbolicForce_test(SubDomainKeyTree *subDomainKeyTree, Tree *tree, Particles *particles,
444 DomainList *domainList, integer *sendIndices, real diam, real theta_,
445 integer n, integer m, integer relevantIndex, integer level,
446 Curve::Type curveType);
447
448 real symbolicForce_test2(SubDomainKeyTree *subDomainKeyTree, Tree *tree, Particles *particles,
449 DomainList *domainList, integer *sendIndices, real diam, real theta_,
450 integer n, integer m, integer relevantProc, integer relevantIndicesCounter,
451 Curve::Type curveType);
452
453 real symbolicForce_test3(SubDomainKeyTree *subDomainKeyTree, Tree *tree, Particles *particles,
454 DomainList *domainList, integer *sendIndices, real diam, real theta_,
455 integer n, integer m, integer relevantProc, integer relevantIndicesCounter,
456 Curve::Type curveType);
457
458 real symbolicForce_test4(SubDomainKeyTree *subDomainKeyTree, Tree *tree, Particles *particles,
459 DomainList *domainList, integer *sendIndices, real diam, real theta_,
460 integer n, integer m, integer relevantProc, integer relevantIndicesCounter,
461 Curve::Type curveType);
462
468 real compTheta(SubDomainKeyTree *subDomainKeyTree, Tree *tree, Particles *particles,
469 DomainList *domainList, Curve::Type curveType=Curve::lebesgue);
470
476 real insertReceivedPseudoParticles(SubDomainKeyTree *subDomainKeyTree, Tree *tree, Particles *particles,
477 integer *levels, int level, int n, int m);
478
484 real insertReceivedParticles(SubDomainKeyTree *subDomainKeyTree, Tree *tree, Particles *particles,
485 DomainList *domainList, DomainList *lowestDomainList, int n, int m);
486
487 }
488 }
489}
490
491
492#endif //MILUPHPC_GRAVITY_CUH
DomainList
Definition: subdomain.cuh:494
Particles
Particle(s) class based on SoA (Structur of Arrays).
Definition: particles.cuh:50
SubDomainKeyTree
SubDomainKeyTree class handling rank, number of processes and ranges.
Definition: subdomain.cuh:62
Tree
Tree class.
Definition: tree.cuh:140
DomainListNS::Kernel::lowestDomainList
__global__ void lowestDomainList(SubDomainKeyTree *subDomainKeyTree, Tree *tree, Particles *particles, DomainList *domainList, DomainList *lowestDomainList, integer n, integer m)
Kernel to create the lowest domain list.
Definition: subdomain.cu:2039
Gravity::Kernel::collectSendIndices_test4
__global__ void collectSendIndices_test4(Tree *tree, Particles *particles, integer *sendIndices, integer *particles2Send, integer *pseudoParticles2Send, integer *pseudoParticlesLevel, integer *particlesCount, integer *pseudoParticlesCount, integer numParticlesLocal, integer numParticles, integer treeIndex, int currentProc, Curve::Type curveType)
Definition: gravity.cu:53
Gravity::Kernel::testSendIndices
__global__ void testSendIndices(SubDomainKeyTree *subDomainKeyTree, Tree *tree, Particles *particles, integer *sendIndices, integer *markedSendIndices, integer *levels, Curve::Type curveType, integer length)
Test the send indices.
Definition: gravity.cu:103
Gravity::Kernel::intermediateSymbolicForce
__global__ void intermediateSymbolicForce(SubDomainKeyTree *subDomainKeyTree, Tree *tree, Particles *particles, DomainList *domainList, integer *sendIndices, real diam, real theta_, integer n, integer m, integer relevantIndex, integer level, Curve::Type curveType)
Definition: gravity.cu:1374
Gravity::Kernel::computeForces_v1_2
__global__ void computeForces_v1_2(Tree *tree, Particles *particles, real radius, integer n, integer m, SubDomainKeyTree *subDomainKeyTree, real theta, real smoothing, bool potentialEnergy)
Definition: gravity.cu:550
Gravity::Kernel::symbolicForce
__global__ void symbolicForce(SubDomainKeyTree *subDomainKeyTree, Tree *tree, Particles *particles, DomainList *domainList, integer *sendIndices, real diam, real theta_, integer n, integer m, integer relevantIndex, integer level, Curve::Type curveType)
Definition: gravity.cu:1395
Gravity::Kernel::symbolicForce_test3
__global__ void symbolicForce_test3(SubDomainKeyTree *subDomainKeyTree, Tree *tree, Particles *particles, DomainList *domainList, integer *sendIndices, real diam, real theta_, integer n, integer m, integer relevantProc, integer relevantIndicesCounter, Curve::Type curveType)
Definition: gravity.cu:1916
Gravity::Kernel::computeForces_v1_1
__global__ void computeForces_v1_1(Tree *tree, Particles *particles, real radius, integer n, integer m, SubDomainKeyTree *subDomainKeyTree, real theta, real smoothing, bool potentialEnergy)
Definition: gravity.cu:398
Gravity::Kernel::collectSendIndices
__global__ void collectSendIndices(Tree *tree, Particles *particles, integer *sendIndices, integer *particles2Send, integer *pseudoParticles2Send, integer *pseudoParticlesLevel, integer *particlesCount, integer *pseudoParticlesCount, integer n, integer length, Curve::Type curveType)
Collect the send indices.
Definition: gravity.cu:8
Gravity::Kernel::symbolicForce_test
__global__ void symbolicForce_test(SubDomainKeyTree *subDomainKeyTree, Tree *tree, Particles *particles, DomainList *domainList, integer *sendIndices, real diam, real theta_, integer n, integer m, integer relevantIndex, integer level, Curve::Type curveType)
Definition: gravity.cu:1666
Gravity::Kernel::symbolicForce_test2
__global__ void symbolicForce_test2(SubDomainKeyTree *subDomainKeyTree, Tree *tree, Particles *particles, DomainList *domainList, integer *sendIndices, real diam, real theta_, integer n, integer m, integer relevantProc, integer relevantIndicesCounter, Curve::Type curveType)
Definition: gravity.cu:1801
Gravity::Kernel::insertReceivedParticles
__global__ void insertReceivedParticles(SubDomainKeyTree *subDomainKeyTree, Tree *tree, Particles *particles, DomainList *domainList, DomainList *lowestDomainList, int n, int m)
Definition: gravity.cu:2467
Gravity::Kernel::computeForces_v2
__global__ void computeForces_v2(Tree *tree, Particles *particles, real radius, integer n, integer m, integer blockSize, integer warp, integer stackSize, SubDomainKeyTree *subDomainKeyTree, real theta, real smoothing, bool potentialEnergy)
Definition: gravity.cu:726
Gravity::Kernel::insertReceivedPseudoParticles
__global__ void insertReceivedPseudoParticles(SubDomainKeyTree *subDomainKeyTree, Tree *tree, Particles *particles, integer *levels, int level, int n, int m)
Definition: gravity.cu:2243
Gravity::Kernel::computeForces_v2_1
__global__ void computeForces_v2_1(Tree *tree, Particles *particles, integer n, integer m, integer blockSize, integer warp, integer stackSize, SubDomainKeyTree *subDomainKeyTree, real theta, real smoothing, bool potentialEnergy)
Definition: gravity.cu:905
Gravity::Kernel::computeForces_v1
__global__ void computeForces_v1(Tree *tree, Particles *particles, real radius, integer n, integer m, SubDomainKeyTree *subDomainKeyTree, real theta, real smoothing, bool potentialEnergy)
Definition: gravity.cu:252
Gravity::Kernel::symbolicForce_test4
__global__ void symbolicForce_test4(SubDomainKeyTree *subDomainKeyTree, Tree *tree, Particles *particles, DomainList *domainList, integer *sendIndices, real diam, real theta_, integer n, integer m, integer relevantProc, integer relevantIndicesCounter, Curve::Type curveType)
Definition: gravity.cu:2041
Gravity::Kernel::compTheta
__global__ void compTheta(SubDomainKeyTree *subDomainKeyTree, Tree *tree, Particles *particles, DomainList *domainList, Curve::Type curveType)
Definition: gravity.cu:2180
Gravity
Gravity related kernels/functions.
Definition: gravity.cuh:23
Kernel
Definition: device_rhs.cuh:7
ProfilerIds::Time::tree
const char *const tree
Definition: h5profiler.h:57
ProfilerIds::numParticlesLocal
const char *const numParticlesLocal
Definition: h5profiler.h:30
ProfilerIds::numParticles
const char *const numParticles
Definition: h5profiler.h:29
SPH::Kernel::particles2Send
__global__ void particles2Send(SubDomainKeyTree *subDomainKeyTree, Tree *tree, Particles *particles, DomainList *domainList, DomainList *lowestDomainList, integer maxLevel, integer *toSend, integer *sendCount, integer *alreadyInserted, integer insertOffset, integer numParticlesLocal, integer numParticles, integer numNodes, real radius, Curve::Type curveType=Curve::lebesgue)
Definition: sph.cu:1575
real
double real
Definition: parameter.h:15
integer
int integer
Definition: parameter.h:17
Curve::Type
Type
Definition: parameter.h:206
Curve::lebesgue
@ lebesgue
Definition: parameter.h:207

milupHPC - include/gravity/gravity.cuh Source File
Generated on Wed Aug 31 2022 12:16:52 by Doxygen 1.9.3