private void MigrationDecision() { //Determine which row should be migrated and send row numbers to Migration Migration.migrationlist.Clear(); Migration.migrationlistPID.Clear(); RowStat.UpdateAccessPerInterval(); switch (Config.proc.cache_insertion_policy) { case "RBLA": RBLA.decision(); break; case "PFA": if (Cycles == Interval) { PFA.assignE0(); } else { PFA.decision(); } break; case "AC": AC.decision(); break; default: Console.WriteLine("Row Migration Policy Error"); break; } }
public int tick() { //Clock in RBLA, make decision when Cycles is multiples of Interval //If Migration if (Cycles == 0) { if (Config.proc.cache_insertion_policy == "RBLA") { RBLA.initialize(); } else if (Config.proc.cache_insertion_policy == "PFA") { PFA.initialize(); } else if (Config.proc.cache_insertion_policy == "AC") { AC.initialize(); } } else { if (Cycles % Interval == 0) { MigrationDecision(); } if (target) { target = false; if (Config.proc.cache_insertion_policy == "RBLA") { RBLA.tick(); } else if (Config.proc.cache_insertion_policy == "PFA" && Cycles >= Interval) { PFA.tick(); } else if (Config.proc.cache_insertion_policy == "AC" && Cycles >= Interval) { AC.tick(); } } if (Cycles % Interval == 0) { RowStat.ClearPerInterval(); } } Migration.tick(); Cycles++; return(0); }