def import_benchmark_output(arch, bench_type, filepath, output=sys.stdout): """ Import benchmark results from micro-benchmarks. :param arch: target architecture key :type arch: str :param bench_type: key for defining type of benchmark output :type bench_type: str :param filepath: filepath to the output file :type filepath: str :param output: output stream to dump, defaults to sys.stdout :type output: stream """ supported_bench_outputs = ["ibench", "asmbench"] assert os.path.exists(filepath) if bench_type not in supported_bench_outputs: raise ValueError("Benchmark type is not supported.") with open(filepath, "r") as f: input_data = f.readlines() db_entries = None mm = MachineModel(arch) if bench_type == "ibench": db_entries = _get_ibench_output(input_data, mm.get_ISA()) elif bench_type == "asmbench": db_entries = _get_asmbench_output(input_data, mm.get_ISA()) # write entries to DB for entry in db_entries: mm.set_instruction_entry(db_entries[entry]) if output is None: print(mm.dump()) else: mm.dump(stream=output)
def test_add_single_entry(self): mm_csx = MachineModel('csx') mm_tx2 = MachineModel('tx2') mm_zen1 = MachineModel('zen1') num_entries_csx = len(mm_csx['instruction_forms']) num_entries_tx2 = len(mm_tx2['instruction_forms']) num_entries_zen1 = len(mm_zen1['instruction_forms']) mm_csx.set_instruction_entry(self.entry_csx) mm_tx2.set_instruction_entry(self.entry_tx2) mm_zen1.set_instruction_entry({'name': 'empty_operation'}) num_entries_csx = len(mm_csx['instruction_forms']) - num_entries_csx num_entries_tx2 = len(mm_tx2['instruction_forms']) - num_entries_tx2 num_entries_zen1 = len(mm_zen1['instruction_forms']) - num_entries_zen1 self.assertEqual(num_entries_csx, 1) self.assertEqual(num_entries_tx2, 1) self.assertEqual(num_entries_zen1, 1)
def test_add_single_entry(self): mm_csx = MachineModel("csx") mm_tx2 = MachineModel("tx2") mm_zen1 = MachineModel("zen1") num_entries_csx = len(mm_csx["instruction_forms"]) num_entries_tx2 = len(mm_tx2["instruction_forms"]) num_entries_zen1 = len(mm_zen1["instruction_forms"]) mm_csx.set_instruction_entry(self.entry_csx) mm_tx2.set_instruction_entry(self.entry_tx2) mm_zen1.set_instruction_entry({"name": "empty_operation"}) num_entries_csx = len(mm_csx["instruction_forms"]) - num_entries_csx num_entries_tx2 = len(mm_tx2["instruction_forms"]) - num_entries_tx2 num_entries_zen1 = len(mm_zen1["instruction_forms"]) - num_entries_zen1 self.assertEqual(num_entries_csx, 1) self.assertEqual(num_entries_tx2, 1) self.assertEqual(num_entries_zen1, 1)