Swarm-NG
1.1
|
GPU implementation of PEC2 Hermite integrator w/ adaptive time step. More...
#include <hermite_adap.hpp>
Classes | |
struct | SystemSharedData |
Date structure for system shared data. More... | |
Public Member Functions | |
hermite_adap (const config &cfg) | |
constructor for hermite_adap | |
virtual void | launch_integrator () |
Integrater implementation provided by derived instance. | |
template<class T > | |
__device__ double | calc_adaptive_time_step (T compile_time_param, SystemSharedData< T > &shared, const double acc, const double jerk) |
calculate adaptive time steps More... | |
template<class T > | |
__device__ void | kernel (T compile_time_param) |
![]() | |
integrator (const config &cfg) | |
Constructor. | |
const int & | override_system_per_block () const |
User specified value of system_per_block. More... | |
![]() | |
integrator (const config &cfg) | |
Pass on constructor. | |
virtual void | integrate () |
Interfaces function to integrate, for use by general user. More... | |
virtual void | core_integrate () |
To integrate without any bookkeeping. More... | |
virtual void | set_log_manager (log::Pmanager &l) |
Read the GPU log object from log manager and set it. | |
void | set_log (gpulog::device_log *log) |
Set the GPU log object used for loggin output. | |
gpulog::device_log * | get_device_log () |
Get the GPU log object used for logging output. | |
void | set_ensemble (defaultEnsemble &ens) |
Set the ensemble, only provide an ensemble on host. This cals automatically creates a copy of ensemble on GPU and keeps it in sync. Refer to set_ensemble(host_ens,device_ens) if you wish to manage the GPU memory allocation. | |
void | set_ensemble (defaultEnsemble &host_ens, deviceEnsemble &device_ens) |
Set two host and device ensembles, two ensembles should match. More... | |
void | upload_ensemble () |
Synchronize device ensemble with host ensemble. | |
void | download_ensemble () |
Synchronize host ensemble with device ensemble. | |
![]() | |
integrator (const config &cfg) | |
Inetgrator class should be configurable. Derived instances should also have a constructor with similar signature and pass on the config parameter. | |
virtual void | flush_log () |
Flush the host log. | |
virtual defaultEnsemble & | get_ensemble () |
Access the ensemble subject to integration. | |
virtual void | set_destination_time (const double &destination_time) |
Set the time marker to end the integration. | |
Static Public Member Functions | |
template<class T > | |
static GENERIC int | shmem_per_system (T compile_time_param) |
Shared memory size. | |
![]() | |
template<class T > | |
static GENERIC int | thread_per_system (T compile_time_param) |
Calculate number of worker threads needed for each system. More... | |
template<class T > | |
static GENERIC int | shmem_per_system (T compile_time_param) |
Helper Function: Logical amount of shared memory needed for force calculations per thread This value is calculated from number of bodies, if this is used in a kernel, the actual amount of shared memory allocated might be different. More... | |
Additional Inherited Members | |
![]() | |
static const int | _default_max_iterations = 10000000 |
Default value for maximum number of iterations. c.f. _max_iterations. | |
static const int | _default_max_attempts = 1000000 |
Default value for maximum number of attempts. c.f. _max_attempts. | |
![]() | |
int | _override_system_per_block |
Number of systems allocated in a block. Should be a multiple of SHMEM_CHUNK_SIZE for better coalescing. | |
GPU implementation of PEC2 Hermite integrator w/ adaptive time step.
Definition at line 35 of file hermite_adap.hpp.
|
inline |
calculate adaptive time steps
Put accelerations and jerks for each body and component into shared memory
calculate sum of squares of each component for each body store ratio in shared memory
Definition at line 69 of file hermite_adap.hpp.
References peyton::constants::c, swarm::gpu::bppt::thread_body_idx(), swarm::gpu::bppt::thread_component_idx(), and swarm::gpu::bppt::thread_in_system().
Referenced by swarm::gpu::bppt::hermite_adap< Monitor, Gravitation >::kernel().
|
inline |
References to Ensemble and Shared Memory
Calculate the forces
Calculate acceleration and jerk
Initial Evaluation, it can be omitted for faster computation
calcForces(thread_in_system(),b,c,pos,vel,acc0,jerk0);
Finalize the step
Definition at line 103 of file hermite_adap.hpp.
References swarm::gpu::integrator::_dens, swarm::integrator::_destination_time, swarm::gpu::integrator::_log, swarm::integrator::_max_iterations, peyton::constants::c, swarm::gpu::bppt::hermite_adap< Monitor, Gravitation >::calc_adaptive_time_step(), swarm::EnsembleBase< _CHUNK_SIZE, _NUM_BODY_ATTRIBUTES, _NUM_SYS_ATTRIBUTES >::nsys(), swarm::gpu::bppt::sysid(), swarm::gpu::bppt::system_shared_data_pointer(), swarm::gpu::bppt::thread_body_idx(), swarm::gpu::bppt::thread_component_idx(), and swarm::gpu::bppt::thread_in_system().