Apparatus comprising: an array of processing cores, each processing core comprising: a processor on a first chip; and a processor cache on the first chip; and a bus for interconnecting neighbouring processing cores in the array of processing cores; wherein each processing core includes: control code which, when executed by the processor, causes the processor to access a processor cache of at least one neighbouring processing core, and wherein the array of processing cores is configured to: receive measurement data from a quantum computing layer comprising an array of qubits executing a quantum algorithm comprising a surface code, each processing core configured to receive measurements from a local patch of qubits in the array of qubits, wherein neighbouring local patches of qubits in the array of qubits are associated with neighbouring processor cores; convert the measurement data into a plurality of detection events; match a detection event to another detection event using minimum weight perfect matching to form a matched pair, the matching comprising: attempting, by a processor core associated with the local patch containing the detection event, to match the detection event to a detection event in the same local patch using an array representing the progress of the quantum algorithm that is constructed from a layered representation of potential detection events that can occur in the local patch corresponding to the processor core; and if the processor core is unable to match a detection event to another detection event in the same local patch, accessing the processor cache of a neighbouring processor core and attempting to match the detection event to a detection event in a neighbouring local patch corresponding to the neighbouring processor core, and determine one or more errors in the quantum computing algorithm performed by the quantum computing layer using the matched pair. a processor on a first chip; and a processor cache on the first chip; and a bus for interconnecting neighbouring processing cores in the array of processing cores; control code which, when executed by the processor, causes the processor to access a processor cache of at least one neighbouring processing core, and wherein the array of processing cores is configured to: receive measurement data from a quantum computing layer comprising an array of qubits executing a quantum algorithm comprising a surface code, each processing core configured to receive measurements from a local patch of qubits in the array of qubits, wherein neighbouring local patches of qubits in the array of qubits are associated with neighbouring processor cores; convert the measurement data into a plurality of detection events; receive measurement data from a quantum computing layer comprising an array of qubits executing a quantum algorithm comprising a surface code, each processing core configured to receive measurements from a local patch of qubits in the array of qubits, wherein neighbouring local patches of qubits in the array of qubits are associated with neighbouring processor cores; convert the measurement data into a plurality of detection events; match a detection event to another detection event using minimum weight perfect matching to form a matched pair, the matching comprising: attempting, by a processor core associated with the local patch containing the detection event, to match the detection event to a detection event in the same local patch using an array representing the progress of the quantum algorithm that is constructed from a layered representation of potential detection events that can occur in the local patch corresponding to the processor core; and if the processor core is unable to match a detection event to another detection event in the same local patch, accessing the processor cache of a neighbouring processor core and attempting to match the detection event to a detection event in a neighbouring local patch corresponding to the neighbouring processor core, and attempting, by a processor core associated with the local patch containing the detection event, to match the detection event to a detection event in the same local patch using an array representing the progress of the quantum algorithm that is constructed from a layered representation of potential detection events that can occur in the local patch corresponding to the processor core; and if the processor core is unable to match a detection event to another detection event in the same local patch, accessing the processor cache of a neighbouring processor core and attempting to match the detection event to a detection event in a neighbouring local patch corresponding to the neighbouring processor core, and determine one or more errors in the quantum computing algorithm performed by the quantum computing layer using the matched pair.