[Avida-SVN] r2603 - stable/source/analyze
brysonda at myxo.css.msu.edu
brysonda at myxo.css.msu.edu
Fri May 30 11:51:23 PDT 2008
Author: brysonda
Date: 2008-05-30 14:51:23 -0400 (Fri, 30 May 2008)
New Revision: 2603
Modified:
stable/source/analyze/cAnalyzeJobQueue.cc
stable/source/analyze/cAnalyzeJobQueue.h
Log:
Adjust cAnalyzeJobQueue to completely disable threaded workers when limited to a single cpu. This should fix analyze mode under Visual Studio.
Modified: stable/source/analyze/cAnalyzeJobQueue.cc
===================================================================
--- stable/source/analyze/cAnalyzeJobQueue.cc 2008-05-30 15:04:37 UTC (rev 2602)
+++ stable/source/analyze/cAnalyzeJobQueue.cc 2008-05-30 18:51:23 UTC (rev 2603)
@@ -42,9 +42,13 @@
m_rng_pool[i] = new cRandomMT(world->GetRandom().GetInt(0x7FFFFFFF));
}
- for (int i = 0; i < m_workers.GetSize(); i++) {
- m_workers[i] = new cAnalyzeJobWorker(this);
- m_workers[i]->Start();
+ if (m_workers.GetSize() > 1) {
+ for (int i = 0; i < m_workers.GetSize(); i++) {
+ m_workers[i] = new cAnalyzeJobWorker(this);
+ m_workers[i]->Start();
+ }
+ } else {
+ m_workers.Resize(0);
}
}
@@ -72,11 +76,17 @@
}
}
+inline void cAnalyzeJobQueue::queueJob(cAnalyzeJob* job)
+{
+ if (m_workers.GetSize()) m_queue.PushRear(job);
+ else singleThreadedJobExecution(job);
+}
+
void cAnalyzeJobQueue::AddJob(cAnalyzeJob* job)
{
cMutexAutoLock lock(m_mutex);
job->SetID(m_last_jobid++);
- m_queue.PushRear(job);
+ queueJob(job);
m_jobs++;
}
@@ -84,7 +94,7 @@
{
m_mutex.Lock();
job->SetID(m_last_jobid++);
- m_queue.PushRear(job);
+ queueJob(job);
m_jobs++;
m_mutex.Unlock(); // should unlock prior to signaling condition variable
m_cond.Signal();
@@ -117,3 +127,11 @@
if (m_world->GetVerbosity() >= VERBOSE_DETAILS)
m_world->GetDriver().NotifyComment("job queue complete");
}
+
+void cAnalyzeJobQueue::singleThreadedJobExecution(cAnalyzeJob* job)
+{
+ cAvidaContext ctx(NULL);
+ ctx.SetRandom(GetRandom(job->GetID()));
+ job->Run(ctx);
+ delete job;
+}
\ No newline at end of file
Modified: stable/source/analyze/cAnalyzeJobQueue.h
===================================================================
--- stable/source/analyze/cAnalyzeJobQueue.h 2008-05-30 15:04:37 UTC (rev 2602)
+++ stable/source/analyze/cAnalyzeJobQueue.h 2008-05-30 18:51:23 UTC (rev 2603)
@@ -70,6 +70,10 @@
tArray<cAnalyzeJobWorker*> m_workers;
+
+ void singleThreadedJobExecution(cAnalyzeJob* job);
+ inline void queueJob(cAnalyzeJob* job);
+
cAnalyzeJobQueue(); // @not_implemented
cAnalyzeJobQueue(const cAnalyzeJobQueue&); // @not_implemented
More information about the Avida-cvs
mailing list