Azure Quantum QIR Zielprofile im QDK

Quantencomputing ist immer noch eine aufstrebende Technologie. Nicht alle Quantenhardware kann alle Quantenprogramme ausführen. Beispielsweise kann nur bestimmte Hardware Mid-Circuit-Messungen durchführen, die zum Ausführen von Programmen mit bedingten Verzweigungen basierend auf qubit-Messergebnissen erforderlich sind.

Wenn Sie ein Programm zur Ausführung auf Azure Quantum übermitteln, wird Ihr Programm in das Format der Quanten-Zwischendarstellung (QIR) umgewandelt. QIR hängt nicht von der Programmiersprache oder dem Typ der Quantenhardware ab, auf der Ihr Programm ausgeführt wird. Die MicrosoftQuantum Development Kit (QDK) unterstützt mehrere QIR Zielprofile für unterschiedliche Hardwarefunktionen.

Weitere Informationen finden QIRSie unter Quantum Intermediate Representation.

Übersicht über Zielprofile

Azure Quantum und QDK unterstützen mehrere QIR-Zielprofile. Der Typ des von Ihnen ausgewählten Zielprofils bestimmt, welche der folgenden Programmierkonstrukte Ihr Programm verwenden kann.

  • Bedingte Verzweigungen mit if Anweisungen basierend auf Qubit-Messergebnissen
  • Arithmetische Vorgänge für Gleitkommazahlen, die aus Qubit-Messergebnissen berechnet werden
  • Feste und ungebundene Schleifen basierend auf Qubit-Messergebnissen

Die folgende Tabelle führt alle QIR Zielprofile in den QDK sowie die Programmierkonstrukte auf, die von den Zielprofilen unterstützt werden, in der Reihenfolge vom restriktivsten bis zum am wenigsten restriktiven.

QIR Zielprofil Bedingte Verzweigungen Gleitkommaoperationen Loops
Base
Adaptive RI
Adaptive RIF
Adaptive
Unrestricted

Legen Sie Zielprofile in QDK fest

Zum Ausführen eines Programms auf den QDK Simulatoren oder Azure Quantum Zielen müssen Sie ein QIR Zielprofil festlegen. Wenn Sie kein Zielprofil manuell festlegen, versucht das QDK, automatisch das passende Profil für das ausgewählte Ziel festzulegen.

Beim Übermitteln von Programmen, die mithilfe des Dienstes Azure Quantum ausgeführt werden sollen, versucht QDK, automatisch das entsprechende Profil für das ausgewählte Ausführungsziel auszuwählen.

Base QIR Profil

Das Basiszielprofil QIR ist das restriktivste Profil. Verwenden Sie das Basisprofil für einfachere Programme, die keine klassischen Programmierstrukturen wie Verzweigungen und Schleifen verwenden. Wenn Ihr Quantenhardwareziel keine Mid-Circuit-Messungen durchführen kann, müssen Sie wahrscheinlich das Basisprofil verwenden.

Die folgenden Azure Quantum Ziele können Programme ausführen, die das Basisprofil QIR verwenden.

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

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

Festlegen des Basisprofils

Um das Basiszielprofil QIR in der QDK Erweiterung für Visual Studio Code (VS Code) 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": "base"
    }
    
  • Wenn Sie in einer .qs Datei arbeiten, die nicht Teil eines Q#-Projekts ist, legen Sie das Zielprofil direkt in Ihrem Q#-Code fest. Fügen Sie dazu in Ihrem Programm in der Zeile vor dem EntryPoint-Vorgang @EntryPoint(Base) ein.

    @EntryPoint(Base)
    operation Main() : Unit {
    
    ...
    
    }
    

Führen Sie den folgenden Code aus, um das Basiszielprofil in der QDK Python-Bibliothek festzulegen.

from qdk import init, TargetProfile

init(target_profile=TargetProfile.Base) 

Einschränkungen für Q#-Programme mit Basisprofil

Das Basiszielprofil kann eine Vielzahl von Q#-Programmen ausführen. Die Haupteinschränkung besteht darin, dass Q#-Programme keine logischen Vergleiche mit Result Typwerten aus Messvorgängen durchführen können.

Beispielsweise können Sie den folgenden FlipQubitOnZero Vorgang nicht für ein Basisziel ausführen, da das Programm eine if Anweisung enthält, die ein Messergebnis verwendet.

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

Adaptive RI QIR Profil

Das adaptive RI-Zielprofil kann eine breitere Palette von Programmen als das Basisprofil ausführen, hat aber dennoch einige Einschränkungen. Adaptive RI unterstützt Programme, die Mid-Circuit-Messungen in bedingten if-Anweisungen verwenden. Wenn Ihre Quantenhardware Zwischenmessungen durchführen kann und Ihr Programm if-Anweisungen verwendet, die auf Messergebnissen basieren, müssen Sie vermutlich das adaptive RI-Profil verwenden.

Beispielsweise kann das folgende Q#-Programm auf einem adaptiven RI-Ziel ausgeführt werden.

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

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

Die folgenden Azure Quantum Ziele können Programme ausführen, die das adaptive RI-Zielprofil verwenden.

Provider Simulator QPU (Quantum Processing Unit)
Quantinuum quantinuum.sim.h2-1e quantinuum.qpu.h2-1
Quantinuum quantinuum.sim.h2-2e quantinuum.qpu.h2-2

Weitere Informationen zu Quantinuum in Azure Quantum, siehe Quantinuum-Anbieter.

Festlegen des adaptiven RI-Profils

Um das adaptive RI-Zielprofil QIR in der QDK Erweiterung für VS Code 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": "adaptive_ri"
    }
    
  • Wenn Sie in einer .qs Datei arbeiten, die nicht Teil eines Q#-Projekts ist, legen Sie das Zielprofil direkt in Ihrem Q#-Code fest. Fügen Sie dazu @EntryPoint(Adaptive_RI) in der Zeile vor der Einstiegspunkt-Operation in Ihrem Programm hinzu.

    @EntryPoint(Adaptive_RI)
    operation Main() : Unit {
    
    ...
    
    }
    

Führen Sie den folgenden Code aus, um das adaptive RI-Zielprofil in der QDK Python-Bibliothek festzulegen.

from qdk import init, TargetProfile

init(target_profile=TargetProfile.Adaptive_RI)

Adaptive RIF QIR Profil

Das adaptive RIF-Zielprofil verfügt über die gleichen Funktionen wie das adaptive RI-Profil, unterstützt aber auch Programme, die Gleitkommaarithmetikvorgänge enthalten. Wenn Ihre Quantenhardware Mid-Circuit-Messungen durchführen kann und Ihr Programm if Anweisungen und Gleitkommazahlen verwendet, die aus Messergebnissen berechnet werden, müssen Sie wahrscheinlich das adaptive RIF-Profil verwenden.

Beispielsweise kann das folgende Q#-Programm auf einem adaptiven RIF-Ziel ausgeführt werden.

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

Azure Quantum verfügt derzeit nicht über adaptive RIF-Ziele, Sie können jedoch Programme für adaptive RIF-Ziele auf den lokalen QDK Simulatoren ausführen. Weitere Informationen zu Simulatoren in der QDK, siehe Übersicht über Quantensimulatoren in der QDK.

Festlegen des adaptiven RIF-Profils

Um das adaptive RIF-Zielprofil QIR in der QDK Erweiterung für VS Code 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": "adaptive_rif"
    }
    
  • Wenn Sie in einer .qs Datei arbeiten, die nicht Teil eines Q#-Projekts ist, legen Sie das Zielprofil direkt in Ihrem Q#-Code fest. Fügen Sie dazu @EntryPoint(Adaptive_RIF) in die Zeile vor dem Einstiegspunkt in Ihrem Programm ein.

    @EntryPoint(Adaptive_RIF)
    operation Main() : Unit {
    
    ...
    
    }
    

Führen Sie den folgenden Code aus, um das adaptive RIF-Zielprofil in der QDK Python-Bibliothek festzulegen.

from qdk import init, TargetProfile

init(target_profile=TargetProfile.Adaptive_RIF) 

Adaptive QIR Profil

Das adaptive Zielprofil verfügt über die gleichen Funktionen wie das adaptive RIF-Profil, unterstützt aber auch Programme, die Schleifen basierend auf Messergebnissen verwenden. Adaptive Programme können Schleifen mit einer festgelegten Anzahl von Iterationen und Wiederholungsschleifen (Repeat-until-success, RUS) verwenden.

Azure Quantum hat derzeit keine adaptiven Ziele, Sie können jedoch Programme für adaptive Ziele auf den lokalen QDK Simulatoren ausführen. Weitere Informationen zu Simulatoren in der QDK, siehe Übersicht über Quantensimulatoren in der QDK.

Festlegen des adaptiven Profils

Um das adaptive QIR Zielprofil in der QDK Erweiterung für VS Code 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": "adaptive"
    }
    
  • Wenn Sie in einer .qs Datei arbeiten, die nicht Teil eines Q#-Projekts ist, legen Sie das Zielprofil direkt in Ihrem Q#-Code fest. Fügen Sie dazu in Ihrem Programm in der Zeile vor der Einstiegspunkt-Operation @EntryPoint(Adaptive) ein.

    @EntryPoint(Adaptive)
    operation Main() : Unit {
    
    ...
    
    }
    

Führen Sie den folgenden Code aus, um das adaptive Zielprofil in der QDK Python-Bibliothek festzulegen.

from qdk import init, TargetProfile

init(target_profile=TargetProfile.Adaptive) 

Unrestricted QIR Profil

Das uneingeschränkte Zielprofil kann alle Quantenprogramme ausführen. Kein aktuelles Quantenziel unterstützt QIR ohne Einschränkungen, aber Sie können das uneingeschränkte Profil verwenden, um komplexe Programme auf den QDK-Simulatoren für die Quantenentwicklung auszuführen.

Festlegen des uneingeschränkten Profils

Um das uneingeschränkte QIR Zielprofil in der QDK Erweiterung für VS Code 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 Zielprofil direkt in Ihrem Q#-Code fest. Fügen Sie dazu @EntryPoint(Unrestricted) in der Zeile vor der Einstiegspunktoperation in Ihrem Programm ein.

    @EntryPoint(Unrestricted)
    operation Main() : Unit {
    
    ...
    
    }
    

Führen Sie den folgenden Code aus, um das uneingeschränkte Zielprofil in der QDK Python-Bibliothek festzulegen.

from qdk import init, TargetProfile

init(target_profile=TargetProfile.Unrestricted)