#!/bin/env python ## ## Copyright (c) 2010-2017 Intel Corporation ## ## Licensed under the Apache License, Version 2.0 (the "License"); ## you may not use this file except in compliance with the License. ## You may obtain a copy of the License at ## ## http://www.apache.org/licenses/LICENSE-2.0 ## ## Unless required by applicable law or agreed to in writing, software ## distributed under the License is distributed on an "AS IS" BASIS, ## WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. ## See the License for the specific language governing permissions and ## limitations under the License. ## import sys from config import * from csvreader import * from sets import Set from csvwriter import * class ResultEntry: def __init__(self): self.boundary = None; self.cores = {} def setBoundary(self, val): self.boundary = val; def addCoreResult(self, core, val): self.cores[core] = val def getCoreResult(self, core): if (core in self.cores): return self.cores[core]; return None; def getBoundary(self): return self.boundary; def getCores(self): return self.cores def getMsr(self): return self.msr; class DictEntry: def __init__(self, key): self.dictionary = {} self.entries = [] self.key = key; config = Config(); config.parse(sys.argv[0], sys.argv[1:]) err = config.getErrorMakeTable(); if (err is not None): print err exit(-1); if (config._debug): print "Performance data: " + config.getInputFileName2() print "Boundaries: " + config.getInputFileName() allData = {} infileFields = [] infileFields += [("msr", "int")] infileFields += [("conn", "int")] infileFields += [("ss", "Decimal")] infileFields += [("bw", "Decimal")] boundariesFile = CsvReader(infileFields) boundariesFile.open(config.getInputFileName()); boundaries = boundariesFile.readAll(); cores = Set() orderedResults = [] finalResults = {} for a in boundaries: key = a["conn"] if (key not in finalResults): newDict = DictEntry(key) finalResults[key] = newDict orderedResults.append(newDict) for a in boundaries: table = finalResults[a["conn"]] key = a["msr"] value = ResultEntry() value.msr = a["msr"] value.conn = a["conn"] value.boundary = a["bw"] table.dictionary[key] = value table.entries.append(value) infileFields2 = [] infileFields2 += [("cores", "int")] infileFields2 += [("msr", "int")] infileFields2 += [("conn", "int")] infileFields2 += [("ss", "Decimal")] infileFields2 += [("down", "Decimal")] resultsFile = CsvReader(infileFields2) resultsFile.open(config.getInputFileName2()) for a in resultsFile.readAll(): table = finalResults[a["conn"]] key = a["msr"] table.dictionary[key].addCoreResult(a["cores"], a["down"]) cores.add(a["cores"]); outputFile = CsvWriter() outputFile.open(config._output_file_name) title = ["setup rate", "maximum"] for e in sorted(cores): title += [str(e)] for a in orderedResults: outputFile.write(["connections = " + str(a.key)]) outputFile.write(title) for e in a.entries: line = [str(e.getMsr())] line += [str(e.getBoundary())] for c in sorted(cores): if (e.getCoreResult(c) is not None): line += [str(e.getCoreResult(c))] else: line += [""] outputFile.write(line)