Docelowe typy profilów w usłudze Azure Quantum
W tym artykule omówiono różne typy profilów target dostępne dla dostawców obliczeń kwantowych w usłudze Azure Quantum. W tej chwili ze względu na wczesny etap programowania w terenie urządzenia kwantowe mają pewne ograniczenia i wymagania dotyczące programów uruchamianych na nich.
Jednostki przetwarzania kwantowego (QPU): różne profile i ich ograniczenia
Jednostka przetwarzania kwantowego (QPU) to fizyczny lub symulowany procesor zawierający wiele połączonych kubitów, którymi można manipulować w celu obliczenia algorytmów kwantowych. Jest to centralny składnik komputera kwantowego lub symulatora kwantowego.
Urządzenia kwantowe są nadal wschodzącą 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 profilami dla jednostek QPU:
- Full: Ten profil może uruchamiać dowolny program języka Q# w granicach pamięci dla symulatorów lub liczby kubitów dla fizycznych komputerów kwantowych.
- No Control Flow: Ten profil może uruchamiać dowolny program języka Q#, który nie wymaga użycia wyników z pomiarów kubitów w celu kontrolowania przepływu programu. W ramach programu targetQ# ed dla tego rodzaju QPU wartości typu
Result
nie obsługują porównania równości. - Basic Measurement Feedback: Ten profil ma ograniczoną możliwość używania wyników z pomiarów kubitów w celu kontrolowania przepływu programu. W ramach programu targetQ# ed dla tego rodzaju QPU można porównać wartości typu
Result
jako część warunków wif
instrukcjach w operacjach, co pozwala na pomiar obwodu środkowego. Odpowiednie bloki warunkowe mogą nie zawieraćreturn
instrukcji aniset
.
Tworzenie i uruchamianie aplikacji dla Full profilu targets
Full profil targets może uruchamiać dowolny program w języku Q#, co oznacza, że można pisać programy bez ograniczeń funkcjonalności. Usługa Azure Quantum nie udostępnia jeszcze żadnego target z tego profilu.
Tworzenie i uruchamianie aplikacji dla No Control Flow profilu targets
No Control Flow profil targets może 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 nie można uruchomić tej operacji na obiekcie No Control Flowtarget:
operation SetQubitState(desired : Result, q : Qubit) : Result {
if (desired != M(q)) {
X(q);
}
}
Próba uruchomienia tej operacji na obiekcie zakończy się niepowodzeniem No Control Flowtarget , ponieważ ocenia porównanie między dwoma wynikami (desired != M(q)
), aby kontrolować przepływ obliczeń za pomocą if
instrukcji . Będzie to dotyczyć dowolnego typu rozgałęziania warunkowego, takiego jak elif
i else
instrukcje.
Uwaga
Obecnie nie można przesyłać programów kwantowych, które stosują operacje na kubitach, które zostały zmierzone w No Control Flowtargetselemecie , nawet jeśli nie używasz wyników do kontrolowania przepływu programu. Oznacza to, No Control Flowtargets że nie zezwalaj na pomiary obwodu środkowego.
Na przykład nie można uruchomić następującego kodu w obiekcie No Control Flowtarget:
operation MeasureQubit(q : Qubit) : Result {
return M(q);
}
operation SampleMeasuredQubit(q : Qubit) : Result {
H(MeasureQubit(q));
return M(MeasureQubit(q));
}
Obecnie są one No Control Flowtargets dostępne dla usługi Azure Quantum:
Dostawca: IonQ
- Symulator IonQ (
ionq.simulator
) - QPU IonQ (
ionq.qpu
)
- Symulator IonQ (
Dostawca: Rigetti
- Symulator Rigetti (
rigetti.sim.*
) - Rigetti QPU (
rigetti.qpu.*
)
- Symulator Rigetti (
Tworzenie i uruchamianie aplikacji dla Basic Measurement Feedback profilu targets
Basic Measurement Feedback profil targets może uruchamiać szeroką gamę aplikacji języka Q# z ograniczeniem, które można porównać tylko z wartościami typu Result
w ramach warunków w if
instrukcjach w operacjach. Ten typ profilu zakłada poprawę No Control Flow profilów, ale nadal podlega pewnym ograniczeniom.
Basic Measurement Feedback 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 niemierzne kubity zachowują stan kwantowy.
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ć w instrukcji warunkowej. Odpowiednie bloki warunkowe mogą nie zawierać return
instrukcji ani set
.
Na przykład następujący kod języka Q# będzie dozwolony w elemecie Basic Measurement Feedbacktarget:
operation MeasureQubit(q : Qubit) : Result {
return M(q);
}
operation SetToZero(q : Qubit) : Unit {
if MeasureQubit(q) == One { X(q); }
}
Jednak ten sam kod z przeniesioną oceną logiczną nie będzie dozwolony:
operation BeOne(q : Qubit) : Bool {
return M(q) == One;
}
operation SetToZeroUsingBeOne(q : Qubit) : Unit {
if BeOne(q) { X(q); }
}
Operacja SetQubitState
w elemecie Basic Measurement FeedbacktargetNo Control Flow może być używana tak długo, jak nie zawierasz żadnej return
instrukcji ani set
w instrukcji .if
Będzie to dotyczyć dowolnego typu rozgałęziania warunkowego, takiego jak elif
i else
instrukcje. Na przykład nie można użyć następującej operacji w obiekcie Basic Measurement Feedbacktarget:
operation SetQubitState(desired : Result, q : Qubit) : Result {
if desired != M(q) {
X(q);
return M(q);
}
}
Obecnie są one Basic Measurement Feedbacktargets dostępne dla usługi Azure Quantum:
- Dostawca: Quantinuum
- Emulatory quantinuum (
quantinuum.sim.h1-1e
,quantinuum.sim.h2-1e
) - Kwantinuum QPU (
quantinuum.qpu.h1-1
,quantinuum.qpu.h2-1
)
- Emulatory quantinuum (
Opinia
https://aka.ms/ContentUserFeedback.
Dostępne już wkrótce: W 2024 r. będziemy stopniowo wycofywać zgłoszenia z serwisu GitHub jako mechanizm przesyłania opinii na temat zawartości i zastępować go nowym systemem opinii. Aby uzyskać więcej informacji, sprawdź:Prześlij i wyświetl opinię dla