diff --git a/simulators/c++2/src_simulator/arch/RRScheduler.cpp b/simulators/c++2/src_simulator/arch/RRScheduler.cpp index df8027df1b4a5227596c9de5ca62ed30b66df3da..8fe8f9299c3e1100595b53024613543002e439c1 100644 --- a/simulators/c++2/src_simulator/arch/RRScheduler.cpp +++ b/simulators/c++2/src_simulator/arch/RRScheduler.cpp @@ -41,6 +41,7 @@ Ludovic Apvrille, Renaud Pacalet #include <TMLTransaction.h> #include <TMLCommand.h> #include <TMLTask.h> +#include <CPU.h> RRScheduler::RRScheduler(const std::string& iName, Priority iPrio, TMLTime iTimeSlice ,TMLTime iMinSliceSize): WorkloadSource(iPrio), _name(iName), _nextTransaction(0), _timeSlice(iTimeSlice), _minSliceSize(iMinSliceSize), _elapsedTime(0), _lastSource(0){ } @@ -50,6 +51,7 @@ RRScheduler::RRScheduler(const std::string& iName, Priority iPrio, TMLTime iTime TMLTime RRScheduler::schedule(TMLTime iEndSchedule){ TaskList::iterator i; + CPU* aCPU; //std::cout << _name << ": Schedule called \n"; TMLTransaction *anOldTransaction=_nextTransaction, *aTempTrans; TMLTime aLowestRunnableTimeFuture=-1,aRunnableTime, aLowestRunnableTimePast=-1; @@ -60,11 +62,15 @@ TMLTime RRScheduler::schedule(TMLTime iEndSchedule){ //aScheduledSource=_lastSource; _lastSource->schedule(iEndSchedule); if (_lastSource->getNextTransaction(iEndSchedule)!=0 && _lastSource->getNextTransaction(iEndSchedule)->getVirtualLength()!=0){ - //if (anOldTransaction==0 || _lastSource->getNextTransaction(iEndSchedule)==anOldTransaction || _timeSlice >=_elapsedTime + anOldTransaction->getBranchingPenalty() + anOldTransaction->getOperationLength() + _minSliceSize){ + aCPU = _lastSource->getNextTransaction(iEndSchedule)->getCommand()->getTask()->getCPU(); if (anOldTransaction==0 || _lastSource->getNextTransaction(iEndSchedule)==anOldTransaction || _timeSlice >=_elapsedTime + anOldTransaction->getOperationLength() + _minSliceSize){ //std::cout << "Select same task, remaining: " << _timeSlice - anOldTransaction->getOperationLength() << "\n"; aSourcePast=_lastSource; - aSameTaskFound=true; + if (aCPU->getAmoutOfCore()>1){ + aSameTaskFound=false; + }else{ + aSameTaskFound=true; + } } } }