changed fifo scheduler to strictly keep the order

This commit is contained in:
Janik Schlemminger
2014-09-04 11:19:40 +02:00
parent 320331164b
commit 610dc6e6a5
4 changed files with 11 additions and 15 deletions

View File

@@ -8,5 +8,4 @@
<Capsize value="5" />
<PowerDownMode value="Staggered" />
<PowerDownTimeout value="100" />
<DatabaseRecordingEnabled value="1" />
</memconfig>

View File

@@ -5,7 +5,7 @@
<memconfigs>
<!-- <memconfig>fr_fcfs.xml</memconfig>
--> <memconfig>fr_fcfs.xml</memconfig>
--> <memconfig>fifo.xml</memconfig>
</memconfigs>
<trace-setups>

View File

@@ -17,35 +17,32 @@ bool Fifo::hasPayloads()
void Fifo::schedule(gp* payload)
{
buffer[DramExtension::getExtension(payload).getBank()].push_back(payload);
buffer.push_back(payload);
}
gp* Fifo::getNextPayload()
{
for(Bank bank: controllerCore.getFreeBanks())
if(!buffer.empty())
{
if(!buffer[bank].empty())
DramExtension& frontRequest = DramExtension::getExtension(buffer.front());
vector<Bank> freeBanks = controllerCore.getFreeBanks();
if(std::find(freeBanks.begin(),freeBanks.end(),frontRequest.getBank()) != freeBanks.end())
{
return buffer[bank].front();
return buffer.front();
}
}
return NULL;
}
void Fifo::removePayload(gp* payload)
void Fifo::removePayload(gp* /*payload*/)
{
buffer[DramExtension::getExtension(payload).getBank()].pop_front();
buffer.pop_front();
}
unsigned int Fifo::getNumberOfQueuedPayloads()
{
unsigned int numberOfQueuedPayloads = 0;
for(auto& bufferElement : buffer)
{
numberOfQueuedPayloads += bufferElement.second.size();
}
return numberOfQueuedPayloads;
return buffer.size();
}
} /* namespace scheduler */

View File

@@ -30,7 +30,7 @@ public:
virtual void removePayload(gp* payload) override;
private:
std::map<Bank, std::deque<gp*>> buffer;
std::deque<gp*> buffer;
core::ControllerCore &controllerCore;
unsigned int getNumberOfQueuedPayloads();
};