Azure Quantum QIR cílové profily v sekci QDK

Kvantové výpočty jsou stále vznikající technologií. Ne veškerý kvantový hardware může spouštět všechny kvantové programy. Například pouze určitý hardware může provádět měření středního okruhu, což je nutné ke spouštění programů s podmíněnými větvemi na základě výsledků měření qubitu.

Když odešlete program ke spuštění v Azure Quantum, váš program se převede do formátu kvantové mezireprezentace (QIR). QIR nezávisí na programovacím jazyce nebo typu kvantového hardwaru, na kterém běží váš program. Microsoft(Quantum Development KitQDK) podporuje několik QIR cílových profilů pro různé hardwarové funkce.

Další informace o QIR naleznete v části Kvantová prostřední reprezentace.

Přehled cílových profilů

Azure Quantum a QDK podporují několik QIR cílových profilů. Typ cílového profilu, který zvolíte, určuje, které z následujících programovacích konstruktorů může program použít.

  • Podmíněné větvení s příkazy if na základě výsledků měření qubitů
  • Aritmetické operace s čísly s pohyblivou řádovou čárkou vypočítané z výsledků měření qubitu
  • Pevné a nevázané smyčky založené na výsledcích měření qubitu

V následující tabulce jsou uvedeny všechny QIR cílové profily v QDK a programové konstrukce, které tyto cílové profily podporují, v pořadí od nejvíce omezujících po nejméně omezující.

QIR cílový profil Podmíněné větve Operace s pohyblivou řádovou čárkou Loops
Base
Adaptive RI
Adaptive RIF
Adaptive
Unrestricted

Nastavení cílových profilů v nástroji QDK

Pokud chcete spustit program na QDK simulátorech nebo Azure Quantum cíli, musíte nastavit QIR cílový profil. Pokud cílový profil nenastavíte ručně, QDK pokusí se automaticky nastavit příslušný profil pro vybraný cíl.

při odesílání programů, které mají být spuštěny službou Azure Quantum , QDK se pokusí automaticky vybrat příslušný profil pro vybraný cíl spuštění.

Base QIR profil

Základní QIR cílový profil je nejvíce omezující. Základní profil použijte pro jednodušší programy, které nepoužívají klasické programovací struktury, jako jsou větve a smyčky. Pokud váš cílový kvantový hardware neumí provádět měření uprostřed obvodu, pravděpodobně budete muset použít základní profil.

Následující Azure Quantum cíle mohou spouštět programy, které používají základní QIR profil.

Provider Simulátor QPU
IonQ ionq.simulator ionq.qpu.*
Rigetti rigetti.sim.* rigetti.qpu.*

Další informace o těchto Azure Quantum poskytovateli najdete v tématu Poskytovatel IonQ a poskytovatel Rigetti.

Nastavení základního profilu

Pokud chcete nastavit základní QIR cílový profil v QDK rozšíření pro Visual Studio Code (VS Code), zvolte jednu z následujících možností.

  • Pokud nastavíte projekt Q#, přidejte do souboru projektu qsharp.json následující příkaz.

    {
      "targetProfile": "base"
    }
    
  • Pokud pracujete v .qs souboru, který není součástí projektu Q#, nastavte cílový profil přímo v kódu Q#. Uděláte to tak, že přidáte @EntryPoint(Base) na řádek před operaci vstupního bodu v programu.

    @EntryPoint(Base)
    operation Main() : Unit {
    
    ...
    
    }
    

Pokud chcete nastavit základní cílový profil v QDK balíčku Python, spusťte následující kód.

from qdk import init, TargetProfile

init(target_profile=TargetProfile.Base) 

Omezení programů v Q# se základním profilem

Základní cílový profil může spouštět širokou škálu programů v jazyce Q#. Hlavním omezením je, že programy Q# nemůžou provádět logické porovnání s Result hodnotami typů z operací měření.

Například nelze spustit následující FlipQubitOnZero operaci na základním cíli, protože program obsahuje if příkaz, který používá výsledek měření.

    @EntryPoint(Base)
    operation FlipQubitOnZero() : Unit {
        use q = Qubit();
        if M(q) == Zero {
            X(q);
        }
    }

Adaptive RI QIR profil

Adaptivní cílový profil RI může spouštět širší škálu programů než základní profil, ale stále má některá omezení. Adaptive RI podporuje programy, které používají měření prováděná v průběhu obvodu v podmíněných if příkazech. Pokud váš kvantový hardware dokáže provádět měření středního okruhu a váš program používá if příkazy na základě výsledků měření, budete pravděpodobně muset použít adaptivní profil RI.

Například následující program Q# může běžet na adaptivním cíli RI.

@EntryPoint(Adaptive_RI)
operation MeasureQubit(q : Qubit) : Result { 
    return M(q); 
}

operation SetToZero(q : Qubit) : Unit {
     if MeasureQubit(q) == One { X(q); }
}

Následující Azure Quantum cíle mohou spouštět programy, které používají adaptivní profil cíle RI.

Provider Simulátor QPU
Quantinuum quantinuum.sim.h2-1e quantinuum.qpu.h2-1
Quantinuum quantinuum.sim.h2-2e quantinuum.qpu.h2-2

Další informace o Quantinuum in Azure Quantum, viz Quantinuum provider.

Nastavte adaptivní profil RI

