public void diffCacheResult(CPUCacheData compare) { foreach (var v in matchingData) { foundDifference = true; if (compare.matchingData[v.Key] != v.Value) { diffData.Add(v.Key, Tuple.Create<int, int>(v.Value, compare.matchingData[v.Key])); } } }
private static void DiffParsecFiles(string inputFile, StringBuilder sb, string bench, int numCache) { List<CPUCacheData> baseline = new List<CPUCacheData>(); List<CPUCacheData> comparison = new List<CPUCacheData>(); List<CPUCacheData> currList = baseline; // there are CPUs , and each cpu has a bunch of metrics using (StreamReader sr = new StreamReader(inputFile)) { string line; // parse header do { line = sr.ReadLine(); } while (line != null && !line.Contains("numReadHits")); if (line == null) { Console.WriteLine("*** bad input file"); } bool firstResult = true; while (line != null) { CPUCacheData c = new CPUCacheData(); string[] fieldNames = line.Split(','); string[] values = sr.ReadLine().Split(','); Debug.Assert(fieldNames[0].Equals("CPUId", StringComparison.InvariantCultureIgnoreCase)); c.CPUid = Int32.Parse(values[0]); Debug.Assert(c.CPUid >= 0 && c.CPUid <= 15); for (int i = 1; i < fieldNames.Length; i++) { c.matchingData.Add(fieldNames[i], Int32.Parse(values[i])); } if (!firstResult && c.CPUid == 0) { currList = comparison; } currList.Add(c); firstResult = false; line = sr.ReadLine(); } } Console.WriteLine("Baseline: {0}, Comparison: {1}", baseline.Count, comparison.Count); for (int i = 0; i < baseline.Count; i++) { baseline[i].diffCacheResult(comparison[i]); string line = baseline[i].diffToString(bench, numCache); if (line != null) { sb.Append(line); } } }