Condividi tramite


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'interno if 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:

  1. Selezionare Visualizza -> Riquadro comandi e digitare Q#: Impostare il profilo di Azure Quantum QIRtarget. Premere Invio.
  2. 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:

  1. Selezionare Visualizza -> Riquadro comandi e digitare Q#: Impostare il profilo di Azure Quantum QIRtarget. Premere Invio.
  2. 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

  • Provider: Rigetti

    • Simulatore Di Rigetti (rigetti.sim.*)
    • QPU Rigetti (rigetti.qpu.*)

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:

  1. Selezionare Visualizza -> Riquadro comandi e digitare Q#: Impostare il profilo di Azure Quantum QIRtarget. Premere Invio.
  2. 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)