OpenQASM
Open Quantum Assembly Language (OpenQASM; pronunciat open kazm) és un llenguatge de programació dissenyat per descriure circuits i algoritmes quàntics per a la seva execució en ordinadors quàntics.[1] LlenguaEstà dissenyat per ser una representació intermèdia que poden utilitzar els compiladors de nivell superior per comunicar-se amb el maquinari quàntic, i permet la descripció d'una àmplia gamma d'operacions quàntiques, així com el control de flux clàssic de prealimentació basat en els resultats de les mesures.[2] El llenguatge inclou un mecanisme per descriure la sincronització explícita de les instruccions i permet adjuntar definicions de baix nivell a les portes per a tasques com la calibració. OpenQASM no està pensat per a la computació clàssica d'ús general, i les implementacions de maquinari del llenguatge poden no admetre tota la manipulació de dades descrita a l'especificació. S'espera que els compiladors per a OpenQASM admetin una àmplia gamma d'operacions clàssiques per a constants de temps de compilació, però la compatibilitat amb aquestes operacions en valors de temps d'execució pot variar entre implementacions.[3] El llenguatge es va descriure per primera vegada en un article publicat el juliol de 2017, i es va publicar una implementació de codi font de referència com a part del Quantum Information Software Kit (Qiskit) d'IBM per al seu ús amb la seva plataforma de computació quàntica al núvol IBM Quantum Experience. El llenguatge té qualitats similars als llenguatges de descripció de maquinari tradicionals com ara Verilog. OpenQASM defineix la seva versió al capdavant d'un fitxer font com un número, com a la declaració:[4] OPENQASM 3;
El nivell de les implementacions originals publicades d'OpenQASM és OpenQASM 2.0. La versió 3.0 de l'especificació és l'actual i es pot veure al repositori d'OpenQASM a GitHub. ExemplesEl següent és un exemple de codi font d'OpenQASM de la biblioteca oficial. El programa afegeix dos nombres de quatre bits.[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 = 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];
Referències
|