Skip to content

Add test cases for constrained temporal mapping #82

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Open
wants to merge 5 commits into
base: master
Choose a base branch
from
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Empty file.
40 changes: 40 additions & 0 deletions tests/main/test_constrainted_mapping/test_ascend_like.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,40 @@
import pytest

from zigzag.api import get_hardware_performance_zigzag
from zigzag.visualization.results.print_mapping import get_temporal_spatial_loops

# Test case for when spatial_mapping is provided, while spatial_mapping_hint is not provided.

workloads = (
"zigzag/inputs/workload/resnet18.onnx",
"zigzag/inputs/workload/resnet18.yaml",
)

# Expected energy and latency for each workload defined above
ens_lats = {
"zigzag/inputs/workload/alexnet.onnx": (5664863934, 8479644),
"zigzag/inputs/workload/mobilenetv2.onnx": (920740293, 3814440),
"zigzag/inputs/workload/resnet18.onnx": (1680938520, 3697986),
"zigzag/inputs/workload/resnet18.yaml": (2286320480, 4418088),
}


@pytest.fixture
def mapping():
return "zigzag/inputs/mapping/ascend_like_constrainted.yaml"


@pytest.fixture
def accelerator():
return "zigzag/inputs/hardware/ascend_like.yaml"


@pytest.mark.parametrize("workload", workloads)
def test_api(workload: str, accelerator: str, mapping: str): # pylint: disable=W0621
energy, latency, cmes = get_hardware_performance_zigzag(workload, accelerator, mapping)
temp_map_default = [get_temporal_spatial_loops(cme[0])[0] for cme in cmes[0][1]]

for temp_mapping in temp_map_default:
if ("OX" in [dim[0].name for dim in temp_mapping]) and ("OY" in [dim[0].name for dim in temp_mapping]):
assert temp_mapping[-1][0].name == "OX"
assert temp_mapping[-2][0].name == "OY"
40 changes: 40 additions & 0 deletions tests/main/test_constrainted_mapping/test_edge_tpu_like.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,40 @@
import pytest

from zigzag.api import get_hardware_performance_zigzag
from zigzag.visualization.results.print_mapping import get_temporal_spatial_loops

# Test case for when both spatial_mapping and spatial_mapping_hint are provided.

workloads = (
"zigzag/inputs/workload/resnet18.onnx",
"zigzag/inputs/workload/resnet18.yaml",
)

# Expected energy and latency for each workload defined above
ens_lats = {
"zigzag/inputs/workload/alexnet.onnx": (6159980160, 8337351),
"zigzag/inputs/workload/mobilenetv2.onnx": (742114179, 2421959),
"zigzag/inputs/workload/resnet18.onnx": (1735517944, 4055269),
"zigzag/inputs/workload/resnet18.yaml": (2029477205, 4738407),
}


@pytest.fixture
def mapping():
return "zigzag/inputs/mapping/edge_tpu_like_constrainted.yaml"


@pytest.fixture
def accelerator():
return "zigzag/inputs/hardware/edge_tpu_like.yaml"


@pytest.mark.parametrize("workload", workloads)
def test_api(workload: str, accelerator: str, mapping: str): # pylint: disable=W0621
energy, latency, cmes = get_hardware_performance_zigzag(workload, accelerator, mapping)
temp_map_default = [get_temporal_spatial_loops(cme[0])[0] for cme in cmes[0][1]]

for temp_mapping in temp_map_default:
if ("OX" in [dim[0].name for dim in temp_mapping]) and ("OY" in [dim[0].name for dim in temp_mapping]):
assert temp_mapping[-2][0].name == "OX"
assert temp_mapping[-1][0].name == "OY"
40 changes: 40 additions & 0 deletions tests/main/test_constrainted_mapping/test_meta_prototype_like.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,40 @@
import pytest

from zigzag.api import get_hardware_performance_zigzag
from zigzag.visualization.results.print_mapping import get_temporal_spatial_loops

# Test case for when an incomplete spatial_mapping is provided and spatial_mapping_hint is also provided.

