MPI: insert MPI engine into main engines inheritance scheme

new inheritance scheme:
[..] -> SSE_Compressed -> MPI -> Multithreading -> [..]
This commit is contained in:
Thorsten Liebig 2011-02-16 15:27:56 +01:00
parent b395546483
commit 8d2d645a26
4 changed files with 36 additions and 10 deletions

View File

@ -44,7 +44,7 @@ Engine_Multithread* Engine_Multithread::New(const Operator_Multithread* op, unsi
return e;
}
Engine_Multithread::Engine_Multithread(const Operator_Multithread* op) : Engine_SSE_Compressed(op)
Engine_Multithread::Engine_Multithread(const Operator_Multithread* op) : ENGINE_MULTITHREAD_BASE(op)
{
m_Op_MT = op;
m_type = SSE;
@ -84,7 +84,7 @@ void Engine_Multithread::setNumThreads( unsigned int numThreads )
void Engine_Multithread::Init()
{
m_stopThreads = true;
Engine_SSE_Compressed::Init();
ENGINE_MULTITHREAD_BASE::Init();
// initialize threads
m_stopThreads = false;
@ -144,7 +144,7 @@ void Engine_Multithread::Reset()
m_stopBarrier = 0;
}
Engine_SSE_Compressed::Reset();
ENGINE_MULTITHREAD_BASE::Reset();
}
bool Engine_Multithread::IterateTS(unsigned int iterTS)
@ -241,7 +241,6 @@ void thread::operator()()
//std::cout << "thread::operator() Parameters: " << m_start << " " << m_stop << std::endl;
//DBG().cout() << "Thread " << m_threadID << " (" << boost::this_thread::get_id() << ") started." << endl;
while (!m_enginePtr->m_stopThreads)
{
// wait for start
@ -278,6 +277,12 @@ void thread::operator()()
m_enginePtr->m_IterateBarrier->wait();
// voltage excitation finished
#ifdef MPI_SUPPORT
if (m_threadID==0)
m_enginePtr->SendReceiveVoltages();
m_enginePtr->m_IterateBarrier->wait();
#endif
// record time
DEBUG_TIME( m_enginePtr->m_timer_list[boost::this_thread::get_id()].push_back( timer1.elapsed() ); )
@ -305,6 +310,12 @@ void thread::operator()()
m_enginePtr->m_IterateBarrier->wait();
// current excitation finished
#ifdef MPI_SUPPORT
if (m_threadID==0)
m_enginePtr->SendReceiveCurrents();
m_enginePtr->m_IterateBarrier->wait();
#endif
if (m_threadID == 0)
++m_enginePtr->numTS; // only the first thread increments numTS
}

View File

@ -32,6 +32,14 @@
#include <sys/time.h>
#ifdef MPI_SUPPORT
#define ENGINE_MULTITHREAD_BASE Engine_MPI
#include "engine_mpi.h"
#else
#define ENGINE_MULTITHREAD_BASE Engine_SSE_Compressed
#endif
class Engine_Multithread;
namespace NS_Engine_Multithread
@ -69,7 +77,7 @@ protected:
} // namespace
class Engine_Multithread : public Engine_SSE_Compressed
class Engine_Multithread : public ENGINE_MULTITHREAD_BASE
{
friend class NS_Engine_Multithread::thread;
friend class Engine_CylinderMultiGrid;

View File

@ -44,7 +44,7 @@ Engine* Operator_Multithread::CreateEngine() const
return e;
}
Operator_Multithread::Operator_Multithread() : Operator_SSE_Compressed()
Operator_Multithread::Operator_Multithread() : OPERATOR_MULTITHREAD_BASE()
{
m_CalcEC_Start=NULL;
m_CalcEC_Stop=NULL;
@ -55,7 +55,7 @@ Operator_Multithread::Operator_Multithread() : Operator_SSE_Compressed()
void Operator_Multithread::Init()
{
Operator_SSE_Compressed::Init();
OPERATOR_MULTITHREAD_BASE::Init();
m_CalcEC_Start=NULL;
m_CalcEC_Stop=NULL;
@ -82,7 +82,7 @@ void Operator_Multithread::Delete()
void Operator_Multithread::Reset()
{
Delete();
Operator_SSE_Compressed::Reset();
OPERATOR_MULTITHREAD_BASE::Reset();
}
void Operator_Multithread::CalcStartStopLines(unsigned int &numThreads, vector<unsigned int> &start, vector<unsigned int> &stop) const
@ -132,7 +132,7 @@ int Operator_Multithread::CalcECOperator( DebugFlags debugFlags )
m_thread_group.add_thread( t );
}
return Operator_SSE_Compressed::CalcECOperator( debugFlags );
return OPERATOR_MULTITHREAD_BASE::CalcECOperator( debugFlags );
}
bool Operator_Multithread::Calc_EC()

View File

@ -22,7 +22,14 @@
#include <boost/thread.hpp>
class Operator_Multithread : public Operator_SSE_Compressed
#ifdef MPI_SUPPORT
#define OPERATOR_MULTITHREAD_BASE Operator_MPI
#include "operator_mpi.h"
#else
#define OPERATOR_MULTITHREAD_BASE Operator_SSE_Compressed
#endif
class Operator_Multithread : public OPERATOR_MULTITHREAD_BASE
{
friend class Engine_Multithread;
friend class Operator_Thread;