Freigeben über


Verschiedene Arten von target Profilen in Azure Quantum

Quantengeräte sind immer noch eine aufstrebende Technologie, und leider können nicht alle alle Q#-Programme ausführen. Daher müssen Sie einige Einschränkungen berücksichtigen, während Sie Quantenprogramme entwickeln. Die target Profiltypen definieren die Funktionen der Quantengeräte, die Sie target mit Ihren Q#-Programmen verwenden. Das Quantum Development Kit (QDK) verfügt über eine Reihe verschiedener target Profiltypen, die zusammen alle Funktionen der aktuellen Quantengeräte unterstützen, die in Azure Quantum verfügbar sind.

In diesem Artikel werden die verschiedenen Typen von target Profilen in Azure Quantum, deren Einschränkungen und die Konfiguration in QDK erläutert.

Zielprofile und deren Einschränkungen

Derzeit verwalten Azure Quantum und QDK unterschiedliche target Profile, abhängig von ihrer Fähigkeit, Quanten-Zwischendarstellungsprogramme (QIR) auszuführen.

  • Unrestricted: Dieses Profil kann ein beliebiges QIR Programm und somit jedes Q#-Programm innerhalb der Speichergrenzen für Simulatoren oder die Anzahl der Qubits für physische Quantencomputer ausführen.
  • Base: Dieses Profil kann ein beliebiges Q#-Programm ausführen, das nicht die Verwendung der Ergebnisse aus Qubit-Messungen erfordert, um den Programmfluss zu steuern. In einem Q#-Programm, das für diese Art von QPU vorgesehen ist, unterstützen Werte vom Typ Result keine Gleichheitsvergleiche.
  • Adaptive RI: Dieses Profil verfügt über eingeschränkte Möglichkeit, die Ergebnisse aus Qubit-Messungen zu verwenden, um den Programmfluss zu steuern. Innerhalb eines Q#-Programms, das für diese Art von QPU vorgesehen ist, können Sie Werte des Typs Result als Teil von Bedingungen innerhalb von Anweisungen in if Vorgängen vergleichen, sodass die Mid-Circuit-Messung ermöglicht wird.
  • Adaptive RIF: Dieses Profil verfügt über die gleichen Funktionen wie das Adaptive RI Profil, unterstützt aber auch Gleitkommavorgänge.

Erstellen und Ausführen von Programmen für Unrestrictedtarget Profil

Unrestricted target Profile können alle Q#-Programme ausführen, sodass Sie Q#-Code schreiben können, ohne dass Funktionalitätseinschränkungen berücksichtigt werden müssen. Azure Quantum stellt kein tatsächliches Gerät targets bereit, das dieses Profil unterstützt. Sie können jedoch Q#-Programme ausführen Unrestricted , die dieses Profil auf den Simulatoren haben, die mit dem QDK bereitgestellt werden.

Profil konfigurieren Unrestrictedtarget

Wenn Sie Ihr QIRtarget Profil nicht manuell festlegen, legt der Compiler automatisch das target Profil für Sie fest. Der Compiler wählt das restriktivste Profil aus, mit dem Ihr Programm weiterhin auf dem von Ihnen ausgewählten Azure Quantum-Gerät target ausgeführt werden kann.

Um das QIRtarget Profil manuell auf "Uneingeschränkt" festzulegen, wählen Sie eine der folgenden Optionen aus:

  • Wenn Sie ein Q#-Projekt einrichten, fügen Sie der Projektdatei qsharp.json den folgenden Befehl hinzu:

    {
      "targetProfile": "unrestricted"
    }
    
  • Wenn Sie in einer .qs Datei arbeiten, die nicht Teil eines Q#-Projekts ist, legen Sie das target Profil direkt in Ihrem Q#-Code fest. Schließen Sie @EntryPoint(Unrestricted) dazu direkt vor der Einstiegspunkt-Operation in Ihr Programm ein, auch wenn diese Operation der Standard-Main ist.

  • Rufen Sie in Python die qdk.init Methode auf, um das target Profil festzulegen.

    from qdk import init, TargetProfile
    
    init(target_profile=TargetProfile.Unrestricted) 
    

Erstellen und Ausführen von Programmen für Basetarget Profil

Base target Profile können eine Vielzahl von Q#-Anwendungen ausführen, mit der Einschränkung, dass sie keine Ergebnisse aus Qubit-Messungen verwenden können, um den Programmfluss zu steuern. Genauer gesagt unterstützen Werte vom Typ Result keine Gleichheitsvergleiche.

Sie können zum Beispiel die folgende FlipQubitOnZero Operation nicht auf einem Basetarget ausführen:

    @EntryPoint(Base)
    operation FlipQubitOnZero() : Unit {
        use q = Qubit();
        if M(q) == Zero {
            X(q);
        }
    }

Der FlipQubitOnZero Vorgang schlägt fehl, wenn Sie diesen Code auf einem Gerät Basetarget ausführen, da das Gerät das target Ergebnis einer Qubit-Messung nicht verwenden kann, um bedingte Logik auszuführen, während der Quantenalgorithmus ausgeführt wird. Wenn Sie beabsichtigen, Algorithmen auf einem Basetarget Gerät auszuführen, stellen Sie sicher, dass Ihr Code keine Blöcke für die if enthält, die auf gemessenen Qubits basieren, um eine logische Bedingung auszuwerten.

Profil konfigurieren Basetarget

Um das QIRtarget Profil manuell auf festzulegen Base, wählen Sie eine der folgenden Optionen aus:

  • Wenn Sie ein Q#-Projekt einrichten, fügen Sie der Projektdatei qsharp.json den folgenden Befehl hinzu:

    {
      "targetProfile": "base"
    }
    
  • Wenn Sie in einer .qs Datei arbeiten, die nicht Teil eines Q#-Projekts ist, legen Sie das target Profil direkt in Ihrem Q#-Code fest. Schließen Sie @EntryPoint(Base) dazu direkt vor der Einstiegspunkt-Operation in Ihr Programm ein, auch wenn diese Operation der Standard-Main ist.

  • Rufen Sie in Python die qdk.init Methode auf, um das target Profil festzulegen.

    from qdk import init, TargetProfile
    
    init(target_profile=TargetProfile.Base) 
    

Unterstützt targets für Basetarget-Profil

Azure Quantum bietet jetzt Zugriff auf Folgendes Basetargets:

Provider Simulator QPU (Quantum Processing Unit)
IonQ ionq.simulator ionq.qpu.*
Rigetti rigetti.sim.* rigetti.qpu.*

Weitere Informationen zu diesen Anbietern in Azure Quantum finden Sie unter IonQ-Anbieter und Rigetti-Anbieter.

Erstellen und Ausführen von Programmen für Adaptive RItarget Profil

Adaptive RI target Profile können eine breitere Palette von Q#-Anwendungen ausführen als Base Profile, weisen jedoch noch einige Einschränkungen auf. Im Gegensatz zu Basetarget Profilen unterstützen Adaptive RItargets Mid-Circuit-Messungen.

Mit Mid-Circuit-Messungen können Sie qubits an jedem Punkt im Quantenprogramm selektiv messen, nicht nur das Ende. Anschließend können Sie die Messergebnisse für andere Vorgänge in Ihrem Programm verwenden, z. B. bedingte Verzweigung mit if Blöcken. Die Qubits, die Sie während des Schaltkreises messen, kollabieren zu einem klassischen Zustand (0 oder 1), aber die nicht gemessenen Qubits bleiben in ihrem Quantenzustand.

Wenn Sie ein Qubit in Q# messen, wird ein Typwert Result zurückgegeben. Wenn Sie dieses Ergebnis in einer bedingungsbedingten Anweisung verwenden möchten, müssen Sie in der bedingungsbedingten Anweisung direkt vergleichen. Die entsprechenden Bedingungsblöcke dürfen keine return- oder set-Anweisungen enthalten.

Zum Beispiel ist der folgende Q#-Code in einem Adaptive RItarget erlaubt:

@EntryPoint(Adaptive_RI)
operation MeasureQubit(q : Qubit) : Result { 
    return M(q); 
}

operation SetToZero(q : Qubit) : Unit {
     if MeasureQubit(q) == One { X(q); }
}

Profil konfigurieren Adaptive RItarget

Um das QIRtarget Profil manuell auf festzulegen Adaptive RI, wählen Sie eine der folgenden Optionen aus:

  • Wenn Sie ein Q#-Projekt einrichten, fügen Sie der Projektdatei qsharp.json den folgenden Befehl hinzu:

    {
      "targetProfile": "adaptive_ri"
    }
    
  • Wenn Sie in einer .qs Datei arbeiten, die nicht Teil eines Q#-Projekts ist, legen Sie das target Profil direkt in Ihrem Q#-Code fest. Schließen Sie @EntryPoint(Adaptive_RI) dazu direkt vor der Einstiegspunkt-Operation in Ihr Programm ein, auch wenn diese Operation der Standard-Main ist.

  • Rufen Sie in Python die qdk.init Methode auf, um das target Profil festzulegen.

    from qdk import init, TargetProfile
    
    init(target_profile=TargetProfile.Adaptive_RI) 
    

Unterstützt targets für Adaptive RItarget-Profil

Quantinuum ist derzeit der einzige Anbieter in Azure Quantum, der hat Adaptive RItargets.

  • Emulatoren:quantinuum.sim.h2-1e und quantinuum.sim.h2-2e
  • QPUs:quantinuum.qpu.h2-1 und quantinuum.qpu.h2-2

Weitere Informationen zu den Angeboten von Quantinuum in Azure Quantum finden Sie unter Quantinuum-Emulatoren.

Erstellen und Ausführen von Programmen für Adaptive RIFtarget Profil

Adaptive RIF target Profile verfügen über alle Funktionen von Adaptive RI Profilen, unterstützen aber auch Q#-Programme, die Gleitkommaberechnungen enthalten.

Zum Beispiel ist der folgende Q#-Code in einem Adaptive RIFtarget erlaubt:

@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;
}

Profil konfigurieren Adaptive RIFtarget

Um das QIRtarget Profil manuell auf festzulegen Adaptive RIF, wählen Sie eine der folgenden Optionen aus:

  • Wenn Sie ein Q#-Projekt einrichten, fügen Sie der Projektdatei qsharp.json den folgenden Befehl hinzu:

    {
      "targetProfile": "adaptive_rif"
    }
    
  • Wenn Sie in einer .qs Datei arbeiten, die nicht Teil eines Q#-Projekts ist, legen Sie das target Profil direkt in Ihrem Q#-Code fest. Schließen Sie @EntryPoint(Adaptive_RIF) dazu direkt vor der Einstiegspunkt-Operation in Ihr Programm ein, auch wenn diese Operation der Standard-Main ist.

  • Rufen Sie in Python die qdk.init Methode auf, um das target Profil festzulegen.

    from qdk import init, TargetProfile
    
    init(target_profile=TargetProfile.Adaptive_RIF) 
    

Unterstützt targets für Adaptive RIFtarget-Profil

Derzeit verfügt Adaptive RIFtargetsAzure Quantum nicht über . Sie können jedoch Programme für Adaptive RIFtargets auf dem lokalen Simulator im QDK ausführen.