Przejdź do głównej treści

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 z rozwojem potrzeb związanych z QPU, lista funkcji OpenQASM była stopniowo rozszerzana; najnowsza wersja, OpenQASM 3, obejmuje rozszerzenia takie jak klasyczna kontrola przepływu z feed-forward, modyfikatory Gate'ów oraz implementacje pulsowe.

OpenQASM jest wyborem dla różnych grup odbiorców ze względu na swoją wszechstronność. Wprowadzenie do artykułu o OpenQASM 31 podaje 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ć opisy Gate'ów na poziomie czasowym lub pulsowym w różnych miejscach Circuit. Inżynierowie sprzętu projektujący klasyczne kontrolery i generatory przebiegów preferują języki, które są praktyczne do skompilowania przy danych ograniczeniach sprzętowych i które jawnie ujawniają 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

Rekomendacje

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