Wprowadzenie do OpenQASM
OpenQASM (otwarty kwantowy język asemblera), niezależny od maszyny interfejs programistyczny zgodny z QPU IBM®, to imperatywny język programowania służący do opisu Circuit kwantowych. OpenQASM wykorzystuje model Circuit kwantowego do wyrażania programów kwantowych jako uporządkowanych sekwencji sparametryzowanych operacji (takich jak Gate'y, pomiary i resety) oraz klasycznych obliczeń w czasie rzeczywistym. Oprócz algorytmów kwantowych, OpenQASM może opisywać Circuit przeznaczone do charakteryzowania, walidacji lub debugowania procesorów kwantowych.
Wraz ze zmianą potrzeb związanych z rozwojem QPU, lista funkcji OpenQASM odpowiednio się rozszerzała; najnowsza wersja, OpenQASM 3, obejmuje rozszerzenia takie jak klasyczne sterowanie przepływem ze sprzężeniem w przód (feed-forward), modyfikatory Gate'ów oraz implementacje na poziomie impulsów.
Po OpenQASM sięgają różne grupy użytkowników ze względu na jego wszechstronność. We wstępie do artykułu o OpenQASM 31 podano przykłady:
"Chociaż OpenQASM nie jest językiem wysokiego poziomu, wielu użytkowników chciałoby pisać proste Circuit kwantowe ręcznie, używając ekspresywnego języka dziedzinowego. Badacze zajmujący się kompilacją Circuit potrzebują informacji wysokiego poziomu zapisanych w reprezentacjach pośrednich, aby wspierać algorytmy optymalizacji i syntezy. Eksperymentatorzy preferują wygodę pisania Circuit na stosunkowo wysokim poziomie, ale często muszą ręcznie modyfikować zależności czasowe lub opisy Gate'ów na poziomie impulsów w różnych miejscach Circuit. Inżynierowie sprzętu projektujący klasyczne kontrolery i generatory przebiegów preferują języki, które łatwo skompilować przy danych ograniczeniach sprzętowych i które jawnie wyrażają strukturę Circuit, z której kontrolery mogą korzystać."
OpenQASM jest wspólnym formatem wymiany między niezależnymi narzędziami programistycznymi do obliczeń kwantowych. Dla programistów, którzy preferują jedno narzędzie do budowania Circuit, inne do Transpilacji i tak dalej, OpenQASM jest lingua franca pełniącą rolę pomostu między nimi.
Qiskit SDK udostępnia sposoby konwersji między OpenQASM a klasą QuantumCircuit (instrukcje znajdziesz w artykułach OpenQASM 2 i Qiskit oraz OpenQASM 3 i Qiskit).
Więcej informacji znajdziesz w aktualnej specyfikacji OpenQASM.
Przykład kodu OpenQASM: stan kota
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
Następne kroki
-
Dowiedz się, jak generować kod OpenQASM, korzystając z przewodnika IBM Quantum Composer.
-
Zapoznaj się z tabelą funkcji OpenQASM 3.
-
Przeczytaj dokumentację API OpenQASM 3 dla Qiskit.
-
Przeczytaj dokumentację API OpenQASM 2 dla Qiskit.
-
Odwiedź aktualną specyfikację OpenQASM.