Typy profilów QIR target w usłudze Azure Quantum
W tym artykule omówiono różne typy profilów QIR target dostępne dla dostawców obliczeń kwantowych w usłudze Azure Quantum. Typy profilów QIR target służą do definiowania możliwości urządzeń kwantowych, które można target za pomocą programów języka Q#.
Target profile i ich ograniczenia
Urządzenia kwantowe są nadal nową technologią, a nie wszystkie z nich mogą uruchamiać cały kod języka Q#. W związku z tym należy pamiętać o pewnych ograniczeniach podczas tworzenia programów dla różnych targetsprogramów . Obecnie usługa Azure Quantum i zestaw QDK zarządzają trzema różnymi target profilami:
- Unrestricted: Ten profil może uruchamiać dowolny program QIR w granicach pamięci dla symulatorów lub liczby kubitów fizycznych komputerów kwantowych.
- QIR base: Ten profil może uruchamiać dowolny program w języku Q#, który nie wymaga użycia wyników z pomiarów kubitów w celu kontrolowania przepływu programu. W programie Q# przeznaczonym dla tego rodzaju QPU wartości typu
Result
nie obsługują porównania równości. - QIR Adaptive RI: Ten profil ma ograniczoną możliwość używania wyników z pomiarów kubitów w celu kontrolowania przepływu programu. W programie Q# przeznaczonym dla tego rodzaju QPU można porównać wartości typu
Result
w ramach warunków wif
instrukcjach w operacjach, co pozwala na pomiar średniego obwodu.
Tworzenie i uruchamianie aplikacji dla Unrestrictedtarget profilu
Unrestrictedtarget profile mogą uruchamiać dowolny program, co oznacza, że można pisać programy w języku Q# bez ograniczeń funkcjonalności. Usługa Azure Quantum nie udostępnia żadnego target z tych profilów. Można jednak uruchamiać Unrestricted programy języka Q# w symulatorach udostępnianych przez zestaw QDK.
Konfigurowanie Unrestrictedtarget profilu
W programie Visual Studio Code:
- Wybierz pozycję Widok —> paleta poleceń i wpisz Q#: Ustaw profil usługi Azure Quantum QIRtarget. Naciśnij klawisz Enter.
- Wybierz pozycję Bez ograniczeń.
W języku Python można ustawić target profil przy użyciu qsharp.init
metody .
qsharp.init(target_profile=qsharp.TargetProfile.Unrestricted)
Tworzenie i uruchamianie aplikacji dla QIR Basetarget profilu
QIR Basetarget profile mogą uruchamiać szeroką gamę aplikacji języka Q# z ograniczeniem, że nie mogą używać wyników z pomiarów kubitów w celu kontrolowania przepływu programu. W szczególności wartości typu Result
nie obsługują porównania równości.
Na przykład tej operacji nie można uruchomić w obiekcie QIR Basetarget:
operation FlipQubitOnZero() : Unit {
use q = Qubit();
if M(q) == Zero {
X(q);
}
}
Jeśli spróbujesz uruchomić tę operację w obiekcie QIR Basetarget, operacja zakończy się niepowodzeniem, ponieważ wykonuje porównanie przy użyciu wyniku pomiaru (M(q) == Zero
) w celu sterowania przepływem obliczeniowym if
za pomocą instrukcji . Dotyczy to również dowolnego typu rozgałęziania warunkowego, takiego jak elif
instrukcje i else
.
Konfigurowanie QIR Basetarget profilu
W programie Visual Studio Code:
- Wybierz pozycję Widok —> paleta poleceń i wpisz Q#: Ustaw profil usługi Azure Quantum QIRtarget. Naciśnij klawisz Enter.
- Wybierz pozycję Baza QIR.
W języku Python można ustawić target profil przy użyciu qsharp.init
metody .
qsharp.init(target_profile=qsharp.TargetProfile.Base)
Obsługiwane targets
Obecnie są one QIR Basetargets dostępne dla usługi Azure Quantum:
Dostawca: IonQ
Dostawca: Rigetti
Tworzenie i uruchamianie aplikacji dla QIR Adaptive RI profilu targets
QIR Adaptive RI Profil targets może uruchamiać szeroką gamę aplikacji języka Q# z pewnymi ograniczeniami. Ten typ profilu zakłada poprawę QIR Base profilów, ale nadal podlega pewnym ograniczeniom.
QIR Adaptive RI profil targets zezwala na operacje warunkowe oparte na pomiarach i pomiary obwodu środkowego, co oznacza, że kubity mogą być selektywnie mierzone w punkcie innym niż ostateczna instrukcja programu kwantowego, a dane wyjściowe pomiaru mogą być używane w innych operacjach. Pomiar obwodu środkowego umożliwia wiele pomiarów w dowolnym momencie w całym programie kwantowym. Informacje kwantowe mierzonych kubitów zwijają się do stanu klasycznego (zero lub jeden), ale niemierzonego kubitów pozostają w stanie kwantowym.
W języku Q# podczas mierzenia kubitu zwracana jest wartość typu Result
. Jeśli chcesz użyć tego wyniku w instrukcji warunkowej, musisz bezpośrednio porównać instrukcję warunkową. Odpowiednie bloki warunkowe mogą nie zawierać return
instrukcji lub set
.
Na przykład następujący kod języka Q# będzie dozwolony w pliku QIR Adaptive RItarget:
operation MeasureQubit(q : Qubit) : Result {
return M(q);
}
operation SetToZero(q : Qubit) : Unit {
if MeasureQubit(q) == One { X(q); }
}
Konfigurowanie QIR Adaptive RItarget profilu
W programie Visual Studio Code:
- Wybierz pozycję Widok —> paleta poleceń i wpisz Q#: Ustaw profil usługi Azure Quantum QIRtarget. Naciśnij klawisz Enter.
- Wybierz opcję QIR Adaptive RI.
W języku Python można ustawić target profil przy użyciu qsharp.init
metody .
qsharp.init(target_profile=qsharp.TargetProfile.Adaptive_RI)
Obsługiwane targets
Obecnie są one QIR Adaptive RItargets dostępne dla usługi Azure Quantum:
- Dostawca: Quantinuum
- Emulatory quantinuum (
quantinuum.sim.h1-1e
,quantinuum.sim.h2-1e
) - Kwantynauum QPU (
quantinuum.qpu.h1-1
,quantinuum.qpu.h2-1
)
- Emulatory quantinuum (