Zielprofiltypen in Azure Quantum

In diesem Artikel werden die verschiedenen Profiltypen target erläutert, die in den Quantencomputinganbietern in Azure Quantum verfügbar sind. Im Moment weisen Quantengeräte aufgrund des frühen Entwicklungsstadiums des Gebiets einige Einschränkungen und Anforderungen für Programme auf, die darauf ausgeführt werden sollen.

Quantum Processing Units (QPU): unterschiedliche Profile und deren Einschränkungen

Eine Quantenverarbeitungseinheit (Quantum Processing Unit, QPU) ist ein physikalischer oder simulierter Prozessor, der eine Anzahl miteinander verbundener Qubits enthält, die zur Berechnung von Quantenalgorithmen beeinflusst werden können. Hierbei handelt es sich um die zentrale Komponente eines Quantencomputers oder -simulators.

Quantengeräte sind noch eine aufstrebende Technologie, und nicht alle können den gesamten Q#-Code ausführen. Daher müssen Sie einige Einschränkungen beachten, wenn Sie Programme für verschiedene entwickeln targets. Derzeit verwalten Azure Quantum und das QDK drei verschiedene Profile für QPUs:

  • Full: Dieses Profil kann jedes Q#-Programm innerhalb der Speichergrenzen für Simulatoren oder der Anzahl von Qubits für physische Quantencomputer ausführen.
  • No Control Flow: Dieses Profil kann jedes Q#-Programm ausführen, das nicht die Verwendung der Ergebnisse von Qubitmessungen erfordert, um den Programmablauf zu steuern. Innerhalb eines Q#-Programms, das targetfür diese Art von QPU erstellt wurde, unterstützen Werte vom Typ Result keinen Gleichheitsvergleich.
  • Basic Measurement Feedback: Dieses Profil verfügt über eingeschränkte Möglichkeiten, die Ergebnisse von Qubitmessungen zu verwenden, um den Programmablauf zu steuern. Innerhalb eines Q#-Programms, das targetfür diese Art von QPU erstellt wurde, können Sie Werte vom Typ Result als Teil von Bedingungen in if -Anweisungen in Vorgängen vergleichen, sodass die Messung des Mittleren Stromkreises möglich ist. Die entsprechenden Bedingungsblöcke dürfen keine return- oder set-Anweisungen enthalten.

Erstellen und Ausführen von Anwendungen für Full das Profil targets

Full profile targets kann ein beliebiges Q#-Programm ausführen, d. h. Sie können Programme ohne Funktionseinschränkungen schreiben. Azure Quantum stellt dieses Profil noch nicht bereit target .

Erstellen und Ausführen von Anwendungen für No Control Flow das Profil targets

No Control Flow profile targets kann eine Vielzahl von Q#-Anwendungen ausführen, mit der Einschränkung, dass ergebnisse aus Qubitmessungen nicht verwendet werden können, um den Programmablauf zu steuern. Spezifischer können Werte vom Typ Result keinen Gleichheitsvergleich unterstützen.

Dieser Vorgang kann beispielsweise nicht für eine No Control Flowtargetausgeführt werden:

    operation SetQubitState(desired : Result, q : Qubit) : Result {
        if (desired != M(q)) {
            X(q);
        }
    }

Der Versuch, diesen Vorgang für einen No Control Flowtarget auszuführen, schlägt fehl, da er einen Vergleich zwischen zwei Ergebnissen (desired != M(q)) auswertet, um den Berechnungsfluss mit einer if -Anweisung zu steuern. Dies gilt für jede Art von bedingter Verzweigung, z elif . B. und - else Anweisungen.

Hinweis

Derzeit können Sie keine Quantenprogramme übermitteln, die Vorgänge auf Qubits anwenden, die in No Control Flowtargetsgemessen wurden, auch wenn Sie die Ergebnisse nicht zur Steuerung des Programmablaufs verwenden. Das heißt, No Control Flowtargets keine Mid-Circuit-Messungen zulassen.

Beispielsweise kann der folgende Code nicht auf einem No Control Flowtargetausgeführt werden:

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

operation SampleMeasuredQubit(q : Qubit) : Result {
    H(MeasureQubit(q));
    return M(MeasureQubit(q));
}

Derzeit sind diese No Control Flowtargets für Azure Quantum verfügbar:

Erstellen und Ausführen von Anwendungen für Basic Measurement Feedback das Profil targets

Basic Measurement Feedback profile targets kann eine Vielzahl von Q#-Anwendungen mit der Einschränkung ausführen, dass Sie Werte des Typs Result nur als Teil von Bedingungen innerhalb if von Anweisungen in Vorgängen vergleichen können. Dieser Profiltyp setzt eine Verbesserung gegenüber No Control Flow Profilen voraus, unterliegt jedoch weiterhin einigen Einschränkungen.

Basic Measurement Feedback profile targets ermöglicht messbasierte bedingte Operationen und Mid-Circuit-Messungen, was bedeutet, dass Qubits an einem anderen Punkt als der endgültigen Anweisung eines Quantenprogramms selektiv gemessen werden können und die Ausgabe der Messung in anderen Vorgängen verwendet werden kann. Die Mid-Circuit-Messung ermöglicht mehrere Messungen an einem beliebigen Punkt im gesamten Quantenprogramm. Die Quanteninformationen der gemessenen Qubits werden in einen klassischen Zustand (Null oder 1) reduziert, aber die nicht gemessenen Qubits behalten ihren Quantenzustand bei.

In Q# wird beim Messen eines Qubits ein Wert vom Typ Result zurückgegeben. Wenn Sie dieses Ergebnis in einer bedingten Anweisung verwenden möchten, müssen Sie direkt in der bedingungsbedingten Anweisung vergleichen. Die entsprechenden Bedingungsblöcke dürfen keine return- oder set-Anweisungen enthalten.

Beispielsweise wäre der folgende Q#-Code in einem Basic Measurement Feedbacktargetzulässig:

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

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

Derselbe Code mit verschobener boolescher Auswertung wäre jedoch nicht zulässig:

operation BeOne(q : Qubit) : Bool {
     return M(q) == One;
}

operation SetToZeroUsingBeOne(q : Qubit) : Unit {
     if BeOne(q) { X(q); }
}

Der SetQubitState Vorgang in No Control Flow kann in verwendet werden, Basic Measurement Feedbacktarget solange Sie keine - oder set -Anweisung in die if -Anweisung einfügenreturn. Dies gilt für jede Art von bedingter Verzweigung, z elif . B. und - else Anweisungen. Beispielsweise kann der folgende Vorgang nicht in einem Basic Measurement Feedbacktargetverwendet werden:

    operation SetQubitState(desired : Result, q : Qubit) : Result {
    if desired != M(q) {
        X(q);
        return M(q);
    }
}

Derzeit sind diese Basic Measurement Feedbacktargets für Azure Quantum verfügbar: