Skip to content

Commit 675dfd7

Browse files
authored
Merge branch 'master' into board_report
2 parents b335f15 + 9e24188 commit 675dfd7

2 files changed

Lines changed: 48 additions & 55 deletions

File tree

spinn_front_end_common/abstract_models/abstract_generates_data_specification.py

Lines changed: 12 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -12,7 +12,7 @@
1212
# See the License for the specific language governing permissions and
1313
# limitations under the License.
1414
from __future__ import annotations
15-
from typing import TYPE_CHECKING
15+
from typing import Optional, TYPE_CHECKING
1616
from spinn_utilities.abstract_base import AbstractBase, abstractmethod
1717
from spinn_utilities.overrides import overrides
1818
from spinn_utilities.require_subclass import require_subclass
@@ -56,3 +56,14 @@ def sdram_required(self) -> AbstractSDRAM:
5656
Defined here too so can be called on object known to be this type
5757
"""
5858
raise NotImplementedError
59+
60+
@property
61+
@abstractmethod
62+
@overrides(MachineVertex.label)
63+
def label(self) -> Optional[str]:
64+
"""
65+
See MachineVertex.label
66+
67+
Defined here too so can be called on object known to be this type
68+
"""
69+
raise NotImplementedError

spinn_front_end_common/interface/interface_functions/graph_data_specification_writer.py

Lines changed: 36 additions & 54 deletions
Original file line numberDiff line numberDiff line change
@@ -14,13 +14,11 @@
1414

1515
from collections import defaultdict
1616
import logging
17-
from typing import Dict, Iterable, List, Optional, Sequence, Tuple
17+
from typing import Dict, List, Tuple
1818

1919
from spinn_utilities.config_holder import get_report_path
2020
from spinn_utilities.progress_bar import ProgressBar
2121
from spinn_utilities.log import FormatAdapter
22-
from pacman.model.graphs import AbstractVertex
23-
from pacman.model.graphs.machine import MachineVertex
2422
from pacman.model.resources import MultiRegionSDRAM, ConstantSDRAM
2523
from pacman.model.placements import Placement
2624
from spinn_front_end_common.abstract_models import (
@@ -35,16 +33,13 @@
3533
logger = FormatAdapter(logging.getLogger(__name__))
3634

3735

38-
def graph_data_specification_writer(
39-
placement_order: Optional[Sequence[Placement]] = None) -> str:
36+
def graph_data_specification_writer() -> str:
4037
"""
41-
:param placement_order:
42-
the optional order in which placements should be examined
4338
:return: Path to DSG targets database
4439
:raises ConfigurationException:
4540
If the DSG asks to use more SDRAM than is available.
4641
"""
47-
return _GraphDataSpecificationWriter().run(placement_order)
42+
return _GraphDataSpecificationWriter().run()
4843

4944

5045
class _GraphDataSpecificationWriter(object):
@@ -64,11 +59,8 @@ def __init__(self) -> None:
6459
Dict[Tuple[int, int], List[AbstractGeneratesDataSpecification]] =\
6560
defaultdict(list)
6661

67-
def run(self,
68-
placement_order: Optional[Sequence[Placement]] = None) -> str:
62+
def run(self) -> str:
6963
"""
70-
:param placement_order:
71-
the optional order in which placements should be examined
7264
:return: Path to DSG targets database
7365
:raises ConfigurationException:
7466
If the DSG asks to use more SDRAM than is available.
@@ -80,26 +72,21 @@ def run(self,
8072
ds_db.write_session_credentials_to_db()
8173
ds_db.set_info()
8274

83-
placements: Iterable[Placement]
84-
if placement_order is None:
85-
placements = FecDataView.iterate_placemements()
86-
n_placements = FecDataView.get_n_placements()
87-
else:
88-
placements = placement_order
89-
n_placements = len(placement_order)
90-
91-
progress = ProgressBar(n_placements,
75+
progress = ProgressBar(FecDataView.get_n_placements(),
9276
"Generating data specifications")
9377
vertices_to_reset: List[AbstractRewritesDataSpecification] = list()
9478

95-
for placement in progress.over(placements):
79+
for placement in progress.over(FecDataView.iterate_placemements()):
9680
# Try to generate the data spec for the placement
9781
vertex = placement.vertex
98-
generated = self.__generate_data_spec_for_vertices(
82+
if not isinstance(
83+
vertex, AbstractGeneratesDataSpecification):
84+
continue
85+
86+
self.__generate_data_spec_for_vertices(
9987
placement, vertex, ds_db)
10088

101-
if generated and isinstance(
102-
vertex, AbstractRewritesDataSpecification):
89+
if isinstance(vertex, AbstractRewritesDataSpecification):
10390
vertices_to_reset.append(vertex)
10491

10592
# Ensure that the vertices know their regions have been reloaded
@@ -111,19 +98,15 @@ def run(self,
11198
return path
11299

113100
def __generate_data_spec_for_vertices(
114-
self, placement: Placement, vertex: AbstractVertex,
115-
ds_db: DsSqlliteDatabase) -> bool:
101+
self, placement: Placement,
102+
vertex: AbstractGeneratesDataSpecification,
103+
ds_db: DsSqlliteDatabase) -> None:
116104
"""
117105
:param placement: placement of machine graph to cores
118106
:param vertex: the specific vertex to write DSG for.
119107
:param ds_db:
120-
:return: True if the vertex was data spec-able, False otherwise
121108
:raises ConfigurationException: if things don't fit
122109
"""
123-
# if the vertex can generate a DSG, call it
124-
if not isinstance(vertex, AbstractGeneratesDataSpecification):
125-
return False
126-
127110
x = placement.x
128111
y = placement.y
129112
p = placement.p
@@ -140,34 +123,33 @@ def __generate_data_spec_for_vertices(
140123
total_est_size = 0
141124

142125
# Check per-region memory usage if possible
143-
if isinstance(vertex, MachineVertex):
144-
sdram = vertex.sdram_required
145-
if isinstance(sdram, MultiRegionSDRAM):
146-
region_sizes = ds_db.get_region_sizes(x, y, p)
147-
for i, size in region_sizes.items():
148-
est_size = sdram.regions.get(i, ConstantSDRAM(0))
149-
est_size = est_size.get_total_sdram(
150-
FecDataView.get_max_run_time_steps())
151-
total_est_size += est_size
152-
if size > est_size:
153-
raise ValueError(
154-
f"Region {i} of vertex {vertex.label} is bigger"
155-
f" than expected: {est_size} estimated vs. {size}"
156-
" actual")
157-
else:
158-
total_est_size = sdram.get_total_sdram(
126+
sdram = vertex.sdram_required
127+
if isinstance(sdram, MultiRegionSDRAM):
128+
region_sizes = ds_db.get_region_sizes(x, y, p)
129+
for i, size in region_sizes.items():
130+
est_sdram = sdram.regions.get(i, ConstantSDRAM(0))
131+
est_size = est_sdram.get_total_sdram(
159132
FecDataView.get_max_run_time_steps())
160-
161-
if total_size > total_est_size:
162-
raise ValueError(
163-
f"Data of vertex {vertex.label} is bigger than expected:"
164-
f" estimated: {total_est_size} vs. actual: {total_size}")
133+
total_est_size += est_size
134+
if size > est_size:
135+
raise ValueError(
136+
f"Region {i} of vertex {vertex.label} is bigger"
137+
f" than expected: {est_size} estimated vs. {size}"
138+
" actual")
139+
else:
140+
total_est_size = sdram.get_total_sdram(
141+
FecDataView.get_max_run_time_steps())
142+
143+
if total_size > total_est_size:
144+
raise ValueError(
145+
f"Data of vertex {vertex.label} is bigger than expected:"
146+
f" estimated: {total_est_size} vs. actual: {total_size}")
165147

166148
self._vertices_by_chip[x, y].append(vertex)
167149
self._sdram_usage[x, y] += total_size
168150
if (self._sdram_usage[x, y] <=
169151
FecDataView().get_chip_at(x, y).sdram):
170-
return True
152+
return
171153

172154
# creating the error message which contains the memory usage of
173155
# what each core within the chip uses and its original estimate.

0 commit comments

Comments
 (0)