Vai al contenuto principale

Introduzione a OpenQASM

OpenQASM (open quantum assembly language), un'interfaccia di programmazione indipendente dalla macchina compatibile con le QPU IBM®, è un linguaggio di programmazione imperativo per descrivere i circuiti quantistici. OpenQASM utilizza il modello a circuito quantistico per esprimere i programmi quantistici come sequenze ordinate di operazioni parametrizzate (come gate, misurazioni e reset) e calcolo classico in tempo reale. Oltre agli algoritmi quantistici, OpenQASM può descrivere circuiti destinati a caratterizzare, validare o fare il debug dei processori quantistici.

Man mano che le esigenze dello sviluppo delle QPU si sono evolute, l'elenco delle funzionalità di OpenQASM si è espanso di conseguenza; l'ultima versione, OpenQASM 3, incorpora estensioni come il controllo di flusso classico feed-forward, i modificatori di gate e le implementazioni a livello di impulso.

OpenQASM è la scelta di un'ampia varietà di utenti grazie alla sua versatilità. L'introduzione al paper di OpenQASM 31 riporta alcuni esempi:

"Sebbene OpenQASM non sia un linguaggio di alto livello, molti utenti vorrebbero scrivere circuiti quantistici semplici a mano usando un linguaggio espressivo specifico per il dominio. I ricercatori che studiano la compilazione di circuiti hanno bisogno di informazioni di alto livello registrate nelle rappresentazioni intermedie per guidare gli algoritmi di ottimizzazione e sintesi. Gli sperimentatori preferiscono la comodità di scrivere circuiti a un livello relativamente alto, ma spesso hanno bisogno di modificare manualmente la temporizzazione o le descrizioni dei gate a livello di impulso in vari punti del circuito. Gli ingegneri hardware che progettano i controller classici e i generatori di forme d'onda preferiscono linguaggi pratici da compilare date le limitazioni hardware, e che rendano esplicita la struttura del circuito di cui i controller possono avvalersi."

OpenQASM è il formato di interscambio comune tra strumenti software quantistici indipendenti. Per gli sviluppatori che preferiscono uno strumento per la costruzione di circuiti, un altro per la transpilazione e così via, OpenQASM è la lingua franca che funge da ponte tra di essi.

Il Qiskit SDK fornisce modi per convertire tra OpenQASM e la classe QuantumCircuit (vedi OpenQASM 2 e Qiskit e OpenQASM 3 e Qiskit per le istruzioni).

Per ulteriori informazioni, consulta la specifica live di OpenQASM.

Esempio di codice OpenQASM: cat state​


OPENQASM 3;
include "stdgates.inc";

const n = 3; // number of qubits
qubit[n] q; // a register 'q' of n qubits
bit[n] c; // a register 'c' of n classical bits

h q[0]; // Hadamard
for k in [0:n-1] {
cnot q[k], q[k+1]; // Controlled-NOT from control qubit q[k] to target qubit q[k+1]
}

c = measure q; // measure quantum register

Passi successivi​

Raccomandazioni

Footnotes​

  1. Andrew W. Cross et al. "OpenQASM 3: A broader and deeper quantum assembly language," ACM Transactions on Quantum Computing, Volume 3, Issue 3 (2022). https://doi.org/10.48550/arXiv.2104.14722 ↩