QIR-profieltypen target in Azure Quantum
In dit artikel worden de verschillende typen QIR-profieltypen target besproken die beschikbaar zijn in de kwantumcomputingproviders in Azure Quantum. De QIR-profieltypen target worden gebruikt om de mogelijkheden te definiëren van de kwantumapparaten die u met uw Q#-programma's kunt target gebruiken.
Target profielen en hun beperkingen
Kwantumapparaten zijn nog steeds een opkomende technologie en niet allemaal kunnen alle Q#-code uitvoeren. Daarom moet u rekening houden met enkele beperkingen bij het ontwikkelen van programma's voor verschillende targets. Momenteel beheren Azure Quantum en de QDK drie verschillende target profielen:
- Unrestricted: Dit profiel kan elk QIR-programma uitvoeren binnen de limieten van het geheugen voor simulators of het aantal qubits voor fysieke kwantumcomputers.
- QIR base: Dit profiel kan elk Q#-programma uitvoeren waarvoor het gebruik van de resultaten van qubitmetingen niet nodig is om de programmastroom te beheren. Binnen een Q#-programma dat is gericht op dit type QPU, bieden waarden van het type
Result
geen ondersteuning voor gelijkheidsvergelijking. - QIR Adaptive RI: Dit profiel heeft beperkte mogelijkheden om de resultaten van qubitmetingen te gebruiken om de programmastroom te beheren. Binnen een Q#-programma dat is gericht op dit type QPU, kunt u waarden van het type
Result
vergelijken als onderdeel van voorwaarden inif
bewerkingen, waardoor middelste circuitmeting mogelijk is.
Toepassingen voor Unrestrictedtarget profiel maken en uitvoeren
Unrestrictedtarget profielen kunnen elk programma uitvoeren, wat betekent dat u Q#-programma's kunt schrijven zonder functionaliteitsbeperkingen. Azure Quantum biedt target dit profiel niet. U kunt echter Q#-programma's uitvoeren Unrestricted op simulators die worden geleverd door de QDK.
Profiel configureren Unrestrictedtarget
In Visual Studio Code:
- Selecteer Weergave -> Opdrachtpalet en typ Q#: Stel het Azure Quantum QIR-profiel target in. Druk op Enter.
- Selecteer Onbeperkt.
In Python kunt u het target profiel instellen met behulp van de qsharp.init
methode.
qsharp.init(target_profile=qsharp.TargetProfile.Unrestricted)
Toepassingen voor QIR Basetarget profiel maken en uitvoeren
QIR Basetarget profielen kunnen een groot aantal Q#-toepassingen uitvoeren, met de beperking dat ze geen resultaten van qubitmetingen kunnen gebruiken om de programmastroom te beheren. Meer specifiek bieden waarden van het type Result
geen ondersteuning voor gelijkheidsvergelijking.
Deze bewerking kan bijvoorbeeld niet worden uitgevoerd op een QIR Basetarget:
operation FlipQubitOnZero() : Unit {
use q = Qubit();
if M(q) == Zero {
X(q);
}
}
Als u deze bewerking probeert uit te voeren op een QIR Basetarget, mislukt de bewerking omdat er een vergelijking wordt uitgevoerd met behulp van een meetresultaat (M(q) == Zero
) om de rekenstroom met een if
instructie te beheren. Hetzelfde geldt voor elk type voorwaardelijke vertakking, zoals elif
en else
instructies.
Profiel configureren QIR Basetarget
In Visual Studio Code:
- Selecteer Weergave -> Opdrachtpalet en typ Q#: Stel het Azure Quantum QIR-profiel target in. Druk op Enter.
- Selecteer QIR-basis.
In Python kunt u het target profiel instellen met behulp van de qsharp.init
methode.
qsharp.init(target_profile=qsharp.TargetProfile.Base)
Ondersteund targets
QIR Basetargets Deze zijn momenteel beschikbaar voor Azure Quantum:
Provider: IonQ
- IonQ-simulator (
ionq.simulator
) - IonQ QPU (
ionq.qpu.*
)
- IonQ-simulator (
Provider: Rigetti
- Rigetti Simulator (
rigetti.sim.*
) - Rigetti QPU (
rigetti.qpu.*
)
- Rigetti Simulator (
Toepassingen voor QIR Adaptive RI profiel maken en uitvoeren targets
QIR Adaptive RI het profiel targets kan een groot aantal Q#-toepassingen uitvoeren, met enkele beperkingen. Dit profieltype veronderstelt een verbetering ten opzichte QIR Base van profielen, maar is nog steeds onderhevig aan enkele beperkingen.
QIR Adaptive RI met profiel targets zijn op maat gebaseerde voorwaardelijke bewerkingen en gemiddelde circuitmetingen toegestaan, wat betekent dat qubits selectief kunnen worden gemeten op een ander punt dan de definitieve instructie van een kwantumprogramma en dat de uitvoer van de meting kan worden gebruikt in andere bewerkingen. Metingen in het middencircuit maken meerdere metingen mogelijk op elk punt in het kwantumprogramma. De kwantumgegevens van de gemeten qubits worden samengevouwen tot een klassieke status (nul of één), maar de niet-gemeten qubits blijven in hun kwantumstatus.
Bij het meten van een qubit wordt in Q# een waarde van het type Result
geretourneerd. Als u dit resultaat in een voorwaardelijke instructie wilt gebruiken, moet u deze rechtstreeks vergelijken in de voorwaardelijke instructie. De bijbehorende voorwaardelijke blokken bevatten return
mogelijk geen instructies.set
De volgende Q#-code is bijvoorbeeld toegestaan in een QIR Adaptive RItarget:
operation MeasureQubit(q : Qubit) : Result {
return M(q);
}
operation SetToZero(q : Qubit) : Unit {
if MeasureQubit(q) == One { X(q); }
}
Profiel configureren QIR Adaptive RItarget
In Visual Studio Code:
- Selecteer Weergave -> Opdrachtpalet en typ Q#: Stel het Azure Quantum QIR-profiel target in. Druk op Enter.
- Selecteer QIR Adaptive RI.
In Python kunt u het target profiel instellen met behulp van de qsharp.init
methode.
qsharp.init(target_profile=qsharp.TargetProfile.Adaptive_RI)
Ondersteund targets
QIR Adaptive RItargets Deze zijn momenteel beschikbaar voor Azure Quantum:
- Provider: Quantinuum
- Quantinuum Emulators (
quantinuum.sim.h1-1e
,quantinuum.sim.h2-1e
) - Kwantinuum QPUs (
quantinuum.qpu.h1-1
,quantinuum.qpu.h2-1
)
- Quantinuum Emulators (