Source code for spinnman.processes.get_cpu_info_process

from spinnman.model import CPUInfo
from spinnman.constants import CPU_INFO_BYTES
from spinnman.messages.spinnaker_boot import SystemVariableDefinition
from spinnman.utilities.utility_functions import get_vcpu_address
from spinnman.messages.scp.impl import ReadMemory
from .abstract_multi_connection_process import AbstractMultiConnectionProcess

import functools
import struct


VCPU = SystemVariableDefinition.cpu_information_base_address


[docs]class GetCPUInfoProcess(AbstractMultiConnectionProcess): def __init__(self, connection_selector): AbstractMultiConnectionProcess.__init__(self, connection_selector) self._vcpu_offsets = None self._cpu_info = list()
[docs] def handle_read_vcpu_offset(self, x, y, response): offset = struct.unpack_from( VCPU.data_type.struct_code, response.data, response.offset)[0] self._vcpu_offsets[x, y] = offset
[docs] def handle_response(self, x, y, p, response): self._cpu_info.append(CPUInfo(x, y, p, response.data, response.offset))
[docs] def get_cpu_info(self, core_subsets): for core_subset in core_subsets: x = core_subset.x y = core_subset.y for p in core_subset.processor_ids: self._send_request(ReadMemory( x, y, get_vcpu_address(p), CPU_INFO_BYTES), functools.partial(self.handle_response, x, y, p)) self._finish() self.check_for_error() return self._cpu_info