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 w if instrukcjach w operacjach, co pozwala na pomiar obwodu środkowego. Odpowiednie bloki warunkowe mogą nie zawierać return instrukcji ani set .

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:

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: