Målprofiltyper i Azure Quantum

Den här artikeln beskriver de olika typerna av target profiltyper som är tillgängliga i kvantberäkningsprovidrar i Azure Quantum. På grund av fältets tidiga utvecklingsfas har kvantenheter för närvarande vissa begränsningar och krav för program som körs på dem.

Kvantbearbetningsenheter (QPU): olika profiler och deras begränsningar

En kvantbearbetningsenhet (QPU) är en fysisk eller simulerad processor som innehåller ett antal sammankopplade kvantbitar som kan manipuleras för att beräkna kvantalgoritmer. Det är den centrala komponenten i en kvantdator eller kvantsimulator.

Kvantenheter är fortfarande en ny teknik och alla kan inte köra all Q#-kod. Därför måste du ha vissa begränsningar i åtanke när du utvecklar program för olika targets. För närvarande hanterar Azure Quantum och QDK tre olika profiler för QPU:er:

  • Full: Den här profilen kan köra valfritt Q#-program inom gränserna för minne för simulatorer eller antalet kvantbitar för fysiska kvantdatorer.
  • No Control Flow: Den här profilen kan köra valfritt Q#-program som inte kräver att resultaten från kvantbitsmått används för att styra programflödet. I ett Q#-program targetför den här typen av QPU stöder värden av typen Result inte likhetsjämförelse.
  • Basic Measurement Feedback: Den här profilen har begränsad möjlighet att använda resultaten från kvantbitsmätningar för att styra programflödet. I ett Q#-program targetsom används för den här typen av QPU kan du jämföra värden av typen Result som en del av villkoren i if instruktioner i åtgärder, vilket möjliggör mätning mellan kretsar. Motsvarande villkorsblock kanske inte innehåller return eller set -instruktioner.

Skapa och köra program för Full profil targets

Full profilen targets kan köra valfritt Q#-program, vilket innebär att du kan skriva program utan funktionsbegränsningar. Azure Quantum tillhandahåller inte någon target med den här profilen ännu.

Skapa och köra program för No Control Flow profil targets

No Control Flow profilen targets kan köra en mängd olika Q#-program, med villkoret att de inte kan använda resultat från kvantbitsmått för att styra programflödet. Mer specifikt stöder värden av typen Result inte likhetsjämförelse.

Den här åtgärden kan till exempel inte köras på en No Control Flowtarget:

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

Det går inte att köra den här åtgärden på en No Control Flowtarget eftersom den utvärderar en jämförelse mellan två resultat (desired != M(q)) för att styra beräkningsflödet med en if -instruktion. Detta gäller för alla typer av villkorsstyrd förgrening, till exempel elif och else -instruktioner.

Anteckning

För närvarande kan du inte skicka kvantprogram som tillämpar åtgärder på kvantbitar som har mätts i No Control Flowtargets, även om du inte använder resultaten för att styra programflödet. Det vill No Control Flowtargets sa, tillåt inte mid-circuit-mått.

Följande kod kan till exempel inte köras på en No Control Flowtarget:

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

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

För närvarande är dessa No Control Flowtargets tillgängliga för Azure Quantum:

Skapa och köra program för Basic Measurement Feedback profil targets

Basic Measurement Feedback profilen targets kan köra en mängd olika Q#-program, med villkoret att du bara kan jämföra värden av typen Result som en del av villkor i if instruktioner i åtgärder. Den här profiltypen förutsätter en förbättring jämfört No Control Flow med profiler, men omfattas fortfarande av vissa begränsningar.

Basic Measurement Feedback profilen targets tillåter mätningsbaserade villkorliga åtgärder och mid-circuit-mätningar, vilket innebär att kvantbitar kan mätas selektivt vid en annan punkt än den slutliga instruktionen för ett kvantprogram, och mätningens utdata kan användas i andra åtgärder. Mätning mellan kretsar möjliggör flera mätningar när som helst i kvantprogrammet. Kvantinformationen för de uppmätta kvantbitarna minimeras till ett klassiskt tillstånd (noll eller ett), men de icke-uppmätta kvantbitarna behåller sitt kvanttillstånd.

I Q# vid mätning av en kvantbit returneras ett värde av typen Result . Om du vill använda det här resultatet i en villkorsstyrd instruktion måste du jämföra direkt i villkorssatsen. Motsvarande villkorsblock får inte innehålla return eller set instruktioner.

Följande Q#-kod skulle till exempel tillåtas i en Basic Measurement Feedbacktarget:

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

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

Samma kod med den booleska utvärderingen skulle dock inte tillåtas:

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

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

Åtgärden SetQubitState i No Control Flow kan användas i entargetBasic Measurement Feedbackså länge du inte inkluderar någon return eller set -instruktionen i -instruktionenif. Detta gäller för alla typer av villkorsstyrd förgrening, till exempel elif och else -instruktioner. Följande åtgärd kan till exempel inte användas i en Basic Measurement Feedbacktarget:

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

För närvarande är dessa Basic Measurement Feedbacktargets tillgängliga för Azure Quantum: