コード例 #1
0
 public JobCache(string dataDir, Job j)
 {
     _dataDir = dataDir;
     _filename = dataDir + @"\" + j.MetaData.Id.ToString() + "_cache.csv";
     _j = j;
 }
コード例 #2
0
        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.");
        }