Chcete-li v rozšíření QIR pro VS Code nastavit adaptivní cílový profil RI QDK, zvolte jednu z následujících možností.

  • Pokud nastavíte projekt Q#, přidejte do souboru projektu qsharp.json následující příkaz:

    {
      "targetProfile": "adaptive_ri"
    }
    
  • Pokud pracujete v .qs souboru, který není součástí projektu Q#, nastavte cílový profil přímo v kódu Q#. Uděláte to tak, že přidáte @EntryPoint(Adaptive_RI) na řádek před operaci vstupního bodu v programu.

    @EntryPoint(Adaptive_RI)
    operation Main() : Unit {
    
    ...
    
    }
    

Pokud chcete v balíčku Python nastavit cílový profil QDK adaptivní rezervované instance, spusťte následující kód.

from qdk import init, TargetProfile

init(target_profile=TargetProfile.Adaptive_RI)

Adaptive RIF QIR profil

Adaptivní cílový profil RIF má stejné schopnosti jako adaptivní profil RI, ale také podporuje programy obsahující aritmetické operace s čísly s plovoucí řádovou čárkou. Pokud váš kvantový hardware může provádět měření středního okruhu a váš program používá if příkazy a čísla s plovoucí desetinnou čárkou vypočítaná z výsledků měření, budete pravděpodobně muset použít adaptivní profil RIF.

Například následující program Q# může běžet na adaptivním cíli RIF.

@EntryPoint(Adaptive_RIF)
operation DynamicFloat() : Double {
    use q = Qubit();
    H(q);
    mutable f = 0.0;
    if M(q) == One {
        f = 0.5;
    }
    Reset(q);
    return f;
}

Azure Quantum v tuto chvíli nemá adaptivní cíle RIF, ale v místních QDK simulátorech můžete spouštět programy pro adaptivní cíle RIF. Další informace o simulátorech v QDK naleznete v článku Přehled kvantových simulátorů v QDK.

Nastavení adaptivního profilu RIF

Pokud chcete nastavit adaptivní cílový profil RIF QIR v QDK rozšíření pro VS Code, zvolte jednu z následujících možností.

  • Pokud nastavíte projekt Q#, přidejte do souboru projektu qsharp.json následující příkaz:

    {
      "targetProfile": "adaptive_rif"
    }
    
  • Pokud pracujete v .qs souboru, který není součástí projektu Q#, nastavte cílový profil přímo v kódu Q#. Uděláte to tak, že přidáte @EntryPoint(Adaptive_RIF) na řádek před operaci vstupního bodu v programu.

    @EntryPoint(Adaptive_RIF)
    operation Main() : Unit {
    
    ...
    
    }
    

Pokud chcete nastavit adaptivní cílový profil RIF v QDK balíčku Python, spusťte následující kód.

from qdk import init, TargetProfile

init(target_profile=TargetProfile.Adaptive_RIF) 

Adaptive QIR profil

Adaptivní cílový profil má stejné funkce jako adaptivní profil RIF, ale také podporuje programy, které používají smyčky na základě výsledků měření. Adaptive programy můžou používat smyčky s nastaveným počtem iterací a smyčkami typu repeat-until-success (RUS).

Azure Quantum v tuto chvíli nemá adaptivní cíle, ale můžete spouštět programy pro adaptivní cíle v místních QDK simulátorech. Další informace o simulátorech v QDK naleznete v článku Přehled kvantových simulátorů v QDK.

Nastavení adaptivního profilu

Pokud chcete nastavit adaptivní QIR cílový profil v QDK rozšíření pro VS Code, zvolte jednu z následujících možností.

  • Pokud nastavíte projekt Q#, přidejte do souboru projektu qsharp.json následující příkaz:

    {
      "targetProfile": "adaptive"
    }
    
  • Pokud pracujete v .qs souboru, který není součástí projektu Q#, nastavte cílový profil přímo v kódu Q#. Uděláte to tak, že přidáte @EntryPoint(Adaptive) na řádek před operaci vstupního bodu v programu.

    @EntryPoint(Adaptive)
    operation Main() : Unit {
    
    ...
    
    }
    

Pokud chcete nastavit adaptivní cílový profil v QDK balíčku Python, spusťte následující kód.

from qdk import init, TargetProfile

init(target_profile=TargetProfile.Adaptive) 

Unrestricted QIR profil

Neomezený cílový profil může spouštět všechny kvantové programy. Žádný aktuální kvantový cíl nepodporuje neomezené QIR, ale pomocí neomezeného profilu můžete spouštět složité programy na QDK simulátorech pro kvantový vývoj.

Nastavení neomezeného profilu

Pokud chcete nastavit neomezený QIR cílový profil v QDK rozšíření pro VS Code, zvolte jednu z následujících možností.

  • Pokud nastavíte projekt Q#, přidejte do souboru projektu qsharp.json následující příkaz:

    {
      "targetProfile": "unrestricted"
    }
    
  • Pokud pracujete v .qs souboru, který není součástí projektu Q#, nastavte cílový profil přímo v kódu Q#. Uděláte to tak, že přidáte @EntryPoint(Unrestricted) na řádek před operaci vstupního bodu v programu.

    @EntryPoint(Unrestricted)
    operation Main() : Unit {
    
    ...
    
    }
    

Pokud chcete nastavit neomezený cílový profil v QDK balíčku Python, spusťte následující kód.

from qdk import init, TargetProfile

init(target_profile=TargetProfile.Unrestricted)