-
Notifications
You must be signed in to change notification settings - Fork 48
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Refresh Logic #17
Comments
A configuration with more than 30 ranks in a single channel is very strange. If you have difficulty configuring, use the configuration already provided in test cases. |
I use a predefined single-channel configuration. The problem is that the number of ranks per channel isn't defined by the configuration; instead, it's calculated based on the data size and the sizes of different levels. Consequently, when running a large chunk of data on a small memory, the memory creates virtual ranks, which are only used for refreshing. This issue persists even when I use the default configuration with the default multiplication kernel. As a result, there are refresh requests for ranks that don't exist (in this case, 1 channel per rank, which results in 64 virtual ranks that are only used for refreshing). Below is the grep result using the 64-channel configuration with the default multiplication kernel. Is this behavior logical? or is it logical to fix rank to 1? also here is the code that specifies the number of the ranks in MemorySystem.cpp uint64_t bytePerRank = static_cast<uint64_t>(
(getConfigParam(UINT64, "NUM_ROWS") *
(getConfigParam(UINT, "NUM_COLS") * getConfigParam(UINT, "DEVICE_WIDTH")) *
getConfigParam(UINT, "NUM_BANKS") *
(getConfigParam(UINT64, "JEDEC_DATA_BUS_BITS") / getConfigParam(UINT, "DEVICE_WIDTH"))) /
8);
uint64_t megsOfStoragePerRank = bytePerRank >> 20;
num_ranks_ = (megsOfMemory / Byte2MB(bytePerRank));
// If this is set, effectively override the number of ranks
if (megsOfMemory != 0)
{
num_ranks_ = (num_ranks_ > 0) ? num_ranks_ : 1;
if (num_ranks_ == 0)
{
PRINT("WARNING: Cannot create memory system with "
<< megsOfMemory << "MB, defaulting to minimum size of " << megsOfStoragePerRank
<< "MB");
}
setDevConfigParam(UINT, "NUM_RANKS", num_ranks_);
// FIXME, need to synchronize between ConfigurationDB and Configuration
config.NUM_RANKS = num_ranks_;
} |
The simulator calculates the memory size per rank based on the parameters defined in the configuration file and dynamically determines the number of ranks based on the memory size as input. As mentioned above, we recommend using the configuration provided by the test cases. |
Based on the output traces, the refresh cycles are not changing the bank states or relies on them.
as an example the refresh commands were done for a rank that does not exist in MUL kernel and the rank number works like a counter for the refresh unit.
I want to know if this is a bug or the number of cycles for refreshing is somehow pre calculated based on the trace len and other parameters.
sample of grep results on output trace of MUL kernel with single channel config:
The text was updated successfully, but these errors were encountered: