1414
1515from collections import defaultdict
1616import logging
17- from typing import Dict , Iterable , List , Optional , Sequence , Tuple
17+ from typing import Dict , List , Tuple
1818
1919from spinn_utilities .config_holder import get_report_path
2020from spinn_utilities .progress_bar import ProgressBar
2121from spinn_utilities .log import FormatAdapter
22- from pacman .model .graphs import AbstractVertex
23- from pacman .model .graphs .machine import MachineVertex
2422from pacman .model .resources import MultiRegionSDRAM , ConstantSDRAM
2523from pacman .model .placements import Placement
2624from spinn_front_end_common .abstract_models import (
3533logger = 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
5045class _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