def set_router_emergency_timeout(
            self, timeout, transceiver, placements,
            extra_monitor_cores_to_set):
        """ Sets the timeout of the routers

        :param tuple(int,int) timeout:
            The mantissa and exponent of the timeout value, each between
            0 and 15
        :param ~spinnman.transceiver.Transceiver transceiver:
            the spinnMan instance
        :param ~pacman.model.placements.Placements placements:
            vertex placements
        :param extra_monitor_cores_to_set:
            which monitors control the routers to set the timeout of
        :type extra_monitor_cores_to_set:
            iterable(ExtraMonitorSupportMachineVertex)
        """
        mantissa, exponent = timeout
        core_subsets = convert_vertices_to_core_subset(
            extra_monitor_cores_to_set, placements)
        process = SetRouterEmergencyTimeoutProcess(
            transceiver.scamp_connection_selector)
        try:
            process.set_timeout(mantissa, exponent, core_subsets)
        except:  # noqa: E722
            emergency_recover_state_from_failure(
                transceiver, self._app_id, self,
                placements.get_placement_of_vertex(self))
            raise
    def set_router_emergency_timeout(self, timeout, transceiver, placements,
                                     extra_monitor_cores_to_set):
        """ Sets the timeout of the routers

        :param timeout: The mantissa and exponent of the timeout value, \
            each between 0 and 15
        :type timeout: (int, int)
        :param transceiver: the spinnMan instance
        :type transceiver: :py:class:`~spinnman.Transceiver`
        :param placements: the placements object
        :type placements: :py:class:`~pacman.model.placements.Placements`
        :param extra_monitor_cores_to_set: \
            the set of vertices to change the local chip for.
        """
        mantissa, exponent = timeout
        core_subsets = convert_vertices_to_core_subset(
            extra_monitor_cores_to_set, placements)
        process = SetRouterEmergencyTimeoutProcess(
            transceiver.scamp_connection_selector)
        try:
            process.set_timeout(mantissa, exponent, core_subsets)
        except:  # noqa: E722
            emergency_recover_state_from_failure(
                transceiver, self._app_id, self,
                placements.get_placement_of_vertex(self))
            raise
    def set_router_time_outs(self, timeout, transceiver, placements,
                             extra_monitor_cores_to_set):
        """ Supports setting of the router time outs for a set of chips via\
            their extra monitor cores.

        :param timeout: The mantissa and exponent of the timeout value, \
            each between 0 and 15
        :type timeout: (int, int)
        :param transceiver: the spinnman interface
        :type transceiver: :py:class:`~spinnman.Transceiver`
        :param placements: placements object
        :type placements: :py:class:`~pacman.model.placements.Placements`
        :param extra_monitor_cores_to_set: which vertices to use
        :rtype: None
        """
        mantissa, exponent = timeout
        core_subsets = convert_vertices_to_core_subset(
            extra_monitor_cores_to_set, placements)
        process = SetRouterTimeoutProcess(
            transceiver.scamp_connection_selector)
        try:
            process.set_timeout(mantissa, exponent, core_subsets)
        except:  # noqa: E722
            emergency_recover_state_from_failure(
                transceiver, self._app_id, self,
                placements.get_placement_of_vertex(self))
            raise
 def reset_reinjection_counters(self, transceiver, placements,
                                extra_monitor_cores_to_set):
     """ Resets the counters for re injection
     """
     core_subsets = convert_vertices_to_core_subset(
         extra_monitor_cores_to_set, placements)
     process = ResetCountersProcess(transceiver.scamp_connection_selector)
     process.reset_counters(core_subsets)
 def clear_reinjection_queue(
         self, transceiver, placements, extra_monitor_cores_to_set):
     """ Clears the queues for reinjection
     """
     core_subsets = convert_vertices_to_core_subset(
         extra_monitor_cores_to_set, placements)
     process = ClearQueueProcess(transceiver.scamp_connection_selector)
     process.reset_counters(core_subsets)
 def reset_reinjection_counters(
         self, transceiver, placements, extra_monitor_cores_to_set):
     """ Resets the counters for re injection
     """
     core_subsets = convert_vertices_to_core_subset(
         extra_monitor_cores_to_set, placements)
     process = ResetCountersProcess(transceiver.scamp_connection_selector)
     process.reset_counters(core_subsets)
 def clear_reinjection_queue(self, transceiver, placements,
                             extra_monitor_cores_to_set):
     """ Clears the queues for reinjection
     """
     core_subsets = convert_vertices_to_core_subset(
         extra_monitor_cores_to_set, placements)
     process = ClearQueueProcess(transceiver.scamp_connection_selector)
     process.reset_counters(core_subsets)
    def set_reinjection_packets(self,
                                placements,
                                extra_monitor_cores_for_data,
                                transceiver,
                                point_to_point=None,
                                multicast=None,
                                nearest_neighbour=None,
                                fixed_route=None):
        """
        :param placements: placements object
        :param extra_monitor_cores_for_data: \
            the extra monitor cores to set the packets of
        :param transceiver: spinnman instance
        :param point_to_point: \
            If point to point should be set, or None if left as before
        :type point_to_point: bool or None
        :param multicast: \
            If multicast should be set, or None if left as before
        :type multicast: bool or None
        :param nearest_neighbour: \
            If nearest neighbour should be set, or None if left as before
        :type nearest_neighbour: bool or None
        :param fixed_route: \
            If fixed route should be set, or None if left as before.
        :type fixed_route: bool or None
        :rtype: None
        """
        # pylint: disable=too-many-arguments
        if multicast is not None:
            self._reinject_multicast = multicast
        if point_to_point is not None:
            self._reinject_point_to_point = point_to_point
        if nearest_neighbour is not None:
            self._reinject_nearest_neighbour = nearest_neighbour
        if fixed_route is not None:
            self._reinject_fixed_route = fixed_route

        core_subsets = convert_vertices_to_core_subset(
            extra_monitor_cores_for_data, placements)
        process = SetPacketTypesProcess(transceiver.scamp_connection_selector)
        try:
            process.set_packet_types(core_subsets,
                                     self._reinject_point_to_point,
                                     self._reinject_multicast,
                                     self._reinject_nearest_neighbour,
                                     self._reinject_fixed_route)
        except:  # noqa: E722
            emergency_recover_state_from_failure(
                transceiver, self._app_id, self,
                placements.get_placement_of_vertex(self))
            raise
    def get_reinjection_status_for_vertices(
            self, placements, extra_monitor_cores_for_data, transceiver):
        """ Get the reinjection status from a set of extra monitor cores

        :param placements: the placements object
        :param extra_monitor_cores_for_data: \
            the extra monitor cores to get status from
        :param transceiver: the spinnMan interface
        :rtype: None
        """
        core_subsets = convert_vertices_to_core_subset(
            extra_monitor_cores_for_data, placements)
        process = ReadStatusProcess(transceiver.scamp_connection_selector)
        return process.get_reinjection_status_for_core_subsets(core_subsets)
    def get_reinjection_status_for_vertices(self, placements,
                                            extra_monitor_cores_for_data,
                                            transceiver):
        """ Get the reinjection status from a set of extra monitor cores

        :param placements: the placements object
        :param extra_monitor_cores_for_data: \
            the extra monitor cores to get status from
        :param transceiver: the spinnMan interface
        :rtype: None
        """
        core_subsets = convert_vertices_to_core_subset(
            extra_monitor_cores_for_data, placements)
        process = ReadStatusProcess(transceiver.scamp_connection_selector)
        return process.get_reinjection_status_for_core_subsets(core_subsets)
    def get_reinjection_status_for_vertices(
            self, placements, extra_monitor_cores_for_data, transceiver):
        """ Get the reinjection status from a set of extra monitor cores

        :param ~pacman.model.placements.Placements placements:
            the placements object
        :param extra_monitor_cores_for_data:
            the extra monitor cores to get status from
        :type extra_monitor_cores_for_data:
            iterable(ExtraMonitorSupportMachineVertex)
        :param ~spinnman.transceiver.Transceiver transceiver:
            the spinnMan interface
        :rtype: dict(tuple(int,int), ReInjectionStatus)
        """
        core_subsets = convert_vertices_to_core_subset(
            extra_monitor_cores_for_data, placements)
        process = ReadStatusProcess(transceiver.scamp_connection_selector)
        return process.get_reinjection_status_for_core_subsets(core_subsets)
    def clear_reinjection_queue(self, transceiver, placements,
                                extra_monitor_cores_to_set):
        """ Clears the queues for reinjection

        :type transceiver: :py:class:`~spinnman.Transceiver`
        :type placements: :py:class:`~pacman.model.placements.Placements`
        :type extra_monitor_cores_to_set: \
            iterable(:py:class:`ExtraMonitorSupportMachineVertex`)
        """
        core_subsets = convert_vertices_to_core_subset(
            extra_monitor_cores_to_set, placements)
        process = ClearQueueProcess(transceiver.scamp_connection_selector)
        try:
            process.reset_counters(core_subsets)
        except:  # noqa: E722
            emergency_recover_state_from_failure(
                transceiver, self._app_id, self,
                placements.get_placement_of_vertex(self))
            raise
    def set_router_time_outs(self, timeout_mantissa, timeout_exponent,
                             transceiver, placements,
                             extra_monitor_cores_to_set):
        """ Supports setting of the router time outs for a set of chips via\
            their extra monitor cores.

        :param timeout_mantissa: what timeout mantissa to set it to
        :type timeout_exponent: int
        :type timeout_mantissa: int
        :param timeout_exponent: what timeout exponent to set it to
        :param transceiver: the spinnman interface
        :param placements: placements object
        :param extra_monitor_cores_to_set: which vertices to use
        :rtype: None
        """
        # pylint: disable=too-many-arguments
        core_subsets = convert_vertices_to_core_subset(
            extra_monitor_cores_to_set, placements)
        process = SetRouterTimeoutProcess(
            transceiver.scamp_connection_selector)
        process.set_timeout(timeout_mantissa, timeout_exponent, core_subsets)
    def set_reinjection_packets(
            self, placements, extra_monitor_cores_for_data, transceiver,
            point_to_point=None, multicast=None, nearest_neighbour=None,
            fixed_route=None):
        """
        :param placements: placements object
        :param extra_monitor_cores_for_data: \
            the extra monitor cores to set the packets of
        :param transceiver: spinnman instance
        :param point_to_point: \
            If point to point should be set, or None if left as before
        :type point_to_point: bool or None
        :param multicast: \
            If multicast should be set, or None if left as before
        :type multicast: bool or None
        :param nearest_neighbour: \
            If nearest neighbour should be set, or None if left as before
        :type nearest_neighbour: bool or None
        :param fixed_route: \
            If fixed route should be set, or None if left as before.
        :type fixed_route: bool or None
        :rtype: None
        """
        # pylint: disable=too-many-arguments
        if multicast is not None:
            self._reinject_multicast = multicast
        if point_to_point is not None:
            self._reinject_point_to_point = point_to_point
        if nearest_neighbour is not None:
            self._reinject_nearest_neighbour = nearest_neighbour
        if fixed_route is not None:
            self._reinject_fixed_route = fixed_route

        core_subsets = convert_vertices_to_core_subset(
            extra_monitor_cores_for_data, placements)
        process = SetPacketTypesProcess(transceiver.scamp_connection_selector)
        process.set_packet_types(
            core_subsets, self._reinject_point_to_point,
            self._reinject_multicast, self._reinject_nearest_neighbour,
            self._reinject_fixed_route)
Beispiel #15
0
 def unset_cores_for_data_extraction(self, transceiver,
                                     extra_monitor_cores_for_router_timeout,
                                     placements):
     if self._last_status is None:
         log.warning(
             "Cores have not been set for data extraction, so can't be"
             " unset")
     try:
         mantissa, exponent = self._last_status.router_timeout_parameters
         extra_monitor_cores_for_router_timeout[0].set_router_time_outs(
             mantissa, exponent, transceiver, placements,
             extra_monitor_cores_for_router_timeout)
         mantissa, exponent = \
             self._last_status.router_emergency_timeout_parameters
         extra_monitor_cores_for_router_timeout[0].\
             set_reinjection_router_emergency_timeout(
                 mantissa, exponent, transceiver, placements,
                 extra_monitor_cores_for_router_timeout)
         extra_monitor_cores_for_router_timeout[0].set_reinjection_packets(
             placements,
             extra_monitor_cores_for_router_timeout,
             transceiver,
             point_to_point=self._last_status.is_reinjecting_point_to_point,
             multicast=self._last_status.is_reinjecting_multicast,
             nearest_neighbour=(
                 self._last_status.is_reinjecting_nearest_neighbour),
             fixed_route=self._last_status.is_reinjecting_fixed_route)
     except Exception:
         log.error("Error resetting timeouts", exc_info=True)
         log.error("Checking if the cores are OK...")
         core_subsets = convert_vertices_to_core_subset(
             extra_monitor_cores_for_router_timeout, placements)
         try:
             error_cores = transceiver.get_cores_not_in_state(
                 core_subsets, {CPUState.RUNNING})
             if error_cores:
                 log.error(
                     "Cores in an unexpected state: {}".format(error_cores))
         except Exception:
             log.error("Couldn't get core state", exc_info=True)
 def unset_cores_for_data_extraction(
         self, transceiver, extra_monitor_cores_for_router_timeout,
         placements):
     if self._last_status is None:
         log.warning(
             "Cores have not been set for data extraction, so can't be"
             " unset")
     try:
         mantissa, exponent = self._last_status.router_timeout_parameters
         extra_monitor_cores_for_router_timeout[0].set_router_time_outs(
             mantissa, exponent, transceiver, placements,
             extra_monitor_cores_for_router_timeout)
         mantissa, exponent = \
             self._last_status.router_emergency_timeout_parameters
         extra_monitor_cores_for_router_timeout[0].\
             set_reinjection_router_emergency_timeout(
                 mantissa, exponent, transceiver, placements,
                 extra_monitor_cores_for_router_timeout)
         extra_monitor_cores_for_router_timeout[0].set_reinjection_packets(
             placements, extra_monitor_cores_for_router_timeout,
             transceiver,
             point_to_point=self._last_status.is_reinjecting_point_to_point,
             multicast=self._last_status.is_reinjecting_multicast,
             nearest_neighbour=(
                 self._last_status.is_reinjecting_nearest_neighbour),
             fixed_route=self._last_status.is_reinjecting_fixed_route)
     except Exception:
         log.error("Error resetting timeouts", exc_info=True)
         log.error("Checking if the cores are OK...")
         core_subsets = convert_vertices_to_core_subset(
             extra_monitor_cores_for_router_timeout, placements)
         try:
             error_cores = transceiver.get_cores_not_in_state(
                 core_subsets, {CPUState.RUNNING})
             if error_cores:
                 log.error("Cores in an unexpected state: {}".format(
                     error_cores))
         except Exception:
             log.error("Couldn't get core state", exc_info=True)
    def get_reinjection_status_for_vertices(self, placements,
                                            extra_monitor_cores_for_data,
                                            transceiver):
        """ Get the reinjection status from a set of extra monitor cores

        :param placements: the placements object
        :param extra_monitor_cores_for_data: \
            the extra monitor cores to get status from
        :param transceiver: the spinnMan interface
        :rtype: None
        """
        core_subsets = convert_vertices_to_core_subset(
            extra_monitor_cores_for_data, placements)
        process = ReadStatusProcess(transceiver.scamp_connection_selector)
        try:
            return process.get_reinjection_status_for_core_subsets(
                core_subsets)
        except:  # noqa: E722
            emergency_recover_state_from_failure(
                transceiver, self._app_id, self,
                placements.get_placement_of_vertex(self))
            raise
    def set_router_time_outs(
            self, timeout_mantissa, timeout_exponent, transceiver, placements,
            extra_monitor_cores_to_set):
        """ Supports setting of the router time outs for a set of chips via\
            their extra monitor cores.

        :param timeout_mantissa: what timeout mantissa to set it to
        :type timeout_exponent: int
        :type timeout_mantissa: int
        :param timeout_exponent: what timeout exponent to set it to
        :param transceiver: the spinnman interface
        :param placements: placements object
        :param extra_monitor_cores_to_set: which vertices to use
        :rtype: None
        """
        # pylint: disable=too-many-arguments
        core_subsets = convert_vertices_to_core_subset(
            extra_monitor_cores_to_set, placements)
        process = SetRouterTimeoutProcess(
            transceiver.scamp_connection_selector)
        process.set_timeout(
            timeout_mantissa, timeout_exponent, core_subsets)
    def set_reinjection_router_emergency_timeout(
            self, timeout_mantissa, timeout_exponent, transceiver, placements,
            extra_monitor_cores_to_set):
        """ Sets the timeout of the routers

        :param timeout_mantissa: \
            The mantissa of the timeout value, between 0 and 15
        :type timeout_mantissa: int
        :param timeout_exponent: \
            The exponent of the timeout value, between 0 and 15
        :type timeout_exponent: int
        :param transceiver: the spinnMan instance
        :param placements: the placements object
        :param extra_monitor_cores_to_set: \
            the set of vertices to change the local chip for.
        """
        # pylint: disable=too-many-arguments
        core_subsets = convert_vertices_to_core_subset(
            extra_monitor_cores_to_set, placements)
        process = SetRouterEmergencyTimeoutProcess(
            transceiver.scamp_connection_selector)
        process.set_timeout(
            timeout_mantissa, timeout_exponent, core_subsets)
    def set_reinjection_router_emergency_timeout(self, timeout_mantissa,
                                                 timeout_exponent, transceiver,
                                                 placements,
                                                 extra_monitor_cores_to_set):
        """ Sets the timeout of the routers

        :param timeout_mantissa: \
            The mantissa of the timeout value, between 0 and 15
        :type timeout_mantissa: int
        :param timeout_exponent: \
            The exponent of the timeout value, between 0 and 15
        :type timeout_exponent: int
        :param transceiver: the spinnMan instance
        :param placements: the placements object
        :param extra_monitor_cores_to_set: \
            the set of vertices to change the local chip for.
        """
        # pylint: disable=too-many-arguments
        core_subsets = convert_vertices_to_core_subset(
            extra_monitor_cores_to_set, placements)
        process = SetRouterEmergencyTimeoutProcess(
            transceiver.scamp_connection_selector)
        process.set_timeout(timeout_mantissa, timeout_exponent, core_subsets)
    def reset_reinjection_counters(
            self, transceiver, placements, extra_monitor_cores_to_set):
        """ Resets the counters for reinjection

        :param ~spinnman.transceiver.Transceiver transceiver:
            the spinnMan interface
        :param ~pacman.model.placements.Placements placements:
            the placements object
        :param extra_monitor_cores_to_set:
            which monitors control the routers to reset the counters of
        :type extra_monitor_cores_to_set:
            iterable(ExtraMonitorSupportMachineVertex)
        """
        core_subsets = convert_vertices_to_core_subset(
            extra_monitor_cores_to_set, placements)
        process = ResetCountersProcess(transceiver.scamp_connection_selector)
        try:
            process.reset_counters(core_subsets)
        except:  # noqa: E722
            emergency_recover_state_from_failure(
                transceiver, self._app_id, self,
                placements.get_placement_of_vertex(self))
            raise
    def clear_reinjection_queue(
            self, transceiver, placements, extra_monitor_cores_to_set):
        """ Clears the queues for reinjection

        :param ~spinnman.transceiver.Transceiver transceiver:
            the spinnMan interface
        :param ~pacman.model.placements.Placements placements:
            the placements object
        :param extra_monitor_cores_to_set:
            Which extra monitors need to clear their queues.
        :type extra_monitor_cores_to_set:
            iterable(ExtraMonitorSupportMachineVertex)
        """
        core_subsets = convert_vertices_to_core_subset(
            extra_monitor_cores_to_set, placements)
        process = ClearQueueProcess(transceiver.scamp_connection_selector)
        try:
            process.reset_counters(core_subsets)
        except:  # noqa: E722
            emergency_recover_state_from_failure(
                transceiver, self._app_id, self,
                placements.get_placement_of_vertex(self))
            raise