changed fifo scheduler to strictly keep the order
This commit is contained in:
@@ -8,5 +8,4 @@
|
||||
<Capsize value="5" />
|
||||
<PowerDownMode value="Staggered" />
|
||||
<PowerDownTimeout value="100" />
|
||||
<DatabaseRecordingEnabled value="1" />
|
||||
</memconfig>
|
||||
@@ -5,7 +5,7 @@
|
||||
|
||||
<memconfigs>
|
||||
<!-- <memconfig>fr_fcfs.xml</memconfig>
|
||||
--> <memconfig>fr_fcfs.xml</memconfig>
|
||||
--> <memconfig>fifo.xml</memconfig>
|
||||
</memconfigs>
|
||||
<trace-setups>
|
||||
|
||||
|
||||
@@ -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 */
|
||||
|
||||
@@ -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();
|
||||
};
|
||||
|
||||
Reference in New Issue
Block a user