Overview
This section presents an overview of CUNQA, an emulator of Distributed Quantum Computing (DQC) architectures on HPC environments. Each of the architectures (or schemes) is built upon virtual QPUs, their basic building blocks.
Virtual QPU
A virtual QPU (vQPU) is a classical process running on a HPC environment with an allocated set of classical resources responsible of simulating the behaviour of a real QPU. They are composed by two parts:
Server: manages communication user-vQPU.
Simulator: performs the actual execution. Several simulators are supported, each selected at deployment time through the
--simulatorflag. The full list of supported simulators, the value to pass to--simulatorto select each one, and their feature support (communication schemes, noise and GPU) is given in the Simulators reference page.
The modular structure of CUNQA allows the implementation of other simulators on demand; see Adding a simulator.
How to deploy a vQPU?
The deployment of vQPUs is made through the bash command qraise or
through the Python function qraise. Depending on the desired vQPU type,
different argumets must be provided to the command or to the function, depending on the one being
used. These arguments will be explored inside the description of each of the DQC schemes
below.
GPU support
We support the GPU execution provided by AerSimulator. This must be enabled at compile time as discussed in the Installation section.
Noisy simulations
CUNQA allows the simulation of quantum circuits using a noise model, but only with the
no-communication model and with the AER simulator. Adding it to the other communication models is
considered part of the future improvements. In order to do this, the vQPUs have to be deployed with
a valid noise model scheme. This is done with the aforementioned qraise
Bash command or its Python function counterpart qraise, with the first
accepting the flag --backend and the second the argument backend; both being the path
to a backend configuration JSON file that, in turn, references a noise properties JSON file. The
format of these files is shown in
Backend JSON and
Noise properties JSON.
Quantum circuits
As far as our knowledge extends, none of the most commonly used quantum circuit creation interfaces
support the vQPU intercommunication instructions that we need to interact with CUNQA. Therefore,
CunqaCircuit was implemented as the basic tool to define
distributed circuits. Its communication instructions will be explored in detail in their
corresponding DQC schemes section below.
Note
Apart from CunqaCircuit, Qiskit QuantumCircuit and raw json
instructions (see Raw Quantum Circuit JSON) are supported
as circuit representations.
DQC schemes
As a DQC emulator, CUNQA supports the three basic DQC schemes:
Embarrassingly Parallel: classical distribution of quantum tasks with no communications at all.
Classical Communications: interchange classical bits between vQPUs at execution time.
Quantum Communication: implementation of teledata and telegate protocols.
Each of the previous sections will show:
How to deploy an infrastructure with the corresponding schema.
How to create and design circuits that fit that schema.
How to execute the circuits in the infrastructure.
How to program a simple example.
Real QPUs
CUNQA also allows working with real quantum hardware. In particular, the CESGA’s QMIO quantum computer can be deployed alongside vQPUs to execute quantum tasks in a truly hybrid DQC infrastructure. Check qraise to see how to deploy the real QPU.
CUNQA is constructed with the idea of, in the future, supporting real QPUs in a similar manner as vQPUs are nowadays.