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 w if 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 .
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:
Q#
operation FlipQubitOnZero() : Unit{
use q = Qubit();
ifM(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 .
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:
Pisanie wydajnych zapytań, tworzenie zasad indeksowania, zarządzanie zasobami i aprowizowanie ich w interfejsie API SQL i zestawie SDK za pomocą usługi Microsoft Azure Cosmos DB.