Nuta
Dostęp do tej strony wymaga autoryzacji. Możesz spróbować się zalogować lub zmienić katalog.
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 program w języku Q#. W związku z tym należy pamiętać o pewnych ograniczeniach podczas opracowywania programów kwantowych. Typy target profilów definiują możliwości urządzeń kwantowych, które target używasz z programami Q#. Quantum Development Kit (QDK) ma różne target typy profilów, które wspólnie obsługują wszystkie możliwości bieżących 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 w zestawie QDK.
Profile docelowe i ich ograniczenia
Obecnie usługa Azure Quantum i zestaw QDK zarządzają różnymi target profilami w zależności od ich możliwości uruchamiania programów reprezentacji kwantowych (QIR).
- Unrestricted: Ten profil może uruchamiać dowolny QIR program, a tym samym dowolny program języka Q#, w granicach pamięci dla symulatorów lub liczby kubitów dla fizycznych komputerów kwantowych.
-
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
Resultnie obsługują porównania równości. -
Adaptive RI: Ten profil ma ograniczoną możliwość używania wyników z pomiarów kubitów w celu kontrolowania przepływu programu. W ramach programu języka Q# przeznaczonego dla tego rodzaju QPU można porównać wartości typu
Resultjako część warunków wifinstrukcjach w operacjach, co pozwala na pomiar średniego obwodu. - Adaptive RIF: Ten profil ma takie same możliwości jak Adaptive RI profil, ale obsługuje również operacje zmiennoprzecinkowe.
Tworzenie i uruchamianie programów dla profilu Unrestrictedtarget
Unrestricted target profile mogą uruchamiać cały program języka Q#, dzięki czemu można napisać kod języka Q# bez konieczności uwzględnienia ograniczeń funkcjonalności. Usługa Azure Quantum nie udostępnia żadnego rzeczywistego urządzenia targets , które obsługuje ten profil. Można jednak uruchamiać Unrestricted programy języka Q#, które mają ten profil w symulatorach dostarczanych z zestawem QDK.
Konfigurowanie Unrestrictedtarget profilu
Jeśli nie ustawisz ręcznie swojego QIRtarget profilu, kompilator automatycznie ustawi profil target dla ciebie. Kompilator wybiera najbardziej restrykcyjny profil, który nadal umożliwia uruchamianie programu na wybranym urządzeniu target Azure Quantum.
Aby ręcznie ustawić QIRtarget profil na Unrestricted, wybierz jedną z następujących opcji:
Jeśli skonfigurujesz projekt w języku Q#, dodaj następujące polecenie do pliku projektu
qsharp.json:{ "targetProfile": "unrestricted" }Jeśli pracujesz w
.qspliku, który nie jest częścią projektu języka Q#, ustaw target profil bezpośrednio w kodzie języka Q#. W tym celu dołącz@EntryPoint(Unrestricted)bezpośrednio przed operacją punktu wejścia w programie, nawet jeśli ta operacja jest domyślną operacjąMain.W języku Python wywołaj metodę
qdk.inittarget , aby ustawić profil.from qdk import init, TargetProfile init(target_profile=TargetProfile.Unrestricted)
Tworzenie i uruchamianie programów dla profilu Basetarget
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 nie można uruchomić następującej FlipQubitOnZero operacji na Basetarget:
@EntryPoint(Base)
operation FlipQubitOnZero() : Unit {
use q = Qubit();
if M(q) == Zero {
X(q);
}
}
Operacja FlipQubitOnZero kończy się niepowodzeniem, gdy uruchamiasz ten kod na Basetarget, ponieważ urządzenie target nie może wykorzystać wyniku pomiaru kubitu do przeprowadzenia logiki warunkowej w trakcie działania algorytmu kwantowego. Jeśli planujesz uruchamiać algorytmy na Basetarget urządzeniu, upewnij się, że kod nie zawiera żadnych if bloków do rozgałęziania warunkowego , które opierają się na mierzonych kubitach w celu oceny warunku logicznego.
Konfigurowanie Basetarget profilu
Aby ręcznie ustawić QIRtarget profil na Base, wybierz jedną z następujących opcji:
Jeśli skonfigurujesz projekt w języku Q#, dodaj następujące polecenie do pliku projektu
qsharp.json:{ "targetProfile": "base" }Jeśli pracujesz w
.qspliku, który nie jest częścią projektu języka Q#, ustaw target profil bezpośrednio w kodzie języka Q#. W tym celu dołącz@EntryPoint(Base)bezpośrednio przed operacją punktu wejścia w programie, nawet jeśli ta operacja jest domyślną operacjąMain.W języku Python wywołaj metodę
qdk.inittarget , aby ustawić profil.from qdk import init, TargetProfile init(target_profile=TargetProfile.Base)
Obsługiwane targets dla profilu Basetarget
Na razie usługa Azure Quantum zapewnia dostęp do następujących Basetargetselementów:
| Provider | Symulator | QPU |
|---|---|---|
| IonQ | ionq.simulator |
ionq.qpu.* |
| Rigetti | rigetti.sim.* |
rigetti.qpu.* |
Aby dowiedzieć się więcej o tych dostawcach w usłudze Azure Quantum, zobacz Dostawca IonQ i dostawca Rigetti.
Tworzenie i uruchamianie programów dla profilu Adaptive RItarget
Adaptive RI target profile mogą uruchamiać szerszą gamę aplikacji języka Q# niż Base profile, ale nadal mają pewne ograniczenia. W przeciwieństwie do profili Basetarget, Adaptive RItargets obsługują pomiary w środku obwodu.
Dzięki pomiarom obwodu środkowego można selektywnie mierzyć kubity w dowolnym momencie w programie kwantowym, a nie tylko na końcu. Następnie możesz użyć wyników pomiaru dla innych operacji w programie, takich jak rozgałęzianie warunkowe z blokami if . Kubity, które mierzysz w środku obwodu, zwijają się do stanu klasycznego (zero lub jeden), ale niemieżone kubity pozostają w stanie kwantowym.
Podczas mierzenia kubitu w języku Q#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# jest dozwolony w pliku Adaptive RItarget:
@EntryPoint(Adaptive_RI)
operation MeasureQubit(q : Qubit) : Result {
return M(q);
}
operation SetToZero(q : Qubit) : Unit {
if MeasureQubit(q) == One { X(q); }
}
Konfigurowanie Adaptive RItarget profilu
Aby ręcznie ustawić QIRtarget profil na Adaptive RI, wybierz jedną z następujących opcji:
Jeśli skonfigurujesz projekt w języku Q#, dodaj następujące polecenie do pliku projektu
qsharp.json:{ "targetProfile": "adaptive_ri" }Jeśli pracujesz w
.qspliku, który nie jest częścią projektu języka Q#, ustaw target profil bezpośrednio w kodzie języka Q#. W tym celu dołącz@EntryPoint(Adaptive_RI)bezpośrednio przed operacją punktu wejścia w programie, nawet jeśli ta operacja jest domyślną operacjąMain.W języku Python wywołaj metodę
qdk.inittarget , aby ustawić profil.from qdk import init, TargetProfile init(target_profile=TargetProfile.Adaptive_RI)
Obsługiwane targets dla profilu Adaptive RItarget
Na razie quantinuum jest jedynym dostawcą w usłudze Azure Quantum, który ma wartość Adaptive RItargets.
-
Emulatory:
quantinuum.sim.h2-1eiquantinuum.sim.h2-2e -
Jednostki QPU:
quantinuum.qpu.h2-1iquantinuum.qpu.h2-2
Aby uzyskać więcej informacji na temat ofert firmy Quantinuum w usłudze Azure Quantum, zobacz Quantinuum Emulators (Emulatory quantinuum).
Tworzenie i uruchamianie programów dla profilu Adaptive RIFtarget
Adaptive RIF target profile mają wszystkie możliwości profilów Adaptive RI , ale obsługują również programy języka Q#, które zawierają obliczenia zmiennoprzecinkowe.
Na przykład następujący kod języka Q# jest dozwolony w pliku Adaptive RIFtarget:
@EntryPoint(Adaptive_RIF)
operation DynamicFloat() : Double {
use q = Qubit();
H(q);
mutable f = 0.0;
if M(q) == One {
f = 0.5;
}
Reset(q);
return f;
}
Konfigurowanie Adaptive RIFtarget profilu
Aby ręcznie ustawić QIRtarget profil na Adaptive RIF, wybierz jedną z następujących opcji:
Jeśli skonfigurujesz projekt w języku Q#, dodaj następujące polecenie do pliku projektu
qsharp.json:{ "targetProfile": "adaptive_rif" }Jeśli pracujesz w
.qspliku, który nie jest częścią projektu języka Q#, ustaw target profil bezpośrednio w kodzie języka Q#. W tym celu dołącz@EntryPoint(Adaptive_RIF)bezpośrednio przed operacją punktu wejścia w programie, nawet jeśli ta operacja jest domyślną operacjąMain.W języku Python wywołaj metodę
qdk.inittarget , aby ustawić profil.from qdk import init, TargetProfile init(target_profile=TargetProfile.Adaptive_RIF)
Obsługiwane targets dla profilu Adaptive RIFtarget
Na razie usługa Azure Quantum nie ma Adaptive RIFtargets. Można jednak uruchamiać programy dla Adaptive RIFtargets w symulatorze lokalnym w zestawie QDK.