OpenQASM

Jump to content
From Wikipedia, the free encyclopedia
OpenQASM
Stable release
3.1.0 / May 15, 2024; 19 months ago (2024-05-15)
Implementation languagePython
LicenseApache License 2.0
Filename extensions.qasm
Websiteopenqasm.com

Open Quantum Assembly Language (OpenQASM; pronounced open kazm)[1] is a programming language designed for describing quantum circuits and algorithms for execution on quantum computers.

Language

[edit]

It is designed to be an intermediate representation that can be used by higher-level compilers to communicate with quantum hardware, and allows for the description of a wide range of quantum operations, as well as classical feed-forward flow control based on measurement outcomes.

The language includes a mechanism for describing explicit timing of instructions, and allows for the attachment of low-level definitions to gates for tasks such as calibration.[1] OpenQASM is not intended for general-purpose classical computation, and hardware implementations of the language may not support the full range of data manipulation described in the specification. Compilers for OpenQASM are expected to support a wide range of classical operations for compile-time constants, but the support for these operations on runtime values may vary between implementations.[2]

The language was first described in a paper published in July 2017,[1] and a reference source code implementation was released as part of IBM's Quantum Information Software Kit (Qiskit) for use with their IBM Quantum Experience cloud quantum computing platform.[3] The language has similar qualities to traditional hardware description languages such as Verilog.

OpenQASM defines its version at the head of a source file as a number, as in the declaration:

OPENQASM 3;

The level of OpenQASM's original published implementations is OpenQASM 2.0. Version 3.0 of the specification is the current one and can be viewed at the OpenQASM repository on GitHub.[4]

Examples

[edit]

The following is an example of OpenQASM source code from the official library. The program adds two four-bit numbers.[5]

/* * quantum ripple-carry adder * Cuccaro et al, quant-ph/0410184 */OPENQASM 3;include "stdgates.inc";gate majority a, b, c { cx c, b; cx c, a; ccx a, b, c;}gate unmaj a, b, c { ccx a, b, c; cx c, a; cx a, b;}qubit[1] cin;qubit[4] a;qubit[4] b;qubit[1] cout;bit[5] ans;uint[4] a_in = 1; // a = 0001uint[4] b_in = 15; // b = 1111// initialize qubitsreset cin;reset a;reset b;reset cout;// set input statesfor i in [0: 3] { if(bool(a_in[i])) x a[i]; if(bool(b_in[i])) x b[i];}// add a to b, storing result in bmajority cin[0], b[0], a[0];for i in [0: 2] { majority a[i], b[i + 1], a[i + 1]; }cx a[3], cout[0];for i in [2: -1: 0] { unmaj a[i], b[i + 1], a[i + 1]; }unmaj cin[0], b[0], a[0];measure b[0:3] -> ans[0:3];measure cout[0] -> ans[4];

See also

[edit]

References

[edit]
  1. ^ a b c Cross, Andrew W.; Bishop, Lev S.; Smolin, John A.; Gambetta, Jay M. (2017). "Open Quantum Assembly Language". arXiv:1707.03429 [quant-ph].
  2. ^ "OpenQASM Live Specification". Retrieved 26 December 2022.
  3. ^ qiskit-openqasm: OpenQASM specification, International Business Machines, 4 July 2017, archived from the original on 10 November 2020, retrieved 6 July 2017
  4. ^ https://github.com/openqasm/openqasm OpenQASM
  5. ^ "openqasm/adder.qasm at master · openqasm/openqasm · GitHub". GitHub. 29 January 2022.
[edit]

    OpenQASM
    Stable release
    3.1.0 / May 15, 2024; 19 months ago (2024-05-15)
    Implementation languagePython
    LicenseApache License 2.0
    Filename extensions.qasm
    Websiteopenqasm.com

    Open Quantum Assembly Language (OpenQASM; pronounced open kazm)[1] is a programming language designed for describing quantum circuits and algorithms for execution on quantum computers.

    Language

    It is designed to be an intermediate representation that can be used by higher-level compilers to communicate with quantum hardware, and allows for the description of a wide range of quantum operations, as well as classical feed-forward flow control based on measurement outcomes.

    The language includes a mechanism for describing explicit timing of instructions, and allows for the attachment of low-level definitions to gates for tasks such as calibration.[1] OpenQASM is not intended for general-purpose classical computation, and hardware implementations of the language may not support the full range of data manipulation described in the specification. Compilers for OpenQASM are expected to support a wide range of classical operations for compile-time constants, but the support for these operations on runtime values may vary between implementations.[2]

    The language was first described in a paper published in July 2017,[1] and a reference source code implementation was released as part of IBM's Quantum Information Software Kit (Qiskit) for use with their IBM Quantum Experience cloud quantum computing platform.[3] The language has similar qualities to traditional hardware description languages such as Verilog.

    OpenQASM defines its version at the head of a source file as a number, as in the declaration:

    OPENQASM 3;

    The level of OpenQASM's original published implementations is OpenQASM 2.0. Version 3.0 of the specification is the current one and can be viewed at the OpenQASM repository on GitHub.[4]

    Examples

    The following is an example of OpenQASM source code from the official library. The program adds two four-bit numbers.[5]

    /* * quantum ripple-carry adder * Cuccaro et al, quant-ph/0410184 */OPENQASM 3;include "stdgates.inc";gate majority a, b, c { cx c, b; cx c, a; ccx a, b, c;}gate unmaj a, b, c { ccx a, b, c; cx c, a; cx a, b;}qubit[1] cin;qubit[4] a;qubit[4] b;qubit[1] cout;bit[5] ans;uint[4] a_in = 1; // a = 0001uint[4] b_in = 15; // b = 1111// initialize qubitsreset cin;reset a;reset b;reset cout;// set input statesfor i in [0: 3] { if(bool(a_in[i])) x a[i]; if(bool(b_in[i])) x b[i];}// add a to b, storing result in bmajority cin[0], b[0], a[0];for i in [0: 2] { majority a[i], b[i + 1], a[i + 1]; }cx a[3], cout[0];for i in [2: -1: 0] { unmaj a[i], b[i + 1], a[i + 1]; }unmaj cin[0], b[0], a[0];measure b[0:3] -> ans[0:3];measure cout[0] -> ans[4];

    See also

    References

    1. ^ a b c Cross, Andrew W.; Bishop, Lev S.; Smolin, John A.; Gambetta, Jay M. (2017). "Open Quantum Assembly Language". arXiv:1707.03429 [quant-ph].
    2. ^ "OpenQASM Live Specification". Retrieved 26 December 2022.
    3. ^ qiskit-openqasm: OpenQASM specification, International Business Machines, 4 July 2017, archived from the original on 10 November 2020, retrieved 6 July 2017
    4. ^ https://github.com/openqasm/openqasm OpenQASM
    5. ^ "openqasm/adder.qasm at master · openqasm/openqasm · GitHub". GitHub. 29 January 2022.
    • Official website
    • openqasm on GitHub

    Retrieved from "https://en.wikipedia.org/w/index.php?title=OpenQASM&oldid=1305446199"