Uwaga
Dostęp do tej strony wymaga autoryzacji. Może spróbować zalogować się lub zmienić katalogi.
Dostęp do tej strony wymaga autoryzacji. Możesz spróbować zmienić katalogi.
Urządzenia kwantowe są nadal nową technologią i niestety nie wszystkie z nich mogą uruchamiać każdy kod w języku Q#. W związku z tym należy pamiętać o pewnych ograniczeniach podczas tworzenia programów kwantowych. Typy profilów target służą do definiowania możliwości urządzeń kwantowych, które można target za pomocą programów Q#, czyli możliwości obecnych urządzeń kwantowych dostępnych w usłudze Azure Quantum.
W tym artykule omówiono różne typy profilów target w usłudze Azure Quantum, ich ograniczenia oraz sposób ich konfigurowania przy użyciu zestawu Quantum Development Kit (QDK).
Profile docelowe i ich ograniczenia
Obecnie usługa Azure Quantum i zestaw QDK obsługują trzy różne profile target, w zależności od ich możliwości uruchamiania programów kwantowej reprezentacji pośredniej (QIR) .
- Unrestricted: Ten profil może uruchamiać dowolny program QIR, a tym samym dowolny program języka Q#, w ramach limitów pamięci dla symulatorów lub liczby kubitów dla 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 programów dla profilu Unrestrictedtarget
Unrestricted target 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
Widok — Paleta poleceń i wpisz Q#: Ustaw profil usługi Azure Quantum QIR . Naciśnij klawisz Enter. - Wybierz pozycję Bez ograniczeń.
W języku Python można ustawić profil target za pomocą metody qsharp.init
.
qsharp.init(target_profile=qsharp.TargetProfile.Unrestricted)
Tworzenie i uruchamianie programów dla profilu QIR Basetarget
QIR Base
target 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 target
operation FlipQubitOnZero() : Unit {
use q = Qubit();
if M(q) == Zero {
X(q);
}
}
Jeśli spróbujesz uruchomić tę operację na QIR Basetarget, operacja zakończy się niepowodzeniem, ponieważ wykonuje porównanie wyniku pomiaru (M(q) == Zero
), aby kontrolować przepływ obliczeń za pomocą instrukcji if
. Dotyczy to również dowolnego typu rozgałęziania warunkowego, takich jak instrukcje elif
i else
.
Konfigurowanie QIR Basetarget profilu
W programie Visual Studio Code:
- Wybierz Widok -> paletę poleceń i wpisz Q#: Ustaw profil targetusługi Azure Quantum QIR. Naciśnij klawisz Enter.
- Wybierz pozycję Baza QIR.
W języku Python można ustawić profil target przy użyciu metody qsharp.init
.
qsharp.init(target_profile=qsharp.TargetProfile.Base)
Obsługiwane targets dla profilu QIR Basetarget
Obecnie w usłudze Azure Quantum dostępne są następujące elementy: QIR Basetargets.
Dostawca: IonQ
Dostawca: Rigetti
-
Symulator Rigetti (
rigetti.sim.*
) -
Rigetti QPU (
rigetti.qpu.*
)
-
Symulator Rigetti (
Tworzenie i uruchamianie programów dla profilu QIR Adaptive RItarget
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. Stan kwantowy mierzonych kubitów zapada się do stanu klasycznego (zero lub jeden), ale niemierzone kubity 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ć ten wynik w tej instrukcji. Odpowiednie bloki warunkowe nie mogą zawierać return
instrukcji ani 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
Widok — Paleta poleceń i wpisz Q#: Ustaw profil Azure Quantum QIR . Naciśnij klawisz Enter. - Wybierz opcję QIR Adaptive RI.
W języku Python można ustawić profil target za pomocą metody qsharp.init
.
qsharp.init(target_profile=qsharp.TargetProfile.Adaptive_RI)
Obsługiwane targets dla profilu QIR Adaptive RItarget
Obecnie w usłudze Azure Quantum są dostępne następujące QIR Adaptive RItargets:
-
Dostawca: Quantinuum
-
Quantinuum Emulatory (
quantinuum.sim.h1-1e
,quantinuum.sim.h2-1e
) -
Quantinuum QPU (
quantinuum.qpu.h1-1
,quantinuum.qpu.h2-1
)
-
Quantinuum Emulatory (