mirror of
https://github.com/RRZE-HPC/OSACA.git
synced 2025-09-07 10:20:35 +02:00
91 lines
2.6 KiB
Python
Executable File
91 lines
2.6 KiB
Python
Executable File
#!/usr/bin/env python3
|
|
"""
|
|
Unit tests for OSACA Kerncraft API
|
|
"""
|
|
|
|
import os
|
|
import unittest
|
|
|
|
from collections import OrderedDict
|
|
|
|
from osaca.api import KerncraftAPI
|
|
from osaca.parser import ParserAArch64v81, ParserX86ATT
|
|
|
|
|
|
class TestKerncraftAPI(unittest.TestCase):
|
|
@classmethod
|
|
def setUpClass(self):
|
|
# set up parser and kernels
|
|
self.parser_x86 = ParserX86ATT()
|
|
self.parser_AArch64 = ParserAArch64v81()
|
|
with open(self._find_file('triad-x86-iaca.s')) as f:
|
|
self.code_x86 = f.read()
|
|
with open(self._find_file('triad-arm-iaca.s')) as f:
|
|
self.code_AArch64 = f.read()
|
|
|
|
###########
|
|
# Tests
|
|
###########
|
|
|
|
def test_kerncraft_API_x86(self):
|
|
kapi = KerncraftAPI('csx', self.code_x86)
|
|
|
|
kapi.create_output()
|
|
self.assertEqual(kapi.get_unmatched_instruction_ratio(), 0.0)
|
|
port_occupation = OrderedDict(
|
|
[
|
|
('0', 1.25),
|
|
('0DV', 0.0),
|
|
('1', 1.25),
|
|
('2', 2.0),
|
|
('2D', 1.5),
|
|
('3', 2.0),
|
|
('3D', 1.5),
|
|
('4', 1.0),
|
|
('5', 0.75),
|
|
('6', 0.75),
|
|
('7', 0.0),
|
|
]
|
|
)
|
|
self.assertEqual(kapi.get_port_occupation_cycles(), port_occupation)
|
|
self.assertEqual(kapi.get_total_throughput(), 2.0)
|
|
self.assertEqual(kapi.get_latency(), (1.0, 13.0))
|
|
|
|
def test_kerncraft_API_AArch64(self):
|
|
kapi = KerncraftAPI('tx2', self.code_AArch64)
|
|
|
|
kapi.create_output()
|
|
self.assertEqual(kapi.get_unmatched_instruction_ratio(), 0.0)
|
|
port_occupation = OrderedDict(
|
|
[
|
|
('0', 34.0),
|
|
('0DV', 0.0),
|
|
('1', 34.0),
|
|
('1DV', 0.0),
|
|
('2', 2.0),
|
|
('3', 64.0),
|
|
('4', 64.0),
|
|
('5', 32.0),
|
|
]
|
|
)
|
|
self.assertEqual(kapi.get_port_occupation_cycles(), port_occupation)
|
|
self.assertEqual(kapi.get_total_throughput(), 64.0)
|
|
# TODO add missing latency values
|
|
# self.assertEqual(kapi.get_latency(kernel), 20.0)
|
|
|
|
##################
|
|
# Helper functions
|
|
##################
|
|
|
|
@staticmethod
|
|
def _find_file(name):
|
|
testdir = os.path.dirname(__file__)
|
|
name = os.path.join(testdir, 'test_files', name)
|
|
assert os.path.exists(name)
|
|
return name
|
|
|
|
|
|
if __name__ == '__main__':
|
|
suite = unittest.TestLoader().loadTestsFromTestCase(TestKerncraftAPI)
|
|
unittest.TextTestRunner(verbosity=2).run(suite)
|