Udostępnij za pośrednictwem


Różne typy profilów target w usłudze Azure Quantum

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 w if 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:

  1. Wybierz Widok — Paleta poleceń i wpisz Q#: Ustaw profil usługi Azure Quantum QIR. Naciśnij klawisz Enter.
  2. 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:

  1. Wybierz Widok -> paletę poleceń i wpisz Q#: Ustaw profil targetusługi Azure Quantum QIR. Naciśnij klawisz Enter.
  2. 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.

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:

  1. Wybierz Widok — Paleta poleceń i wpisz Q#: Ustaw profil Azure Quantum QIR. Naciśnij klawisz Enter.
  2. 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: