QIR-profiltyper target i Azure Quantum
I den här artikeln beskrivs olika typer av QIR-profiltyper target som är tillgängliga i kvantberäkningsprovidrar i Azure Quantum. QIR-profiltyperna target används för att definiera funktionerna för de kvantenheter som du kan target med dina Q#-program.
Target profiler och deras begränsningar
Kvantenheter är fortfarande en ny teknik och alla kan inte köra all Q#-kod. Därför måste du ha vissa begränsningar i åtanke när du utvecklar program för olika targets. För närvarande hanterar Azure Quantum och QDK tre olika target profiler:
- Unrestricted: Den här profilen kan köra valfritt QIR-program inom gränserna för minne för simulatorer eller antalet kvantbitar för fysiska kvantdatorer.
- QIR base: Den här profilen kan köra valfritt Q#-program som inte kräver användning av resultaten från kvantbitsmätningar för att styra programflödet. I ett Q#-program som är avsett för den här typen av QPU stöder värden av typen
Result
inte likhetsjämförelse. - QIR Adaptive RI: Den här profilen har begränsad möjlighet att använda resultaten från kvantbitsmätningar för att styra programflödet. I ett Q#-program som är avsett för den här typen av QPU kan du jämföra värden av typen
Result
som en del av villkoren iif
instruktioner i åtgärder, vilket möjliggör mätning mellan kretsar.
Skapa och köra program för Unrestrictedtarget profil
Unrestrictedtarget profiler kan köra valfritt program, vilket innebär att du kan skriva Q#-program utan funktionsbegränsningar. Azure Quantum tillhandahåller target inga med den här profilen. Du kan dock köra Unrestricted Q#-program på simulatorer som tillhandahålls av QDK.
Konfigurera Unrestrictedtarget profil
I Visual Studio Code:
- Välj Visa –> Kommandopalett och skriv Q#: Ange Azure Quantum QIR-profilentarget. Tryck på Retur.
- Välj Obegränsad.
I Python kan du ange profilen target med hjälp av qsharp.init
metoden .
qsharp.init(target_profile=qsharp.TargetProfile.Unrestricted)
Skapa och köra program för QIR Basetarget profil
QIR Basetarget profiler kan köra en mängd olika Q#-program, med villkoret att de inte kan använda resultat från kvantbitsmätningar för att styra programflödet. Mer specifikt stöder värden av typen Result
inte likhetsjämförelse.
Den här åtgärden kan till exempel inte köras på en QIR Basetarget:
operation FlipQubitOnZero() : Unit {
use q = Qubit();
if M(q) == Zero {
X(q);
}
}
Om du försöker köra den här åtgärden på en QIR Basetargetmisslyckas åtgärden eftersom den gör en jämförelse med ett mätresultat (M(q) == Zero
) för att styra beräkningsflödet med en if
-instruktion. Samma sak gäller för alla typer av villkorsstyrd förgrening, till exempel elif
och else
-instruktioner.
Konfigurera QIR Basetarget profil
I Visual Studio Code:
- Välj Visa –> Kommandopalett och skriv Q#: Ange Azure Quantum QIR-profilentarget. Tryck på Retur.
- Välj QIR-bas.
I Python kan du ange profilen target med hjälp av qsharp.init
metoden .
qsharp.init(target_profile=qsharp.TargetProfile.Base)
Stödd targets
För närvarande är dessa QIR Basetargets tillgängliga för Azure Quantum:
Provider: IonQ
- IonQ-simulator (
ionq.simulator
) - IonQ QPU (
ionq.qpu.*
)
- IonQ-simulator (
Leverantör: Rigetti
- Rigetti Simulator (
rigetti.sim.*
) - Rigetti QPU (
rigetti.qpu.*
)
- Rigetti Simulator (
Skapa och köra program för QIR Adaptive RI profil targets
QIR Adaptive RI profilen targets kan köra en mängd olika Q#-program, med vissa begränsningar. Den här profiltypen förutsätter en förbättring jämfört med QIR Base profiler, men omfattas fortfarande av vissa begränsningar.
QIR Adaptive RI profilen targets tillåter mätningsbaserade villkorliga åtgärder och mätningar i mitten av kretsen, vilket innebär att kvantbitar kan mätas selektivt vid en annan punkt än den slutliga instruktionen för ett kvantprogram, och mätningens utdata kan användas i andra åtgärder. Mellankretsmätning möjliggör flera mätningar när som helst i kvantprogrammet. Kvantinformationen för de uppmätta kvantbitarna komprimeras till ett klassiskt tillstånd (noll eller ett), men de icke-uppmätta kvantbitarna förblir i sitt kvanttillstånd.
I Q# vid mätning av en kvantbit returneras ett värde av typen Result
. Om du vill använda det här resultatet i en villkorsstyrd instruktion måste du jämföra direkt i villkorssatsen. Motsvarande villkorsblock får inte innehålla return
eller set
instruktioner.
Följande Q#-kod skulle till exempel tillåtas i en QIR Adaptive RItarget:
operation MeasureQubit(q : Qubit) : Result {
return M(q);
}
operation SetToZero(q : Qubit) : Unit {
if MeasureQubit(q) == One { X(q); }
}
Konfigurera QIR Adaptive RItarget profil
I Visual Studio Code:
- Välj Visa –> Kommandopalett och skriv Q#: Ange Azure Quantum QIR-profilentarget. Tryck på Retur.
- Välj QIR Adaptive RI.
I Python kan du ange profilen target med hjälp av qsharp.init
metoden .
qsharp.init(target_profile=qsharp.TargetProfile.Adaptive_RI)
Stödd targets
För närvarande är dessa QIR Adaptive RItargets tillgängliga för Azure Quantum:
- Provider: Quantinuum
- Quantinuum-emulatorer (
quantinuum.sim.h1-1e
,quantinuum.sim.h2-1e
) - QPU:er för Quantinuum (
quantinuum.qpu.h1-1
,quantinuum.qpu.h2-1
)
- Quantinuum-emulatorer (