Tipi di profilo QIR target in Azure Quantum
Questo articolo illustra il diverso tipo di tipi di profilo QIR target disponibili nei provider di calcolo quantistico in Azure Quantum. I tipi di profilo QIR target vengono usati per definire le funzionalità dei dispositivi quantistici che è possibile target usare con i programmi Q#.
Target profili e relative limitazioni
I dispositivi quantistici sono ancora una tecnologia emergente e non tutti possono eseguire tutti i codici Q#. Di conseguenza, è necessario tenere presenti alcune restrizioni quando si sviluppano programmi per diversi targets. Attualmente, Azure Quantum e QDK gestiscono tre profili diversi target :
- Unrestricted: questo profilo può eseguire qualsiasi programma QIR entro i limiti di memoria per i simulatori o il numero di qubit per i computer quantistici fisici.
- QIR base: questo profilo può eseguire qualsiasi programma Q# che non richiede l'uso dei risultati delle misurazioni qubit per controllare il flusso del programma. In un programma Q# destinato a questo tipo di QPU, i valori di tipo
Result
non supportano il confronto di uguaglianza. - QIR Adaptive RI: questo profilo ha una capacità limitata di usare i risultati delle misurazioni qubit per controllare il flusso del programma. All'interno di un programma Q# destinato a questo tipo di QPU, è possibile confrontare i valori di tipo
Result
come parte delle condizioni all'internoif
delle istruzioni nelle operazioni, consentendo la misurazione del circuito intermedio.
Creare ed eseguire applicazioni per Unrestrictedtarget il profilo
Unrestrictedtarget i profili possono eseguire qualsiasi programma, vale a dire che è possibile scrivere programmi Q# senza restrizioni di funzionalità. Azure Quantum non fornisce alcun target profilo. Tuttavia, è possibile eseguire Unrestricted programmi Q# nei simulatori forniti dal QDK.
Configurare il Unrestrictedtarget profilo
In Visual Studio Code:
- Selezionare Visualizza -> Riquadro comandi e digitare Q#: Impostare il profilo di Azure Quantum QIRtarget. Premere Invio.
- Selezionare Senza restrizioni.
In Python è possibile impostare il target profilo usando il qsharp.init
metodo .
qsharp.init(target_profile=qsharp.TargetProfile.Unrestricted)
Creare ed eseguire applicazioni per QIR Basetarget il profilo
QIR Basetarget i profili possono eseguire un'ampia gamma di applicazioni Q#, con il vincolo che non possono usare i risultati delle misurazioni qubit per controllare il flusso del programma. In particolare, i valori di tipo Result
non supportano il confronto di uguaglianza.
Ad esempio, questa operazione non può essere eseguita in :QIR Basetarget
operation FlipQubitOnZero() : Unit {
use q = Qubit();
if M(q) == Zero {
X(q);
}
}
Se si tenta di eseguire questa operazione su un QIR Basetarget, l'operazione avrà esito negativo perché esegue un confronto usando un risultato di misurazione (M(q) == Zero
) per controllare il flusso di calcolo con un'istruzione if
. Lo stesso vale per qualsiasi tipo di diramazione condizionale, ad esempio elif
le istruzioni e else
.
Configurare il QIR Basetarget profilo
In Visual Studio Code:
- Selezionare Visualizza -> Riquadro comandi e digitare Q#: Impostare il profilo di Azure Quantum QIRtarget. Premere Invio.
- Selezionare QIR base.
In Python è possibile impostare il target profilo usando il qsharp.init
metodo .
qsharp.init(target_profile=qsharp.TargetProfile.Base)
Aggiunta del supporto per targets
Attualmente sono QIR Basetargets disponibili per Azure Quantum:
Provider: IonQ
- Simulatore IonQ (
ionq.simulator
) - QPU IonQ (
ionq.qpu.*
)
- Simulatore IonQ (
Provider: Rigetti
- Simulatore Di Rigetti (
rigetti.sim.*
) - QPU Rigetti (
rigetti.qpu.*
)
- Simulatore Di Rigetti (
Creare ed eseguire applicazioni per QIR Adaptive RI il profilo targets
QIR Adaptive RI profile targets può eseguire un'ampia gamma di applicazioni Q#, con alcuni vincoli. Questo tipo di profilo presuppone un miglioramento dei QIR Base profili, ma è comunque soggetto ad alcune limitazioni.
QIR Adaptive RI profile targets consente operazioni condizionali basate su misurazione e misurazioni a circuito intermedio, ovvero che i qubit possono essere misurati in modo selettivo in un punto diverso dall'istruzione finale di un programma quantistico e l'output della misurazione può essere usato in altre operazioni. La misurazione a circuito intermedio abilita più misurazioni in qualsiasi punto del programma quantistico. Le informazioni quantistiche dei qubit misurati si comprimono in uno stato classico (zero o uno), ma i qubit non misurati rimangono nello stato quantistico.
In Q# quando si misura un qubit, viene restituito un valore di tipo Result
. Se si vuole usare questo risultato in un'istruzione condizionale, è necessario confrontare direttamente nell'istruzione condizionale. I blocchi condizionali corrispondenti potrebbero non contenere istruzioni return
o set
.
Ad esempio, il codice Q# seguente sarebbe consentito in :QIR Adaptive RItarget
operation MeasureQubit(q : Qubit) : Result {
return M(q);
}
operation SetToZero(q : Qubit) : Unit {
if MeasureQubit(q) == One { X(q); }
}
Configurare il QIR Adaptive RItarget profilo
In Visual Studio Code:
- Selezionare Visualizza -> Riquadro comandi e digitare Q#: Impostare il profilo di Azure Quantum QIRtarget. Premere Invio.
- Selezionare QIR Adaptive RI.
In Python è possibile impostare il target profilo usando il qsharp.init
metodo .
qsharp.init(target_profile=qsharp.TargetProfile.Adaptive_RI)
Aggiunta del supporto per targets
Attualmente sono QIR Adaptive RItargets disponibili per Azure Quantum:
- Provider: Quantinuum
- Emulatori quantinuum (
quantinuum.sim.h1-1e
,quantinuum.sim.h2-1e
) - Quantinuum QPU (
quantinuum.qpu.h1-1
,quantinuum.qpu.h2-1
)
- Emulatori quantinuum (