From 7aefde92602a799e98a1f93fc1f4fd1f12b8a7cd Mon Sep 17 00:00:00 2001 From: Andrew Rowley Date: Wed, 25 Aug 2021 10:59:38 +0100 Subject: [PATCH 1/4] Add progress bar to reading of machine --- spinnman/model/p2p_table.py | 8 ++++++++ spinnman/processes/get_machine_process.py | 6 +++++- 2 files changed, 13 insertions(+), 1 deletion(-) diff --git a/spinnman/model/p2p_table.py b/spinnman/model/p2p_table.py index 6f27c8176..aacb0d425 100644 --- a/spinnman/model/p2p_table.py +++ b/spinnman/model/p2p_table.py @@ -110,3 +110,11 @@ def get_route(self, x, y): if (x, y) in self._routes: return self._routes[x, y] return P2PTableRoute.NONE + + @property + def n_routes(self): + """ The number of routes in the table + + :rtype: int + """ + return len(self._routes) diff --git a/spinnman/processes/get_machine_process.py b/spinnman/processes/get_machine_process.py index 770686d7b..6cc19bd2e 100644 --- a/spinnman/processes/get_machine_process.py +++ b/spinnman/processes/get_machine_process.py @@ -36,6 +36,7 @@ from spinnman.model import P2PTable from spinnman.model.enums import CPUState from .abstract_multi_connection_process import AbstractMultiConnectionProcess +from spinn_utilities.progress_bar import ProgressBar logger = FormatAdapter(logging.getLogger(__name__)) @@ -201,7 +202,10 @@ def get_machine_details(self, boot_x, boot_y, width, height): p2p_table = P2PTable(width, height, self._p2p_column_data) # Get the chip information for each chip - for (x, y) in p2p_table.iterchips(): + progress = ProgressBar( + p2p_table.n_routes, + f"Reading details from {p2p_table.n_routes} chips") + for (x, y) in progress.over(p2p_table.iterchips()): self._send_request(GetChipInfo(x, y), self._receive_chip_info) self._finish() with suppress(Exception): From 7ad988a2d6ea890af7b4a16a3b2dfce510a83be0 Mon Sep 17 00:00:00 2001 From: Andrew Rowley Date: Wed, 25 Aug 2021 11:07:19 +0100 Subject: [PATCH 2/4] Progress over things received, not sent --- spinnman/processes/get_machine_process.py | 20 +++++++++++++------- 1 file changed, 13 insertions(+), 7 deletions(-) diff --git a/spinnman/processes/get_machine_process.py b/spinnman/processes/get_machine_process.py index 6cc19bd2e..8f0ed4365 100644 --- a/spinnman/processes/get_machine_process.py +++ b/spinnman/processes/get_machine_process.py @@ -55,13 +55,15 @@ class GetMachineProcess(AbstractMultiConnectionProcess): "_ignore_cores_map", "_p2p_column_data", # Used if there are any ignore core requests - # Holds a mapping from (x,y) to a mapping of phsyical to virtual core + # Holds a mapping from (x,y) to a mapping of physical to virtual core "_virtual_map", - # Directory to put the ingore report if required + # Directory to put the ignore report if required "_default_report_directory", - # Ignore report file path for ignre report. + # Ignore report file path for ignore report. # Kept as None until first write - "_report_file"] + "_report_file", + # Progress bar to fill in as details are received + "_progress"] def __init__(self, connection_selector, default_report_directory=None): """ @@ -83,7 +85,8 @@ def __init__(self, connection_selector, default_report_directory=None): self._ethernets = None self._virtual_map = {} self._default_report_directory = default_report_directory - self._report_file = None + self._report_file = None# + self._progress = None def _make_chip(self, chip_info, machine): """ Creates a chip from a ChipSummaryInfo structure. @@ -164,6 +167,8 @@ def _receive_chip_info(self, scp_read_chip_info_response): """ chip_info = scp_read_chip_info_response.chip_info self._chip_info[chip_info.x, chip_info.y] = chip_info + if self._progress is not None: + self._progress.update() def _receive_error(self, request, exception, tb, connection): """ @@ -202,12 +207,13 @@ def get_machine_details(self, boot_x, boot_y, width, height): p2p_table = P2PTable(width, height, self._p2p_column_data) # Get the chip information for each chip - progress = ProgressBar( + self._progress = ProgressBar( p2p_table.n_routes, f"Reading details from {p2p_table.n_routes} chips") - for (x, y) in progress.over(p2p_table.iterchips()): + for (x, y) in p2p_table.iterchips(): self._send_request(GetChipInfo(x, y), self._receive_chip_info) self._finish() + self._progress.end() with suppress(Exception): # Ignore errors, as any error here just means that a chip # is down that wasn't marked as down From e2b17eec97f51a41f0f4b1158e442ba9d747d7d2 Mon Sep 17 00:00:00 2001 From: Andrew Rowley Date: Wed, 25 Aug 2021 11:10:34 +0100 Subject: [PATCH 3/4] Remove keyboard mash --- spinnman/processes/get_machine_process.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/spinnman/processes/get_machine_process.py b/spinnman/processes/get_machine_process.py index 8f0ed4365..9fd9e0196 100644 --- a/spinnman/processes/get_machine_process.py +++ b/spinnman/processes/get_machine_process.py @@ -85,7 +85,7 @@ def __init__(self, connection_selector, default_report_directory=None): self._ethernets = None self._virtual_map = {} self._default_report_directory = default_report_directory - self._report_file = None# + self._report_file = None self._progress = None def _make_chip(self, chip_info, machine): From ea1a698942e0332723805a135798719a50f12714 Mon Sep 17 00:00:00 2001 From: Andrew Rowley Date: Thu, 17 Nov 2022 09:15:26 +0000 Subject: [PATCH 4/4] Flake8 --- spinnman/processes/get_machine_process.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/spinnman/processes/get_machine_process.py b/spinnman/processes/get_machine_process.py index 97cd25aa6..eb3005845 100644 --- a/spinnman/processes/get_machine_process.py +++ b/spinnman/processes/get_machine_process.py @@ -87,7 +87,7 @@ def __init__(self, connection_selector): # Maps between virtual and physical cores self._virtual_to_physical_map = dict() self._physical_to_virtual_map = dict() - + # Keep track of progress self._progress = None