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)