00001 #ifndef OPENMP_SOLVER_H 00002 #define OPENMP_SOLVER_H 00003 00004 #include "parallel_solver.h" 00005 00006 namespace parallel_ode 00007 { 00008 00009 const int DEFAULT_OPENMP_FLAGS = 00010 ParallelFlags::PARALLEL_ALIGN 00011 | ParallelFlags::PARALLEL_RANDOMIZE 00012 | ParallelFlags::PARALLEL_ATOMICS; 00013 00014 template<typename T> 00015 class OpenMPPGSSolver : public ParallelPGSSolver<T, T, ParallelType::OpenMP> 00016 { 00017 public: 00018 typedef typename vec4<T>::Type Vec4T; 00019 00028 OpenMPPGSSolver( int parallelFlags = DEFAULT_OPENMP_FLAGS, 00029 BatchType batchType = BatchTypes::DEFAULT_BATCH_TYPE, 00030 ReduceType reduceType = ReduceTypes::DEFAULT_REDUCE_TYPE, 00031 uint numBatches = ParallelOptions::MAXBATCHES ) 00032 00033 : ParallelPGSSolver<T, T, ParallelTypes::OpenMP>( parallelFlags, batchType, reduceType, numBatches ) { 00034 00035 } 00036 00037 virtual ~OpenMPPGSSolver( ) { 00038 00039 } 00040 00041 protected: 00042 00043 virtual void solveAndReduce( const int offset, const int batchSize ); 00044 00045 virtual void loadConstraints( ); 00046 }; 00047 00048 } 00049 00050 #endif