Typy cílových profilů v Azure Quantum

Tento článek popisuje různé typy target profilů dostupné v poskytovatelích kvantových výpočtů v Azure Quantum. V této době mají kvantová zařízení kvůli počáteční fázi vývoje v terénu určitá omezení a požadavky na programy, které na nich běží.

QPU (Quantum Processing Units): různé profily a jejich omezení

QPU (Quantum Processing Unit) je fyzický nebo simulovaný procesor, který obsahuje řadu vzájemně propojených qubitů, se kterými je možné manipulovat za účelem výpočtu kvantových algoritmů. Je to centrální součást kvantového počítače nebo kvantového simulátoru.

Kvantová zařízení jsou stále vznikající technologií a ne všechna z nich dokážou spouštět veškerý kód Q#. Proto je třeba při vývoji programů pro různé targets. Azure Quantum a QDK v současné době spravují tři různé profily pro QPU:

  • Full: Tento profil může spustit libovolný program Q# v rámci limitů paměti pro simulátory nebo počtu qubitů pro fyzické kvantové počítače.
  • No Control Flow: Tento profil může spouštět jakýkoli program Q#, který k řízení toku programu nevyžaduje použití výsledků z měření qubitů. V rámci programu targetQ# určeného pro tento druh QPU hodnoty typu Result nepodporují porovnání rovnosti.
  • Basic Measurement Feedback: Tento profil má omezenou možnost používat výsledky z měření qubitů k řízení toku programu. V rámci programu targetQ# určeného pro tento druh QPU můžete porovnat hodnoty typu Result jako součást podmínek v rámci if příkazů v operacích, což umožňuje měření mezi okruhy. Odpovídající podmíněné bloky nemusí obsahovat return příkazy nebo set .

Vytváření a spouštění aplikací pro Full profil targets

Full profile targets může spouštět jakýkoli program v jazyce Q#, což znamená, že můžete psát programy bez omezení funkčnosti. Azure Quantum zatím s tímto profilem žádné neposkytuje target .

Vytváření a spouštění aplikací pro No Control Flow profil targets

No Control Flow profile targets může spouštět širokou škálu aplikací V# s omezením, že nemůžou používat výsledky z měření qubitu k řízení toku programu. Konkrétně hodnoty typu Result nepodporují porovnání rovnosti.

Například tuto operaci nelze spustit na No Control Flowtarget:

    operation SetQubitState(desired : Result, q : Qubit) : Result {
        if (desired != M(q)) {
            X(q);
        }
    }

Pokus o spuštění této operace se No Control Flowtarget nezdaří, protože vyhodnocuje porovnání mezi dvěma výsledky (desired != M(q)) a řídí výpočetní tok příkazem if . To se bude vztahovat na jakýkoli typ podmíněného větvení, jako elif jsou příkazy a else .

Poznámka

V současné době nemůžete odesílat kvantové programy, které používají operace na qubitech měřených v No Control Flowtargetsnástroji , ani když výsledky nepoužíváte k řízení toku programu. To znamená, No Control Flowtargets že nepovolujte měření středního okruhu.

Například následující kód nelze spustit na No Control Flowtarget:

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

operation SampleMeasuredQubit(q : Qubit) : Result {
    H(MeasureQubit(q));
    return M(MeasureQubit(q));
}

V současné době jsou pro Azure Quantum k dispozici tyto No Control Flowtargets :

Vytváření a spouštění aplikací pro Basic Measurement Feedback profil targets

Basic Measurement Feedback profile targets může spouštět celou řadu aplikací jazyka Q# s omezením, že hodnoty typu Result můžete porovnávat pouze jako součást podmínek v rámci if příkazů v operacích. Tento typ profilu předpokládá zlepšení oproti No Control Flow profilům, ale stále podléhá určitým omezením.

Basic Measurement Feedback profile targets umožňují podmíněné operace založené na měření a měření středního okruhu, což znamená, že qubity lze selektivně měřit v jiném bodě, než je konečný příkaz kvantového programu, a výstup měření lze použít v jiných operacích. Měření středního okruhu umožňuje více měření v libovolném bodě v rámci kvantového programu. Kvantová informace měřených qubitů se sbalí do klasického stavu (nula nebo jedna), ale neměřené qubity si zachovávají svůj kvantový stav.

V Q# se při měření qubitu vrátí hodnota typu Result . Pokud chcete tento výsledek použít v podmíněném příkazu, musíte přímo porovnat v podmíněném příkazu. Odpovídající podmíněné bloky nemusí obsahovat return příkazy nebo set .

Například následující kód jazyka Q# by byl povolený v Basic Measurement Feedbacktargetsouboru :

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

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

Stejný kód s přesunutým logickým vyhodnocením by však nebyl povolený:

operation BeOne(q : Qubit) : Bool {
     return M(q) == One;
}

operation SetToZeroUsingBeOne(q : Qubit) : Unit {
     if BeOne(q) { X(q); }
}

Operaci SetQubitState v nástroji No Control Flow lze použít v objektu, Basic Measurement Feedbacktarget pokud do if příkazu nezahrnete žádný return příkaz nebo set . To se bude vztahovat na jakýkoli typ podmíněného větvení, jako elif jsou příkazy a else . Například následující operaci nelze použít v Basic Measurement Feedbacktarget:

    operation SetQubitState(desired : Result, q : Qubit) : Result {
    if desired != M(q) {
        X(q);
        return M(q);
    }
}

V současné době jsou pro Azure Quantum k dispozici tyto Basic Measurement Feedbacktargets :