Udostępnij za pośrednictwem


Typy profilów QIR target w usłudze Azure Quantum

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:

  1. Wybierz pozycję Widok —> paleta poleceń i wpisz Q#: Ustaw profil usługi Azure Quantum QIRtarget. Naciśnij klawisz Enter.
  2. Wybierz pozycję Bez ograniczeń.

W języku Python można ustawić target profil przy użyciu qsharp.init metody .

qsharp.init(target_profile=qsharp.TargetProfile.Unrestricted) 

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:

    operation FlipQubitOnZero() : Unit {
        use q = Qubit();
        if M(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:

  1. Wybierz pozycję Widok —> paleta poleceń i wpisz Q#: Ustaw profil usługi Azure Quantum QIRtarget. Naciśnij klawisz Enter.
  2. Wybierz pozycję Baza QIR.

W języku Python można ustawić target profil przy użyciu qsharp.init metody .

qsharp.init(target_profile=qsharp.TargetProfile.Base) 

Obsługiwane targets

Obecnie są one QIR Basetargets dostępne dla usługi Azure Quantum:

  • Dostawca: IonQ

  • Dostawca: Rigetti

    • Symulator Rigetti (rigetti.sim.*)
    • QPU Rigetti (rigetti.qpu.*)

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:

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 pozycję Widok —> paleta poleceń i wpisz Q#: Ustaw profil usługi Azure Quantum QIRtarget. Naciśnij klawisz Enter.
  2. Wybierz opcję QIR Adaptive RI.

W języku Python można ustawić target profil przy użyciu qsharp.init metody .

qsharp.init(target_profile=qsharp.TargetProfile.Adaptive_RI) 

Obsługiwane targets

Obecnie są one QIR Adaptive RItargets dostępne dla usługi Azure Quantum:

  • Dostawca: Quantinuum
    • Emulatory quantinuum (quantinuum.sim.h1-1e, quantinuum.sim.h2-1e)
    • Kwantynauum QPU (quantinuum.qpu.h1-1, quantinuum.qpu.h2-1)