QIR-Profiltypen target in Azure Quantum
In diesem Artikel werden die verschiedenen Arten von QIR-Profiltypen target erläutert, die in den Quantencomputinganbietern in Azure Quantum zur Verfügung stehen. Die QIR-Profiltypen target werden verwendet, um die Funktionen der Quantengeräte zu definieren, die Sie mit Ihren Q#-Programmen verwenden können target .
Target Profile und deren Einschränkungen
Quantengeräte sind noch eine aufstrebende Technologie, und nicht alle können den gesamten Q#-Code ausführen. Daher müssen Sie beim Entwickeln von Programmen für verschiedene targetsProgramme einige Einschränkungen beachten. Derzeit verwalten Azure Quantum und QDK drei verschiedene target Profile:
- Unrestricted: Dieses Profil kann jedes QIR-Programm innerhalb der Grenzen des Speichers für Simulatoren oder die Anzahl der Qubits für physische Quantencomputer ausführen.
- QIR 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 konzipiert ist, unterstützen Werte vom Typ
Result
keinen Vergleich auf Gleichheit. - QIR 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 inif
Vorgängen vergleichen, sodass die Mid-Circuit-Messung möglich ist.
Erstellen und Ausführen von Anwendungen für Unrestrictedtarget Profil
Unrestrictedtarget Profile können ein beliebiges Programm ausführen, was bedeutet, dass Sie Q#-Programme ohne Funktionalitätseinschränkungen schreiben können. Azure Quantum stellt dieses Profil nicht bereit target . Sie können Q#-Programme jedoch auf Simulatoren ausführen Unrestricted , die vom QDK bereitgestellt werden.
Profil konfigurieren Unrestrictedtarget
In Visual Studio Code:
- Select View -> Command Palette and type Q#: Set the Azure Quantum QIR target profile. Drücken Sie die EINGABETASTE.
- Wählen Sie "Uneingeschränkt" aus.
In Python können Sie das target Profil mithilfe der qsharp.init
Methode festlegen.
qsharp.init(target_profile=qsharp.TargetProfile.Unrestricted)
Erstellen und Ausführen von Anwendungen für QIR Basetarget Profil
QIR Basetarget 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.
Dieser Vorgang kann z. B. nicht für ein QIR Basetarget:
operation FlipQubitOnZero() : Unit {
use q = Qubit();
if M(q) == Zero {
X(q);
}
}
Wenn Sie versuchen, diesen Vorgang für einen QIR BasetargetVorgang auszuführen, schlägt der Vorgang fehl, da ein Vergleich mithilfe eines Messergebnisses (M(q) == Zero
) zum Steuern des Berechnungsflusses mit einer if
Anweisung durchgeführt wird. Dasselbe gilt für jede Art von bedingter Verzweigung, z elif
. B. für else
Anweisungen.
Profil konfigurieren QIR Basetarget
In Visual Studio Code:
- Select View -> Command Palette and type Q#: Set the Azure Quantum QIR target profile. Drücken Sie die EINGABETASTE.
- Wählen Sie QIR-Basis aus.
In Python können Sie das target Profil mithilfe der qsharp.init
Methode festlegen.
qsharp.init(target_profile=qsharp.TargetProfile.Base)
Unterstützung von targets
Derzeit sind diese QIR Basetargets für Azure Quantum verfügbar:
Anbieter: IonQ
- IonQ-Simulator (
ionq.simulator
) - IonQ-QPU (
ionq.qpu.*
)
- IonQ-Simulator (
Anbieter: Rigetti
- Rigetti Simulator (
rigetti.sim.*
) - Rigetti QPU (
rigetti.qpu.*
)
- Rigetti Simulator (
Erstellen und Ausführen von Anwendungen für QIR Adaptive RI Profil targets
QIR Adaptive RI Profile targets können eine Vielzahl von Q#-Anwendungen mit einigen Einschränkungen ausführen. Dieser Profiltyp nimmt eine Verbesserung gegenüber QIR Base Profilen an, unterliegt aber dennoch einigen Einschränkungen.
QIR Adaptive RI Profile targets ermöglichen 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 kann in anderen Vorgängen verwendet werden. Mid-Circuit-Messung ermöglicht mehrere Messungen an jedem Punkt im gesamten Quantenprogramm. Die Quanteninformationen der gemessenen Qubits reduzieren sich auf einen klassischen Zustand (Null oder eins), aber die nicht gemessenen Qubits bleiben in ihrem Quantenzustand.
Bei der Messung eines Qubits wird beim Messen eines Qubits 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.
Der folgende F#-Code wäre z. B. in einer QIR Adaptive RItarget:
operation MeasureQubit(q : Qubit) : Result {
return M(q);
}
operation SetToZero(q : Qubit) : Unit {
if MeasureQubit(q) == One { X(q); }
}
Profil konfigurieren QIR Adaptive RItarget
In Visual Studio Code:
- Select View -> Command Palette and type Q#: Set the Azure Quantum QIR target profile. Drücken Sie die EINGABETASTE.
- Wählen Sie QIR Adaptive RI aus.
In Python können Sie das target Profil mithilfe der qsharp.init
Methode festlegen.
qsharp.init(target_profile=qsharp.TargetProfile.Adaptive_RI)
Unterstützung von targets
Derzeit sind diese QIR Adaptive RItargets für Azure Quantum verfügbar:
- Anbieter: Quantinuum
- Quantinuum Emulatoren (
quantinuum.sim.h1-1e
,quantinuum.sim.h2-1e
) - Quantinuum QPUs (
quantinuum.qpu.h1-1
,quantinuum.qpu.h2-1
)
- Quantinuum Emulatoren (