workloads = (
"zigzag/inputs/workload/resnet18.onnx",
"zigzag/inputs/workload/resnet18.yaml",
)

# Expected energy and latency for each workload defined above
ens_lats = {
"zigzag/inputs/workload/alexnet.onnx": (5681909132.480001, 8279495.0),
"zigzag/inputs/workload/mobilenetv2.onnx": (909647916.68, 2602479.0),
"zigzag/inputs/workload/resnet18.onnx": (1751779924.0000002, 3234867.0),
"zigzag/inputs/workload/resnet18.yaml": (2259198622.68, 3884859.0),
}


@pytest.fixture
def mapping():
return "zigzag/inputs/mapping/meta_prototype_like_constrainted.yaml"


@pytest.fixture
def accelerator():
return "zigzag/inputs/hardware/meta_prototype.yaml"


@pytest.mark.parametrize("workload", workloads)
def test_api(workload: str, accelerator: str, mapping: str): # pylint: disable=W0621
energy, latency, cmes = get_hardware_performance_zigzag(workload, accelerator, mapping)
temp_map_default = [get_temporal_spatial_loops(cme[0])[0] for cme in cmes[0][1]]

for temp_mapping in temp_map_default:
if ("OX" in [dim[0].name for dim in temp_mapping]) and ("OY" in [dim[0].name for dim in temp_mapping]):
assert temp_mapping[-2][0].name == "OX"
assert temp_mapping[-1][0].name == "OY"
39 changes: 39 additions & 0 deletions tests/main/test_constrainted_mapping/test_tesla_npu_like.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,39 @@
import pytest

from zigzag.api import get_hardware_performance_zigzag
from zigzag.visualization.results.print_mapping import get_temporal_spatial_loops

# Test case for when only spatial_mapping_hint is provided.

workloads = (
"zigzag/inputs/workload/resnet18.onnx",
"zigzag/inputs/workload/resnet18.yaml",
)

# Expected energy and latency for each workload defined above
ens_lats = {
"zigzag/inputs/workload/alexnet.onnx": (6006136982.778, 8290892.0),
"zigzag/inputs/workload/mobilenetv2.onnx": (947736166.5380002, 1857838.0),
"zigzag/inputs/workload/resnet18.onnx": (1604556365.552, 2828301.0),
"zigzag/inputs/workload/resnet18.yaml": (2094141825.5040002, 3480232.0),
}


@pytest.fixture
def mapping():
return "zigzag/inputs/mapping/tesla_npu_like_constrainted.yaml"


@pytest.fixture
def accelerator():
return "zigzag/inputs/hardware/tesla_npu_like.yaml"


@pytest.mark.parametrize("workload", workloads)
def test_api(workload: str, accelerator: str, mapping: str): # pylint: disable=W0621
energy, latency, cmes = get_hardware_performance_zigzag(workload, accelerator, mapping)
temp_map_default = [get_temporal_spatial_loops(cme[0])[0] for cme in cmes[0][1]]

for temp_mapping in temp_map_default:
if "OY" in [dim[0].name for dim in temp_mapping]:
assert temp_mapping[-1][0].name == "OY"
40 changes: 40 additions & 0 deletions tests/main/test_constrainted_mapping/test_tpu_like.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,40 @@
import pytest

from zigzag.api import get_hardware_performance_zigzag
from zigzag.visualization.results.print_mapping import get_temporal_spatial_loops

# Test case for when more non-existent dimensions are provided in spatial_mapping_hint.

workloads = (
"zigzag/inputs/workload/resnet18.onnx",
"zigzag/inputs/workload/resnet18.yaml",
)

# Expected energy and latency for each workload defined above
ens_lats = {
"zigzag/inputs/workload/alexnet.onnx": (5589583403, 8671208),
"zigzag/inputs/workload/mobilenetv2.onnx": (932571650, 7304307),
"zigzag/inputs/workload/resnet18.onnx": (1759424218.3160002, 4495469.0),
"zigzag/inputs/workload/resnet18.yaml": (2191903732.78, 4845353.0),
}


@pytest.fixture
def mapping():
return "zigzag/inputs/mapping/tpu_like_constrainted.yaml"


@pytest.fixture
def accelerator():
return "zigzag/inputs/hardware/tpu_like.yaml"


@pytest.mark.parametrize("workload", workloads)
def test_api(workload: str, accelerator: str, mapping: str): # pylint: disable=W0621 # pylint: disable=W0621
energy, latency, cmes = get_hardware_performance_zigzag(workload, accelerator, mapping)
temp_map_default = [get_temporal_spatial_loops(cme[0])[0] for cme in cmes[0][1]]

for temp_mapping in temp_map_default:
if ("OX" in [dim[0].name for dim in temp_mapping]) and ("OY" in [dim[0].name for dim in temp_mapping]):
assert temp_mapping[-2][0].name == "OX"
assert temp_mapping[-1][0].name == "OY"
39 changes: 39 additions & 0 deletions zigzag/inputs/mapping/ascend_like_constrainted.yaml
Original file line number Diff line number Diff line change
@@ -0,0 +1,39 @@
- name: default
core_allocation: [1]
spatial_mapping:
D1:
- K, 16
D2:
- C, 16
D3:
- OX, 2
D4:
- OY, 2
temporal_ordering:
- [OX, '*']
- [OY, '*']
- ['*','*']
memory_operand_links:
O: O
W: I2
I: I1

- name: Add
core_allocation: [1]
spatial_mapping:
D1:
- G, 16
D2:
- C, 1
D3:
- OX, 1
D4:
- OY, 1
temporal_ordering:
- [OX, '*']
- [OY, '*']
- ['*','*']
memory_operand_links:
O: O
W: I2
I: I1
15 changes: 15 additions & 0 deletions zigzag/inputs/mapping/default_constrainted.yaml
Original file line number Diff line number Diff line change
@@ -0,0 +1,15 @@
- name: default
core_allocation: [1]
spatial_mapping:
D1:
- K, 32
D2:
- C, 32
temporal_ordering:
- [OX, '*']
- [OY, '*']
- ['*','*']
memory_operand_links:
O: O
W: I2
I: I1
59 changes: 59 additions & 0 deletions zigzag/inputs/mapping/edge_tpu_like_constrainted.yaml
Original file line number Diff line number Diff line change
@@ -0,0 +1,59 @@
- name: default
core_allocation: [1]
spatial_mapping:
D1:
- K, 8
D2:
- C, 8
D3:
- OX, 4
D4:
- OY, 4
temporal_ordering:
- [OY, '*']
- [OX, '*']
- ['*','*']
memory_operand_links:
O: O
W: I2
I: I1

- name: Add
core_allocation: [1]
spatial_mapping:
D1:
- G, 8
D2:
- C, 1
D3:
- OX, 1
D4:
- OY, 1
temporal_ordering:
- [OY, '*']
- [OX, '*']
- ['*','*']
memory_operand_links:
O: O
W: I2
I: I1

- name: Pooling
core_allocation: [1]
spatial_mapping:
D1:
- G, 8
D2:
- C, 1
D3:
- OX, 1
D4:
- OY, 1
temporal_ordering:
- [OY, '*']
- [OX, '*']
- ['*','*']
memory_operand_links:
O: O
W: I2
I: I1
39 changes: 39 additions & 0 deletions zigzag/inputs/mapping/meta_prototype_like_constrainted.yaml
Original file line number Diff line number Diff line change
@@ -0,0 +1,39 @@
- name: default
core_allocation: [1]
spatial_mapping:
D1:
- K, 32
D2:
- C, 2
D3:
- OX, 4
D4:
- OY, 4
temporal_ordering:
- [OY, '*']
- [OX, '*']
- ['*','*']
memory_operand_links:
O: O
W: I2
I: I1

- name: Add
core_allocation: [1]
spatial_mapping:
D1:
- G, 32
D2:
- C, 1
D3:
- OX, 1
D4:
- OY, 1
temporal_ordering:
- [OY, '*']
- [OX, '*']
- ['*','*']
memory_operand_links:
O: O
W: I2
I: I1
Loading
Loading