mirror of
https://github.com/RRZE-HPC/OSACA.git
synced 2025-12-16 00:50:06 +01:00
moved frontend tests to test_frontend.py
This commit is contained in:
@@ -9,7 +9,8 @@ suite = unittest.TestLoader().loadTestsFromNames(
|
||||
'test_parser_x86att',
|
||||
'test_parser_AArch64v81',
|
||||
'test_marker_utils',
|
||||
'test_semantics'
|
||||
'test_semantics',
|
||||
'test_frontend'
|
||||
]
|
||||
)
|
||||
|
||||
|
||||
83
tests/test_frontend.py
Executable file
83
tests/test_frontend.py
Executable file
@@ -0,0 +1,83 @@
|
||||
#!/usr/bin/env python3
|
||||
"""
|
||||
Unit tests for OSACA Frontend
|
||||
"""
|
||||
|
||||
import os
|
||||
import unittest
|
||||
|
||||
from osaca.frontend import Frontend
|
||||
from osaca.parser import ParserAArch64v81, ParserX86ATT
|
||||
from osaca.semantics.hw_model import MachineModel
|
||||
from osaca.semantics.kernel_dg import KernelDG
|
||||
from osaca.semantics.semanticsAppender import SemanticsAppender
|
||||
|
||||
|
||||
class TestFrontend(unittest.TestCase):
|
||||
MODULE_DATA_DIR = os.path.join(
|
||||
os.path.dirname(os.path.split(os.path.abspath(__file__))[0]), 'osaca/data/'
|
||||
)
|
||||
|
||||
def setUp(self):
|
||||
# set up parser and kernels
|
||||
self.parser_x86 = ParserX86ATT()
|
||||
self.parser_AArch64 = ParserAArch64v81()
|
||||
with open(self._find_file('kernel-x86.s')) as f:
|
||||
code_x86 = f.read()
|
||||
with open(self._find_file('kernel-AArch64.s')) as f:
|
||||
code_AArch64 = f.read()
|
||||
self.kernel_x86 = self.parser_x86.parse_file(code_x86)
|
||||
self.kernel_AArch64 = self.parser_AArch64.parse_file(code_AArch64)
|
||||
|
||||
# set up machine models
|
||||
self.machine_model_csl = MachineModel(
|
||||
path_to_yaml=os.path.join(self.MODULE_DATA_DIR, 'csl.yml')
|
||||
)
|
||||
self.machine_model_tx2 = MachineModel(
|
||||
path_to_yaml=os.path.join(self.MODULE_DATA_DIR, 'vulcan.yml')
|
||||
)
|
||||
self.semantics_csl = SemanticsAppender(
|
||||
self.machine_model_csl, path_to_yaml=os.path.join(self.MODULE_DATA_DIR, 'isa/x86.yml')
|
||||
)
|
||||
self.semantics_tx2 = SemanticsAppender(
|
||||
self.machine_model_tx2,
|
||||
path_to_yaml=os.path.join(self.MODULE_DATA_DIR, 'isa/AArch64.yml'),
|
||||
)
|
||||
for i in range(len(self.kernel_x86)):
|
||||
self.semantics_csl.assign_src_dst(self.kernel_x86[i])
|
||||
self.semantics_csl.assign_tp_lt(self.kernel_x86[i])
|
||||
for i in range(len(self.kernel_AArch64)):
|
||||
self.semantics_tx2.assign_src_dst(self.kernel_AArch64[i])
|
||||
self.semantics_tx2.assign_tp_lt(self.kernel_AArch64[i])
|
||||
|
||||
###########
|
||||
# Tests
|
||||
###########
|
||||
|
||||
def test_frontend_x86(self):
|
||||
dg = KernelDG(self.kernel_x86, self.parser_x86, self.machine_model_csl)
|
||||
fe = Frontend(path_to_yaml=os.path.join(self.MODULE_DATA_DIR, 'csl.yml'))
|
||||
fe.print_throughput_analysis(self.kernel_x86)
|
||||
fe.print_latency_analysis(dg.get_critical_path())
|
||||
|
||||
def test_frontend_AArch64(self):
|
||||
dg = KernelDG(self.kernel_AArch64, self.parser_AArch64, self.machine_model_tx2)
|
||||
fe = Frontend(path_to_yaml=os.path.join(self.MODULE_DATA_DIR, 'vulcan.yml'))
|
||||
fe.print_throughput_analysis(self.kernel_AArch64)
|
||||
fe.print_latency_analysis(dg.get_critical_path())
|
||||
|
||||
##################
|
||||
# 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(TestFrontend)
|
||||
unittest.TextTestRunner(verbosity=2).run(suite)
|
||||
@@ -110,10 +110,6 @@ class TestSemanticTools(unittest.TestCase):
|
||||
self.assertEqual(len(list(dg.get_dependent_instruction_forms(line_number=6))), 0)
|
||||
self.assertEqual(len(list(dg.get_dependent_instruction_forms(line_number=7))), 0)
|
||||
|
||||
fe = Frontend(arch='CSL')
|
||||
fe.print_throughput_analysis(self.kernel_x86)
|
||||
fe.print_latency_analysis(dg.get_critical_path())
|
||||
|
||||
def test_kernelDG_AArch64(self):
|
||||
dg = KernelDG(self.kernel_AArch64, self.parser_AArch64, self.machine_model_tx2)
|
||||
self.assertTrue(nx.algorithms.dag.is_directed_acyclic_graph(dg.dg))
|
||||
@@ -136,10 +132,6 @@ class TestSemanticTools(unittest.TestCase):
|
||||
self.assertEqual(len(list(dg.get_dependent_instruction_forms(line_number=18))), 0)
|
||||
self.assertEqual(len(list(dg.get_dependent_instruction_forms(line_number=19))), 0)
|
||||
|
||||
fe = Frontend(arch='vulcan')
|
||||
fe.print_throughput_analysis(self.kernel_AArch64)
|
||||
fe.print_latency_analysis(dg.get_critical_path())
|
||||
|
||||
def test_is_read_is_written_x86(self):
|
||||
# independent form HW model
|
||||
dag = KernelDG(self.kernel_x86, self.parser_x86, None)
|
||||
|
||||
Reference in New Issue
Block a user