OpenQASM

From Wikipedia the free encyclopedia

OpenQASM
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. 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.

Examples[edit]

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

/*  * 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 = 0001 uint[4] b_in = 15; // b = 1111 // initialize qubits reset cin; reset a; reset b; reset cout;  // set input states for 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 b majority 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]; 

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 December 26, 2022.
  3. ^ qiskit-openqasm: OpenQASM specification, International Business Machines, 2017-07-04, retrieved 2017-07-06
  4. ^ "openqasm/adder.qasm at master · openqasm/openqasm · GitHub". GitHub. 29 January 2022.

External links[edit]