MESI Protocol: Add functions for profiling misses
This commit is contained in:
@@ -679,6 +679,17 @@ machine(L1Cache, "MSI Directory L1 Cache CMP")
|
||||
mandatoryQueue_in.recycle();
|
||||
}
|
||||
|
||||
action(uu_profileInstMiss, "\ui", desc="Profile the demand miss") {
|
||||
peek(mandatoryQueue_in, RubyRequest) {
|
||||
L1IcacheMemory.profileMiss(in_msg);
|
||||
}
|
||||
}
|
||||
|
||||
action(uu_profileDataMiss, "\ud", desc="Profile the demand miss") {
|
||||
peek(mandatoryQueue_in, RubyRequest) {
|
||||
L1DcacheMemory.profileMiss(in_msg);
|
||||
}
|
||||
}
|
||||
|
||||
//*****************************************************
|
||||
// TRANSITIONS
|
||||
@@ -698,6 +709,7 @@ machine(L1Cache, "MSI Directory L1 Cache CMP")
|
||||
oo_allocateL1DCacheBlock;
|
||||
i_allocateTBE;
|
||||
a_issueGETS;
|
||||
uu_profileDataMiss;
|
||||
k_popMandatoryQueue;
|
||||
}
|
||||
|
||||
@@ -705,6 +717,7 @@ machine(L1Cache, "MSI Directory L1 Cache CMP")
|
||||
pp_allocateL1ICacheBlock;
|
||||
i_allocateTBE;
|
||||
ai_issueGETINSTR;
|
||||
uu_profileInstMiss;
|
||||
k_popMandatoryQueue;
|
||||
}
|
||||
|
||||
@@ -712,6 +725,7 @@ machine(L1Cache, "MSI Directory L1 Cache CMP")
|
||||
oo_allocateL1DCacheBlock;
|
||||
i_allocateTBE;
|
||||
b_issueGETX;
|
||||
uu_profileDataMiss;
|
||||
k_popMandatoryQueue;
|
||||
}
|
||||
|
||||
@@ -729,6 +743,7 @@ machine(L1Cache, "MSI Directory L1 Cache CMP")
|
||||
transition(S, Store, SM) {
|
||||
i_allocateTBE;
|
||||
c_issueUPGRADE;
|
||||
uu_profileDataMiss;
|
||||
k_popMandatoryQueue;
|
||||
}
|
||||
|
||||
|
||||
@@ -716,9 +716,25 @@ machine(L2Cache, "MESI Directory L2 Cache CMP")
|
||||
}
|
||||
}
|
||||
|
||||
GenericRequestType convertToGenericType(CoherenceRequestType type) {
|
||||
if(type == CoherenceRequestType:GETS) {
|
||||
return GenericRequestType:GETS;
|
||||
} else if(type == CoherenceRequestType:GETX) {
|
||||
return GenericRequestType:GETX;
|
||||
} else if(type == CoherenceRequestType:GET_INSTR) {
|
||||
return GenericRequestType:GET_INSTR;
|
||||
} else if(type == CoherenceRequestType:UPGRADE) {
|
||||
return GenericRequestType:UPGRADE;
|
||||
} else {
|
||||
DPRINTF(RubySlicc, "%s\n", type);
|
||||
error("Invalid CoherenceRequestType\n");
|
||||
}
|
||||
}
|
||||
|
||||
action(uu_profileMiss, "\u", desc="Profile the demand miss") {
|
||||
peek(L1RequestIntraChipL2Network_in, RequestMsg) {
|
||||
//profile_L2Cache_miss(convertToGenericType(in_msg.Type), in_msg.AccessMode, MessageSizeTypeToInt(in_msg.MessageSize), in_msg.Prefetch, L1CacheMachIDToProcessorNum(in_msg.Requestor));
|
||||
L2cacheMemory.profileGenericRequest(convertToGenericType(in_msg.Type),
|
||||
in_msg.AccessMode, in_msg.Prefetch);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user