public JobCache(string dataDir, Job j) { _dataDir = dataDir; _filename = dataDir + @"\" + j.MetaData.Id.ToString() + "_cache.csv"; _j = j; }
protected void Rebuild() { Stopwatch sw = new Stopwatch(); sw.Restart(); SetupData(); if (_j.MetaData.Reference != 0) _reference = new Job(_dataDir, _j.MetaData.Reference); Dictionary<string, double> referenceTimes = null; if (_reference != null) { referenceTimes = new Dictionary<string, double>(); foreach (CSVRow r in _reference.Rows) { if (r.ResultCode == ResultCode.OK) { // Duplicates? if (referenceTimes.ContainsKey(r.Filename)) referenceTimes[r.Filename] = r.Runtime; else referenceTimes.Add(r.Filename, r.Runtime); } } } foreach (CSVRow r in _j.Rows) { uint rc = r.ResultCode; if (ResultCode.IsBug(rc)) { string fn = r.Filename; string cat = fn.Substring(0, fn.IndexOf('\\')); _bugsByCategory[cat].Add(fn); _bugsByCategory[""].Add(fn); } else if (ResultCode.IsError(rc)) { string fn = r.Filename; string cat = fn.Substring(0, fn.IndexOf('\\')); _errorsByCategory[cat].Add(fn); _errorsByCategory[""].Add(fn); } else if (ResultCode.IsOK(rc)) { uint have = r.SAT + r.UNSAT; uint target = r.TargetSAT + r.TargetUNSAT; if (have < target) { string fn = r.Filename; string cat = fn.Substring(0, fn.IndexOf('\\')); _underperformersByCategory[cat].Add(fn); _underperformersByCategory[""].Add(fn); } if (referenceTimes != null && referenceTimes.ContainsKey(r.Filename)) { double new_time = r.Runtime; double old_time = referenceTimes[r.Filename]; if (new_time > 1 && old_time > 1 && new_time >= 10.0 * old_time) { string fn = r.Filename; string cat = fn.Substring(0, fn.IndexOf('\\')); string msg = fn + " [" + (new_time - old_time) + " sec. slower]"; _dippersByCategory[cat].Add(msg); _dippersByCategory[""].Add(msg); } } } else if (ResultCode.IsTime(rc)) { if (referenceTimes != null && referenceTimes.ContainsKey(r.Filename)) { double old_time = referenceTimes[r.Filename]; double new_time = _j.MetaData.Timeout; if ((new_time - old_time) > 10) { string fn = r.Filename; string cat = fn.Substring(0, fn.IndexOf('\\')); string msg = fn + " [more than " + (new_time-old_time) + " sec. slower]"; _dippersByCategory[cat].Add(msg); _dippersByCategory[""].Add(msg); } } } else if (ResultCode.IsMemory(rc)) { if (referenceTimes != null && referenceTimes.ContainsKey(r.Filename)) { double old_time = referenceTimes[r.Filename]; string fn = r.Filename; string cat = fn.Substring(0, fn.IndexOf('\\')); string msg = fn + " [went from " + old_time + " sec. to memory-out]"; _dippersByCategory[cat].Add(msg); _dippersByCategory[""].Add(msg); } } } Save(); Global.Say("Rebuilding cache for #" + _j.MetaData.Id + " in " + sw.Elapsed.TotalSeconds + " sec."); }