debugging
This commit is contained in:
parent
c9cc0cf2dc
commit
fb193ac25b
@ -18,6 +18,11 @@
|
|||||||
#include "engine_multithread.h"
|
#include "engine_multithread.h"
|
||||||
#include "tools/array_ops.h"
|
#include "tools/array_ops.h"
|
||||||
|
|
||||||
|
#include "boost/date_time/posix_time/posix_time.hpp"
|
||||||
|
#include "boost/date_time/gregorian/gregorian.hpp"
|
||||||
|
#include <iomanip>
|
||||||
|
|
||||||
|
|
||||||
//! \brief construct an Engine_Multithread instance
|
//! \brief construct an Engine_Multithread instance
|
||||||
//! it's the responsibility of the caller to free the returned pointer
|
//! it's the responsibility of the caller to free the returned pointer
|
||||||
Engine_Multithread* Engine_Multithread::createEngine(Operator* op)
|
Engine_Multithread* Engine_Multithread::createEngine(Operator* op)
|
||||||
@ -33,6 +38,22 @@ Engine_Multithread::Engine_Multithread(Operator* op) : Engine(op)
|
|||||||
|
|
||||||
Engine_Multithread::~Engine_Multithread()
|
Engine_Multithread::~Engine_Multithread()
|
||||||
{
|
{
|
||||||
|
//DEBUG
|
||||||
|
cout << "Engine_Multithread::~Engine_Multithread()" << endl;
|
||||||
|
std::map<boost::thread::id, std::vector<double> >::iterator it;
|
||||||
|
for (it=m_timer_list.begin(); it!=m_timer_list.end(); it++) {
|
||||||
|
std::cout << "*** DEBUG Thread: " << it->first << std::endl;
|
||||||
|
std::vector<double>::iterator it2;
|
||||||
|
for (it2=it->second.begin(); it2<it->second.end();) {
|
||||||
|
std::cout << "after voltage update, before barrier1: " << fixed << setprecision(6) << *(it2++) << std::endl;
|
||||||
|
std::cout << "after barrier1, before barrier2: " << fixed << setprecision(6) << *(it2++) << std::endl;
|
||||||
|
std::cout << "after barrier2, before current update: " << fixed << setprecision(6) << *(it2++) << std::endl;
|
||||||
|
std::cout << "after current update, before barrier3: " << fixed << setprecision(6) << *(it2++) << std::endl;
|
||||||
|
std::cout << "after barrier3: " << fixed << setprecision(6) << *(it2++) << std::endl;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
//DEBUG
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void Engine_Multithread::Init()
|
void Engine_Multithread::Init()
|
||||||
@ -66,7 +87,6 @@ void Engine_Multithread::Init()
|
|||||||
void Engine_Multithread::Reset()
|
void Engine_Multithread::Reset()
|
||||||
{
|
{
|
||||||
|
|
||||||
|
|
||||||
Engine::Reset();
|
Engine::Reset();
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -108,6 +128,8 @@ void thread::operator()()
|
|||||||
m_enginePtr->m_startBarrier->wait();
|
m_enginePtr->m_startBarrier->wait();
|
||||||
//cout << "Thread " << boost::this_thread::get_id() << " waiting... started." << endl;
|
//cout << "Thread " << boost::this_thread::get_id() << " waiting... started." << endl;
|
||||||
|
|
||||||
|
Timer timer1;
|
||||||
|
|
||||||
for (unsigned int iter=0;iter<m_enginePtr->m_iterTS;++iter)
|
for (unsigned int iter=0;iter<m_enginePtr->m_iterTS;++iter)
|
||||||
{
|
{
|
||||||
//voltage updates
|
//voltage updates
|
||||||
@ -136,14 +158,23 @@ void thread::operator()()
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// record time
|
||||||
|
m_enginePtr->m_timer_list[boost::this_thread::get_id()].push_back( timer1.elapsed() );
|
||||||
|
|
||||||
//cout << "Thread " << boost::this_thread::get_id() << " m_barrier1 waiting..." << endl;
|
//cout << "Thread " << boost::this_thread::get_id() << " m_barrier1 waiting..." << endl;
|
||||||
m_enginePtr->m_barrier1->wait();
|
m_enginePtr->m_barrier1->wait();
|
||||||
|
|
||||||
|
// record time
|
||||||
|
m_enginePtr->m_timer_list[boost::this_thread::get_id()].push_back( timer1.elapsed() );
|
||||||
|
|
||||||
// e-field excitation (thread thread_e_excitation)
|
// e-field excitation (thread thread_e_excitation)
|
||||||
|
|
||||||
m_enginePtr->m_barrier2->wait();
|
m_enginePtr->m_barrier2->wait();
|
||||||
// e_excitation finished
|
// e_excitation finished
|
||||||
|
|
||||||
|
// record time
|
||||||
|
m_enginePtr->m_timer_list[boost::this_thread::get_id()].push_back( timer1.elapsed() );
|
||||||
|
|
||||||
//current updates
|
//current updates
|
||||||
for (pos[0]=m_start;pos[0]<=m_stop-1;++pos[0])
|
for (pos[0]=m_start;pos[0]<=m_stop-1;++pos[0])
|
||||||
{
|
{
|
||||||
@ -167,8 +198,14 @@ void thread::operator()()
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// record time
|
||||||
|
m_enginePtr->m_timer_list[boost::this_thread::get_id()].push_back( timer1.elapsed() );
|
||||||
|
|
||||||
m_enginePtr->m_barrier3->wait();
|
m_enginePtr->m_barrier3->wait();
|
||||||
|
|
||||||
|
// record time
|
||||||
|
m_enginePtr->m_timer_list[boost::this_thread::get_id()].push_back( timer1.elapsed() );
|
||||||
|
|
||||||
//soft current excitation here (H-field excite)
|
//soft current excitation here (H-field excite)
|
||||||
|
|
||||||
++m_enginePtr->m_numTS_times_threads;
|
++m_enginePtr->m_numTS_times_threads;
|
||||||
|
@ -22,6 +22,18 @@
|
|||||||
#include "engine.h"
|
#include "engine.h"
|
||||||
|
|
||||||
#include <boost/thread.hpp>
|
#include <boost/thread.hpp>
|
||||||
|
#include <boost/fusion/include/list.hpp>
|
||||||
|
#include <boost/fusion/container/list/list_fwd.hpp>
|
||||||
|
#include <boost/fusion/include/list_fwd.hpp>
|
||||||
|
|
||||||
|
//debug
|
||||||
|
class Timer {
|
||||||
|
public:
|
||||||
|
Timer() {gettimeofday(&t1,NULL);}
|
||||||
|
double elapsed() {gettimeofday(&t2,NULL); return (t2.tv_sec-t1.tv_sec) + (t2.tv_usec-t1.tv_usec)*1e-6;}
|
||||||
|
protected:
|
||||||
|
timeval t1,t2;
|
||||||
|
};
|
||||||
|
|
||||||
class Engine_Multithread : public Engine
|
class Engine_Multithread : public Engine
|
||||||
{
|
{
|
||||||
@ -51,9 +63,13 @@ protected:
|
|||||||
volatile unsigned int m_iterTS;
|
volatile unsigned int m_iterTS;
|
||||||
volatile unsigned int m_numTS_times_threads; //!< numTS times the number of worker threads
|
volatile unsigned int m_numTS_times_threads; //!< numTS times the number of worker threads
|
||||||
unsigned int m_numThreads; //!< number of worker threads
|
unsigned int m_numThreads; //!< number of worker threads
|
||||||
|
|
||||||
|
//debug
|
||||||
|
std::map<boost::thread::id, std::vector<double> > m_timer_list;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
class thread {
|
class thread {
|
||||||
public:
|
public:
|
||||||
thread( Engine_Multithread* ptr, unsigned int start, unsigned int stop );
|
thread( Engine_Multithread* ptr, unsigned int start, unsigned int stop );
|
||||||
|
Loading…
Reference in New Issue
Block a user