public MemCacheMonitor(MemCtrl mctrl)
        {
            // Per core - page granularity
            PerCoreAddrHitCounters = new Dictionary <ulong, int> [Config.N];
            for (int i = 0; i < Config.N; i++)
            {
                PerCoreAddrHitCounters[i] = new Dictionary <ulong, int>();
            }
            // Per bank - row granularity
            PerBankAddrHitCounters = new Dictionary <ulong, int> [mctrl.Rmax, mctrl.Bmax];
            PerBankAddrLru         = new LinkedList <ulong> [mctrl.Rmax, mctrl.Bmax];
            for (int r = 0; r < mctrl.Rmax; r++)
            {
                for (int b = 0; b < mctrl.Bmax; b++)
                {
                    PerBankAddrHitCounters[r, b] = new Dictionary <ulong, int>();
                    PerBankAddrLru[r, b]         = new LinkedList <ulong>();
                }
            }
            // Per channel - page granularity
            AddrHitCounters = new Dictionary <ulong, int>();

            _numHitCounters        = Config.mctrl.num_hit_counters;
            _numHitCountersPerCore = _numHitCounters / Config.N;
            _numHitCountersPerBank = _numHitCounters / (int)mctrl.Rmax / (int)mctrl.Bmax;

            _osPageSize               = Config.mctrl.os_page_size;
            _mctrl                    = mctrl;
            _cMonType                 = Config.mctrl.cache_mon_type;
            _hotAddresses             = new HashSet <ulong>();
            _numHotHitCountersPerChan = (int)(mctrl.Rmax * mctrl.Bmax * Config.mem.subarray_max * Config.mctrl.keep_hist_counters_per_sa);
            _numEpochs                = 0;
        }
Example #2
0
 public RBLA_Monitor(MemCtrl mctrl, DDR3DRAM.Timing tc, DDR3DRAM.Timing old_tc)
 {
     _mctrl          = mctrl;
     migration_cost  = (int)tc.tLISA_INTER_SA_COPY;
     _act            = 0;
     _actGain        = (int)(old_tc.tRCD - tc.tRCD);
     _pre            = 0;
     _preGain        = (int)(old_tc.tRP - tc.tRP);
     _prevNetBenefit = 0;
     _prevAdjust     = false;
 }
Example #3
0
 public AutoRefresh(MemCtrl mctrl, ulong trefi)
     : base(mctrl, trefi)
 {
     Time              = 0;
     SaCounters        = new uint[Config.mem.rank_max];
     BankCounters      = new uint[Config.mem.rank_max];
     SaCountersPerbank = new uint[mctrl.Rmax, mctrl.Bmax];
     Array.Clear(SaCounters, 0, (int)Config.mem.rank_max);
     Array.Clear(BankCounters, 0, (int)Config.mem.rank_max);
     Array.Clear(SaCountersPerbank, 0, (int)(mctrl.Rmax * mctrl.Bmax));
     SaCounterMax   = Config.mem.subarray_max;
     BankCounterMax = Config.mem.bank_max;
     Cycles         = 0;
 }
 public RefreshPolicy(MemCtrl mctrl, ulong trefi)
 {
     Mctrl  = mctrl;
     Trefi  = trefi / Config.mctrl.refresh_frequency;
     Cycles = 0;
 }