Overview

The Intel® Quantum Software Development Kit (SDK) is a high level programming environment that allows users to write software targeted to the Intel® quantum hardware. The Intel® Quantum SDK currently provides a choice of several simulation backends specialized for different tasks. When Intel® quantum hardware backends are available in the future, users will be able to seamlessly transition their simulations to execute on physical qubits with minimal software changes.

Developing applications that run on quantum computers involves considerable challenges whose solutions we often take for granted when programming the classical computers we use every day. The Intel® Quantum Computing Stack encapsulates these challenges as internal modules that include: quantum compilation (front-end and back-end), runtime mapping and scheduling, fault tolerance support, control electronics, and qubit management. The Intel® Quantum SDK is designed to fully integrate with these modules of the Intel® Quantum Computing Stack. It includes optimizations and decompositions based on the LLVM compiler framework targeting the Intel® Quantum Computing Stack.

The Intel® Quantum SDK provides an intuitive C++ based application programming interface (API). This API allows users to express quantum circuit diagrams using C++ code. At this point, readers new to quantum computing and interpreting quantum circuit diagrams may benefit from visiting the Introduction to Quantum Computing section and the collection of Tutorials.

Let’s consider a simple example. The following quantum circuit, which represents the famous entangled EPR or Bell State [EPR35] [Bel64],

A quantum circuit on two qubits, both starting in the 0 state. The circuit consists of an H gate on qubit 0, a CNOT gate on qubits 0 and 1, and a measurement gate on qubit 0.

is expressed with the Intel® Quantum SDK using the following C++ code:

Listing 1 Bell State Preparation & Measurement Example
 1/* Gate definitions and key words */
 2#include <clang/Quantum/quintrinsics.h>
 3
 4/* Quantum Runtime APIs */
 5#include <quantum_full_state_simulator_backend.h>
 6
 7#include <iostream>
 8
 9const int num_qubits = 2;
10/* Declare 2 qubits */
11qbit q[num_qubits];
12
13/* The quantum logic must be in a function with the keyword quantum_kernel */
14/* pre-pended to the signature */
15quantum_kernel void prep_and_meas_bell(cbit read_out) {
16    /* Prepare both qubits in the |0> state */
17    PrepZ(q[0]);
18    PrepZ(q[1]);
19
20    /* Apply a Hadamard gate to the top qubit */
21    H(q[0]);
22
23    /* Apply a Controlled-NOT gate with the top qubit as
24     * the control and the bottom qubit as the target */
25    CNOT(q[0], q[1]);
26
27    /* Measure qubit 0 */
28    MeasZ(q[0], read_out);
29}
30
31int main() {
32    /* Configure the simulator */
33    iqsdk::IqsConfig settings(num_qubits, "noiseless");
34    iqsdk::FullStateSimulator quantum_8086(settings);
35    if (iqsdk::QRT_ERROR_SUCCESS != quantum_8086.ready()) return 1;
36
37    /* Declare 2 measurement readouts */
38    /* Measurements are stored here as "classical bits" */
39    cbit classical_bit;
40
41    prep_and_meas_bell(classical_bit);
42
43    /* Here we can use the FullStateSimulator APIs to get data */
44    /* or we can write classical logic that interacts with our measurement */
45    /* results, as below. */
46    bool result = classical_bit;
47    if (result) {
48        std::cout << "True\n";
49    }
50    else {
51        std::cout << "False\n";
52    }
53
54    return 0;
55}

Ready to get started building quantum circuits? If so, feel free to jump straight to the Getting Started Guide to learn about the SDK’s software requirements, installation, usage, and how to interpret the output. Otherwise, it may be helpful to brush up on the basics and investigate the resource material found in the Introduction to Quantum Computing section. The collection of Tutorials and Samples may also be of interest.

To summarize, the Intel® Quantum SDK includes:

  • An intuitive user interface based on the C++ programming language.

  • Optimizations and decompositions based on the LLVM compiler framework specifically targeted at the Intel® Quantum Computing Stack.

  • A full compilation flow that produces an executable using a user’s selected backend.

Authoring a quantum-accelerated application in the Intel® Quantum SDK follows the programming paradigm of other hardware accelerators. Quantum programs are written in a C++ programming environment that has been extended to allow the user to express quantum circuits as quantum logical operations. Depending on whether the user is targeting a simulation environment or qubit hardware, our quantum runtime library will direct the quantum workload to the appropriate backend during runtime execution.

Currently available backends: