The base solver class. More...
#include <parallel_solver.h>
Classes | |
struct | SolverParams |
Parameters containing data from ODE. More... | |
Public Types | |
typedef CudaT * | CudaTMutablePtr |
typedef const CudaT * | CudaTPtr |
typedef PMemManager::mem_flags | MemFlags |
typedef ParamsT * | ParamsTMutablePtr |
typedef const ParamsT * | ParamsTPtr |
typedef MemManager< CudaT, PType > | PMemManager |
typedef vec4< CudaT >::Type | Vec4T |
Public Member Functions | |
virtual void | initialize () |
Overloaded initialization of the solver, including batch and reduce strategies. | |
ParallelPGSSolver (int parallelFlags=DEFAULT_FLAGS, BatchType batchType=BatchTypes::DEFAULT_BATCH_TYPE, ReduceType reduceType=ReduceTypes::DEFAULT_REDUCE_TYPE, uint numBatches=ParallelOptions::MAXBATCHES) | |
Constructs a generic parallel quickstep solver. | |
virtual void | worldSolve (SolverParams *params) |
Solves the LCP given the data from ODE. | |
virtual | ~ParallelPGSSolver () |
Destroys the parallel quickstep solver. | |
Protected Member Functions | |
bool | alignEnabled () const |
bool | asyncEnabled () const |
bool | atomicsEnabled () const |
int | bID (const int index, const int offset) const |
void | checkInit () |
int | cID (const int index, const int offset) const |
bool | compactScalarsEnabled () const |
int | getBodyStride () const |
int | getConstraintStride () const |
CopyType | getCopyType () const |
int | getDefaultAlign () const |
int | getNumBatches () const |
int | getNumBodies () const |
int | getNumConstraints () const |
int | getReduceStride () const |
bool | isEnabled (const ParallelFlag flag) const |
void | loadBatches (int *jb) |
virtual void | loadBodies () |
virtual void | loadConstants () |
virtual void | loadConstraints () |
virtual void | loadKernels () |
virtual void | loadSolution () |
bool | pinnedMemEnabled () const |
virtual void | preProcessDevice (const CudaT sorParam, const CudaT stepsize) |
bool | preprocessEnabled () const |
virtual void | preProcessHost () |
void | printConfig () |
bool | randomizeEnabled () const |
bool | reduceEnabled () const |
int | rID (const int index, const int offset) const |
void | setBodySize (int n, bool bResizeArrays=true) |
void | setBodyStride (int bodyStride) |
void | setConstraintSize (int m, bool bResizeArrays=true) |
void | setConstraintStride (int constraintStride) |
virtual void | setMemFlags (MemFlags flags) |
void | setReduceStride (int reduceStride) |
virtual void | solveAndReduce (const int offset, const int batchSize)=0 |
void | syncDeviceToODE () |
void | syncODEToDevice () |
bool | wcMemEnabled () const |
Protected Attributes | |
ParallelHDArray< CudaT, PType > | adcfm |
IntVector | batchIndices_ |
IntVector | batchRepetitionCount_ |
IntVector | batchSizes_ |
BatchStrategy * | batchStrategy_ |
BatchType | batchStrategyType_ |
bool | bInit_ |
ParallelHDArray< Vec4T, PType > | bodyFAcc |
ParallelHDArray< Vec4T, PType > | bodyFAccReduction |
ParallelHDArray< int4, PType > | bodyIDs |
int | bodyStride_ |
ParallelHDArray< Vec4T, PType > | bodyTAcc |
ParallelHDArray< Vec4T, PType > | bodyTAccReduction |
IntVector | constraintIndices_ |
int | constraintStride_ |
ParallelHDArray< int, PType > | fIDs |
ParallelHDArray< Vec4T, PType > | i0 |
ParallelHDArray< Vec4T, PType > | ij0 |
ParallelHDArray< CudaT, PType > | iMass |
ParallelHDArray< Vec4T, PType > | j0 |
ParallelHDArray< CudaT, PType > | lambda0 |
ParallelHDArray< CudaT, PType > | lohiD |
int | m_ |
int | n_ |
int | numBatches_ |
int | parallelFlags_ |
SolverParams * | parallelParams_ |
ReduceStrategy * | reduceStrategy_ |
ReduceType | reduceStrategyType_ |
int | reduceStride_ |
IntVector | reductionOffsets0_ |
IntVector | reductionOffsets1_ |
ParallelHDArray< CudaT, PType > | rhs |
The base solver class.
Definition at line 51 of file parallel_solver.h.
typedef CudaT* parallel_ode::ParallelPGSSolver< CudaT, ParamsT, PType >::CudaTMutablePtr |
Reimplemented in parallel_ode::CudaPGSSolver< CudaT, ParamsT >.
Definition at line 57 of file parallel_solver.h.
typedef const CudaT* parallel_ode::ParallelPGSSolver< CudaT, ParamsT, PType >::CudaTPtr |
Reimplemented in parallel_ode::CudaPGSSolver< CudaT, ParamsT >.
Definition at line 56 of file parallel_solver.h.
typedef PMemManager::mem_flags parallel_ode::ParallelPGSSolver< CudaT, ParamsT, PType >::MemFlags |
Reimplemented in parallel_ode::CudaPGSSolver< CudaT, ParamsT >.
Definition at line 61 of file parallel_solver.h.
typedef ParamsT* parallel_ode::ParallelPGSSolver< CudaT, ParamsT, PType >::ParamsTMutablePtr |
Definition at line 59 of file parallel_solver.h.
typedef const ParamsT* parallel_ode::ParallelPGSSolver< CudaT, ParamsT, PType >::ParamsTPtr |
Definition at line 58 of file parallel_solver.h.
typedef MemManager<CudaT,PType> parallel_ode::ParallelPGSSolver< CudaT, ParamsT, PType >::PMemManager |
Reimplemented in parallel_ode::CudaPGSSolver< CudaT, ParamsT >.
Definition at line 60 of file parallel_solver.h.
typedef vec4<CudaT>::Type parallel_ode::ParallelPGSSolver< CudaT, ParamsT, PType >::Vec4T |
Reimplemented in parallel_ode::OpenCLPGSSolver< T >, parallel_ode::OpenMPPGSSolver< T >, and parallel_ode::CudaPGSSolver< CudaT, ParamsT >.
Definition at line 54 of file parallel_solver.h.
parallel_ode::ParallelPGSSolver< CudaT, ParamsT, PType >::ParallelPGSSolver | ( | int | parallelFlags = DEFAULT_FLAGS , |
BatchType | batchType = BatchTypes::DEFAULT_BATCH_TYPE , |
||
ReduceType | reduceType = ReduceTypes::DEFAULT_REDUCE_TYPE , |
||
uint | numBatches = ParallelOptions::MAXBATCHES |
||
) | [inline] |
Constructs a generic parallel quickstep solver.
parallelFlags | Flags controller various parallel functionality |
batchType | The type of batch strategy to be used |
reduceType | The Type of reduction to be used |
numBatches | The maximum number of batches to be used, if any |
Definition at line 71 of file parallel_solver.h.
virtual parallel_ode::ParallelPGSSolver< CudaT, ParamsT, PType >::~ParallelPGSSolver | ( | ) | [inline, virtual] |
Destroys the parallel quickstep solver.
Definition at line 96 of file parallel_solver.h.
bool parallel_ode::ParallelPGSSolver< CudaT, ParamsT, PType >::alignEnabled | ( | ) | const [inline, protected] |
Definition at line 162 of file parallel_solver.h.
bool parallel_ode::ParallelPGSSolver< CudaT, ParamsT, PType >::asyncEnabled | ( | ) | const [inline, protected] |
Definition at line 159 of file parallel_solver.h.
bool parallel_ode::ParallelPGSSolver< CudaT, ParamsT, PType >::atomicsEnabled | ( | ) | const [inline, protected] |
Definition at line 161 of file parallel_solver.h.
int parallel_ode::ParallelPGSSolver< CudaT, ParamsT, PType >::bID | ( | const int | index, |
const int | offset | ||
) | const [inline, protected] |
Definition at line 154 of file parallel_solver.h.
void parallel_ode::ParallelPGSSolver< CudaT, ParamsT, PType >::checkInit | ( | ) | [inline, protected] |
Definition at line 140 of file parallel_solver.h.
int parallel_ode::ParallelPGSSolver< CudaT, ParamsT, PType >::cID | ( | const int | index, |
const int | offset | ||
) | const [inline, protected] |
Definition at line 155 of file parallel_solver.h.
bool parallel_ode::ParallelPGSSolver< CudaT, ParamsT, PType >::compactScalarsEnabled | ( | ) | const [inline, protected] |
Definition at line 166 of file parallel_solver.h.
int parallel_ode::ParallelPGSSolver< CudaT, ParamsT, PType >::getBodyStride | ( | ) | const [inline, protected] |
Definition at line 147 of file parallel_solver.h.
int parallel_ode::ParallelPGSSolver< CudaT, ParamsT, PType >::getConstraintStride | ( | ) | const [inline, protected] |
Definition at line 149 of file parallel_solver.h.
CopyType parallel_ode::ParallelPGSSolver< CudaT, ParamsT, PType >::getCopyType | ( | ) | const [inline, protected] |
Definition at line 152 of file parallel_solver.h.
int parallel_ode::ParallelPGSSolver< CudaT, ParamsT, PType >::getDefaultAlign | ( | ) | const [inline, protected] |
Definition at line 151 of file parallel_solver.h.
int parallel_ode::ParallelPGSSolver< CudaT, ParamsT, PType >::getNumBatches | ( | ) | const [inline, protected] |
Definition at line 145 of file parallel_solver.h.
int parallel_ode::ParallelPGSSolver< CudaT, ParamsT, PType >::getNumBodies | ( | ) | const [inline, protected] |
Definition at line 146 of file parallel_solver.h.
int parallel_ode::ParallelPGSSolver< CudaT, ParamsT, PType >::getNumConstraints | ( | ) | const [inline, protected] |
Definition at line 148 of file parallel_solver.h.
int parallel_ode::ParallelPGSSolver< CudaT, ParamsT, PType >::getReduceStride | ( | ) | const [inline, protected] |
Definition at line 150 of file parallel_solver.h.
void parallel_ode::ParallelPGSSolver< CudaT, ParamsT, PType >::initialize | ( | ) | [virtual] |
Overloaded initialization of the solver, including batch and reduce strategies.
Reimplemented in parallel_ode::CudaPGSSolver< CudaT, ParamsT >, and parallel_ode::OpenCLPGSSolver< T >.
Definition at line 24 of file parallel_solver.cpp.
bool parallel_ode::ParallelPGSSolver< CudaT, ParamsT, PType >::isEnabled | ( | const ParallelFlag | flag | ) | const [inline, protected] |
Definition at line 168 of file parallel_solver.h.
void parallel_ode::ParallelPGSSolver< CudaT, ParamsT, PType >::loadBatches | ( | int * | jb | ) | [protected] |
Definition at line 159 of file parallel_solver.cpp.
void parallel_ode::ParallelPGSSolver< CudaT, ParamsT, PType >::loadBodies | ( | ) | [protected, virtual] |
Definition at line 176 of file parallel_solver.cpp.
void parallel_ode::ParallelPGSSolver< CudaT, ParamsT, PType >::loadConstants | ( | ) | [protected, virtual] |
Definition at line 291 of file parallel_solver.cpp.
void parallel_ode::ParallelPGSSolver< CudaT, ParamsT, PType >::loadConstraints | ( | ) | [protected, virtual] |
Reimplemented in parallel_ode::CudaPGSSolver< CudaT, ParamsT >, parallel_ode::OpenCLPGSSolver< T >, and parallel_ode::OpenMPPGSSolver< T >.
Definition at line 213 of file parallel_solver.cpp.
void parallel_ode::ParallelPGSSolver< CudaT, ParamsT, PType >::loadKernels | ( | ) | [protected, virtual] |
Reimplemented in parallel_ode::OpenCLPGSSolver< T >.
Definition at line 297 of file parallel_solver.cpp.
void parallel_ode::ParallelPGSSolver< CudaT, ParamsT, PType >::loadSolution | ( | ) | [protected, virtual] |
Definition at line 303 of file parallel_solver.cpp.
bool parallel_ode::ParallelPGSSolver< CudaT, ParamsT, PType >::pinnedMemEnabled | ( | ) | const [inline, protected] |
Definition at line 163 of file parallel_solver.h.
void parallel_ode::ParallelPGSSolver< CudaT, ParamsT, PType >::preProcessDevice | ( | const CudaT | sorParam, |
const CudaT | stepsize | ||
) | [protected, virtual] |
Reimplemented in parallel_ode::CudaPGSSolver< CudaT, ParamsT >.
Definition at line 111 of file parallel_solver.cpp.
bool parallel_ode::ParallelPGSSolver< CudaT, ParamsT, PType >::preprocessEnabled | ( | ) | const [inline, protected] |
Definition at line 158 of file parallel_solver.h.
void parallel_ode::ParallelPGSSolver< CudaT, ParamsT, PType >::preProcessHost | ( | ) | [protected, virtual] |
Definition at line 78 of file parallel_solver.cpp.
void parallel_ode::ParallelPGSSolver< CudaT, ParamsT, PType >::printConfig | ( | ) | [protected] |
Definition at line 417 of file parallel_solver.cpp.
bool parallel_ode::ParallelPGSSolver< CudaT, ParamsT, PType >::randomizeEnabled | ( | ) | const [inline, protected] |
Definition at line 160 of file parallel_solver.h.
bool parallel_ode::ParallelPGSSolver< CudaT, ParamsT, PType >::reduceEnabled | ( | ) | const [inline, protected] |
Definition at line 165 of file parallel_solver.h.
int parallel_ode::ParallelPGSSolver< CudaT, ParamsT, PType >::rID | ( | const int | index, |
const int | offset | ||
) | const [inline, protected] |
Definition at line 156 of file parallel_solver.h.
void parallel_ode::ParallelPGSSolver< CudaT, ParamsT, PType >::setBodySize | ( | int | n, |
bool | bResizeArrays = true |
||
) | [protected] |
Definition at line 336 of file parallel_solver.cpp.
void parallel_ode::ParallelPGSSolver< CudaT, ParamsT, PType >::setBodyStride | ( | int | bodyStride | ) | [inline, protected] |
Definition at line 141 of file parallel_solver.h.
void parallel_ode::ParallelPGSSolver< CudaT, ParamsT, PType >::setConstraintSize | ( | int | m, |
bool | bResizeArrays = true |
||
) | [protected] |
Definition at line 363 of file parallel_solver.cpp.
void parallel_ode::ParallelPGSSolver< CudaT, ParamsT, PType >::setConstraintStride | ( | int | constraintStride | ) | [inline, protected] |
Definition at line 142 of file parallel_solver.h.
void parallel_ode::ParallelPGSSolver< CudaT, ParamsT, PType >::setMemFlags | ( | MemFlags | flags | ) | [protected, virtual] |
Definition at line 398 of file parallel_solver.cpp.
void parallel_ode::ParallelPGSSolver< CudaT, ParamsT, PType >::setReduceStride | ( | int | reduceStride | ) | [inline, protected] |
Definition at line 143 of file parallel_solver.h.
virtual void parallel_ode::ParallelPGSSolver< CudaT, ParamsT, PType >::solveAndReduce | ( | const int | offset, |
const int | batchSize | ||
) | [protected, pure virtual] |
void parallel_ode::ParallelPGSSolver< CudaT, ParamsT, PType >::syncDeviceToODE | ( | ) | [protected] |
Definition at line 142 of file parallel_solver.cpp.
void parallel_ode::ParallelPGSSolver< CudaT, ParamsT, PType >::syncODEToDevice | ( | ) | [protected] |
Definition at line 117 of file parallel_solver.cpp.
bool parallel_ode::ParallelPGSSolver< CudaT, ParamsT, PType >::wcMemEnabled | ( | ) | const [inline, protected] |
Definition at line 164 of file parallel_solver.h.
void parallel_ode::ParallelPGSSolver< CudaT, ParamsT, PType >::worldSolve | ( | SolverParams * | params | ) | [virtual] |
Solves the LCP given the data from ODE.
params | Containts all pointers to data from ODE data structures necessary for the solve |
Definition at line 38 of file parallel_solver.cpp.
ParallelHDArray<CudaT,PType> parallel_ode::ParallelPGSSolver< CudaT, ParamsT, PType >::adcfm [protected] |
Host/Device array containing the computd Adcfm
Definition at line 205 of file parallel_solver.h.
IntVector parallel_ode::ParallelPGSSolver< CudaT, ParamsT, PType >::batchIndices_ [protected] |
Per Batch: The starting index of each batch in the global constraint array
Definition at line 186 of file parallel_solver.h.
IntVector parallel_ode::ParallelPGSSolver< CudaT, ParamsT, PType >::batchRepetitionCount_ [protected] |
Per Batch: The maximum number of times a body is repeated for each batch
Definition at line 185 of file parallel_solver.h.
IntVector parallel_ode::ParallelPGSSolver< CudaT, ParamsT, PType >::batchSizes_ [protected] |
Per Batch: The size of each batch
Definition at line 187 of file parallel_solver.h.
BatchStrategy* parallel_ode::ParallelPGSSolver< CudaT, ParamsT, PType >::batchStrategy_ [protected] |
The actual strategy type implementation
Definition at line 178 of file parallel_solver.h.
BatchType parallel_ode::ParallelPGSSolver< CudaT, ParamsT, PType >::batchStrategyType_ [protected] |
The type of batching to use
Definition at line 177 of file parallel_solver.h.
bool parallel_ode::ParallelPGSSolver< CudaT, ParamsT, PType >::bInit_ [protected] |
Flag indiciating whether the solver has been explicitly initialized
Definition at line 200 of file parallel_solver.h.
ParallelHDArray<Vec4T,PType> parallel_ode::ParallelPGSSolver< CudaT, ParamsT, PType >::bodyFAcc [protected] |
Host/Device array containing the final body linear accelaration
Definition at line 214 of file parallel_solver.h.
ParallelHDArray<Vec4T,PType> parallel_ode::ParallelPGSSolver< CudaT, ParamsT, PType >::bodyFAccReduction [protected] |
Host/Device array containing the reduction buffers for linear accelaration
Definition at line 216 of file parallel_solver.h.
ParallelHDArray<int4,PType> parallel_ode::ParallelPGSSolver< CudaT, ParamsT, PType >::bodyIDs [protected] |
Host/Device array containing both body IDs and body reduction IDs
Definition at line 208 of file parallel_solver.h.
int parallel_ode::ParallelPGSSolver< CudaT, ParamsT, PType >::bodyStride_ [protected] |
The aligned number of bodies
Definition at line 196 of file parallel_solver.h.
ParallelHDArray<Vec4T,PType> parallel_ode::ParallelPGSSolver< CudaT, ParamsT, PType >::bodyTAcc [protected] |
Host/Device array containing the final body rotational accelaration
Definition at line 215 of file parallel_solver.h.
ParallelHDArray<Vec4T,PType> parallel_ode::ParallelPGSSolver< CudaT, ParamsT, PType >::bodyTAccReduction [protected] |
Host/Device array containing the reduction buffers for rotation acceleration
Definition at line 217 of file parallel_solver.h.
IntVector parallel_ode::ParallelPGSSolver< CudaT, ParamsT, PType >::constraintIndices_ [protected] |
Per Constraint: Contains the global reorded constraint indices
Definition at line 182 of file parallel_solver.h.
int parallel_ode::ParallelPGSSolver< CudaT, ParamsT, PType >::constraintStride_ [protected] |
The aligned number of constraints
Definition at line 194 of file parallel_solver.h.
ParallelHDArray<int,PType> parallel_ode::ParallelPGSSolver< CudaT, ParamsT, PType >::fIDs [protected] |
Host/Device array containg the force IDs
Definition at line 209 of file parallel_solver.h.
ParallelHDArray<Vec4T,PType> parallel_ode::ParallelPGSSolver< CudaT, ParamsT, PType >::i0 [protected] |
Host/Device array containing the inertia, n * 3
Definition at line 212 of file parallel_solver.h.
ParallelHDArray<Vec4T,PType> parallel_ode::ParallelPGSSolver< CudaT, ParamsT, PType >::ij0 [protected] |
Host/Device array containg data for ij, m * 4
Definition at line 203 of file parallel_solver.h.
ParallelHDArray<CudaT,PType> parallel_ode::ParallelPGSSolver< CudaT, ParamsT, PType >::iMass [protected] |
Host/Device array containing the inverse of the body mass
Definition at line 211 of file parallel_solver.h.
ParallelHDArray<Vec4T,PType> parallel_ode::ParallelPGSSolver< CudaT, ParamsT, PType >::j0 [protected] |
Host/Device array containg data for j, m * 4
Definition at line 202 of file parallel_solver.h.
ParallelHDArray<CudaT,PType> parallel_ode::ParallelPGSSolver< CudaT, ParamsT, PType >::lambda0 [protected] |
Host/Device array containing the solution
Definition at line 204 of file parallel_solver.h.
ParallelHDArray<CudaT,PType> parallel_ode::ParallelPGSSolver< CudaT, ParamsT, PType >::lohiD [protected] |
Host/Device array containg both lo/hi constraints,
Definition at line 207 of file parallel_solver.h.
int parallel_ode::ParallelPGSSolver< CudaT, ParamsT, PType >::m_ [protected] |
The number of constraints
Definition at line 193 of file parallel_solver.h.
int parallel_ode::ParallelPGSSolver< CudaT, ParamsT, PType >::n_ [protected] |
The number of bodies
Definition at line 195 of file parallel_solver.h.
int parallel_ode::ParallelPGSSolver< CudaT, ParamsT, PType >::numBatches_ [protected] |
The (max) number of batches
Definition at line 191 of file parallel_solver.h.
int parallel_ode::ParallelPGSSolver< CudaT, ParamsT, PType >::parallelFlags_ [protected] |
Flags that govern the behavior of the solver, e.g. atomics,alignment, etc...
Definition at line 174 of file parallel_solver.h.
SolverParams* parallel_ode::ParallelPGSSolver< CudaT, ParamsT, PType >::parallelParams_ [protected] |
Parameter struct that contains the data from ODE
Definition at line 175 of file parallel_solver.h.
ReduceStrategy* parallel_ode::ParallelPGSSolver< CudaT, ParamsT, PType >::reduceStrategy_ [protected] |
The actual reduction type implemention
Definition at line 180 of file parallel_solver.h.
ReduceType parallel_ode::ParallelPGSSolver< CudaT, ParamsT, PType >::reduceStrategyType_ [protected] |
The type of reduction to use
Definition at line 179 of file parallel_solver.h.
int parallel_ode::ParallelPGSSolver< CudaT, ParamsT, PType >::reduceStride_ [protected] |
The aligned number of reduction entries
Definition at line 198 of file parallel_solver.h.
IntVector parallel_ode::ParallelPGSSolver< CudaT, ParamsT, PType >::reductionOffsets0_ [protected] |
Per Constraint: Specifies how many times a body0 is repeated in a given batch
Definition at line 183 of file parallel_solver.h.
IntVector parallel_ode::ParallelPGSSolver< CudaT, ParamsT, PType >::reductionOffsets1_ [protected] |
Per Constraint: Specifies how many times a body1 is repeated in a given batch
Definition at line 184 of file parallel_solver.h.
ParallelHDArray<CudaT,PType> parallel_ode::ParallelPGSSolver< CudaT, ParamsT, PType >::rhs [protected] |
Host/Device array containing the rhs
Definition at line 206 of file parallel_solver.h.