Azure Quantum QIR doelprofielen in de QDK

Kwantumcomputing is nog steeds een opkomende technologie. Niet alle kwantumhardware kan alle kwantumprogramma's uitvoeren. Zo kan bijvoorbeeld alleen bepaalde hardware gemiddelde circuitmetingen uitvoeren. Dit is vereist voor het uitvoeren van programma's met voorwaardelijke vertakkingen op basis van de resultaten van qubitmetingen.

Wanneer u een programma indient om uit te voeren op Azure Quantum, wordt uw programma omgezet naar de indeling voor quantum intermediate representation (QIR). QIR is niet afhankelijk van de programmeertaal of het type kwantumhardware waarop uw programma wordt uitgevoerd. De MicrosoftQuantum Development-kit (QDK) ondersteunt verschillende QIR doelprofielen voor verschillende hardwaremogelijkheden.

Zie QIR voor meer informatie.

Overzicht van doelprofielen

Azure Quantum en de QDK ondersteunen verschillende QIR doelprofielen. Het type doelprofiel dat u kiest, bepaalt welke van de volgende programmeerconstructies uw programma kan gebruiken.

  • Voorwaardelijke vertakkingen met if instructies op basis van de meetresultaten van qubits
  • Rekenkundige bewerkingen op drijvende-kommanummers berekend op basis van qubitmetingsresultaten
  • Vaste en niet-gebonden lussen op basis van resultaten van qubitmeting

De volgende tabel bevat alle QIR doelprofielen in de QDK en de programmeerconstructies die de doelprofielen ondersteunen, in volgorde van meest tot minst beperkend.

QIR doelprofiel Conditionele vertakkingen Drijvendekommabewerkingen Loops
Base
Adaptive RI
Adaptive RIF
Adaptive
Unrestricted

Stel doelprofielen in de QDK

Als u een programma wilt uitvoeren op de QDK-simulators of het Azure Quantum-doel, moet u een QIR-doelprofiel instellen. Als u geen doelprofiel handmatig instelt, QDK wordt geprobeerd het juiste profiel automatisch in te stellen voor het gekozen doel.

bij het verzenden van programma's die via de Azure Quantum service moeten worden uitgevoerd, QDK wordt geprobeerd automatisch het juiste profiel te selecteren voor het gekozen uitvoeringsdoel.

Base QIR profiel

Het basisdoelprofiel QIR is het meest beperkende profiel. Gebruik het basisprofiel voor eenvoudigere programma's die geen klassieke programmeerstructuren gebruiken, zoals vertakkingen en lussen. Als uw kwantumhardwaredoel geen gemiddelde circuitmetingen kan uitvoeren, moet u waarschijnlijk het basisprofiel gebruiken.

De volgende Azure Quantum doelen kunnen programma's uitvoeren die gebruikmaken van het basisprofiel QIR .

Provider Simulator QPU
IonQ ionq.simulator ionq.qpu.*
Rigetti rigetti.sim.* rigetti.qpu.*

Zie Azure Quantum en Rigetti-provider voor meer informatie over deze providers.

Het basisprofiel instellen

Als u het basisdoelprofiel QIR wilt instellen in de QDK extensie voor Visual Studio Code (VS Code), kiest u een van de volgende opties.

  • Als u een Q#-project instelt, voegt u de volgende opdracht toe aan het qsharp.json projectbestand.

    {
      "targetProfile": "base"
    }
    
  • Als u in een .qs bestand werkt dat geen deel uitmaakt van een Q#-project, stelt u het doelprofiel rechtstreeks in uw Q#-code in. Voeg hiervoor de regel toe @EntryPoint(Base) vóór de invoerpuntbewerking in uw programma.

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

Voer de volgende code uit om het basisdoelprofiel in te stellen in het QDK Python-pakket.

from qdk import init, TargetProfile

init(target_profile=TargetProfile.Base) 

Beperkingen voor Q#-programma's met basisprofiel

Het basisdoelprofiel kan een groot aantal Q#-programma's uitvoeren. De belangrijkste beperking is dat Q#-programma's geen logische vergelijkingen kunnen uitvoeren met Result typewaarden uit meetbewerkingen.

U kunt bijvoorbeeld de volgende FlipQubitOnZero bewerking niet uitvoeren op een basisdoel omdat het programma een if instructie bevat die gebruikmaakt van een meetresultaat.

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

Adaptive RI QIR profiel

Het adaptieve RI-doelprofiel kan een grotere verscheidenheid aan programma's uitvoeren dan het basisprofiel, maar heeft nog enkele beperkingen. Adaptive RI is gericht op programma's die metingen halverwege het circuit gebruiken in voorwaardelijke if-instructies. Als uw kwantumhardware metingen midden in het circuit kan uitvoeren en uw programma if-instructies gebruikt op basis van meetresultaten, moet u waarschijnlijk gebruikmaken van het adaptieve RI-profiel.

Het volgende Q#-programma kan bijvoorbeeld worden uitgevoerd op een adaptief RI-doel.

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

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

De volgende Azure Quantum doelen kunnen programma's uitvoeren die gebruikmaken van het adaptieve RI-doelprofiel.

Provider Simulator QPU
Quantinuum quantinuum.sim.h2-1e quantinuum.qpu.h2-1
Quantinuum quantinuum.sim.h2-2e quantinuum.qpu.h2-2

Zie Azure Quantum voor meer informatie over Quantinuum in .

Het adaptieve RI-profiel instellen

Als u het adaptieve RI-doelprofiel QIR in de QDK extensie voor VS Code wilt instellen, kiest u een van de volgende opties.

  • Als u een Q#-project instelt, voegt u de volgende opdracht toe aan het bestand van qsharp.json uw project:

    {
      "targetProfile": "adaptive_ri"
    }
    
  • Als u in een .qs bestand werkt dat geen deel uitmaakt van een Q#-project, stelt u het doelprofiel rechtstreeks in uw Q#-code in. Voeg hiervoor de regel toe @EntryPoint(Adaptive_RI) vóór de invoerpuntbewerking in uw programma.

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

Voer de volgende code uit om het adaptieve RI-doelprofiel in te stellen in het QDK Python-pakket.

from qdk import init, TargetProfile

init(target_profile=TargetProfile.Adaptive_RI)

Adaptive RIF QIR profiel

Het adaptieve RIF-doelprofiel heeft dezelfde mogelijkheden als het adaptieve RI-profiel, maar ondersteunt ook programma's die rekenkundige bewerkingen met drijvende komma bevatten. Als uw kwantumhardware metingen tijdens het circuit kan uitvoeren en uw programma if-statements en drijvende-kommagetallen gebruikt die op basis van meetresultaten zijn berekend, moet u waarschijnlijk het adaptieve RIF-profiel gebruiken.

Het volgende Q#-programma kan bijvoorbeeld worden uitgevoerd op een adaptief RIF-doel.

@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 heeft momenteel geen adaptieve RIF-doelen, maar u kunt programma's uitvoeren voor adaptieve RIF-doelen op de lokale QDK simulators. Zie voor meer informatie over simulators in de QDK, Overzicht van kwantumsimulators in de QDK.

Het adaptieve RIF-profiel instellen

Als u het adaptieve RIF-doelprofiel QIR wilt instellen in de QDK extensie voor VS Code, kiest u een van de volgende opties.

  • Als u een Q#-project instelt, voegt u de volgende opdracht toe aan het bestand van qsharp.json uw project:

    {
      "targetProfile": "adaptive_rif"
    }
    
  • Als u in een .qs bestand werkt dat geen deel uitmaakt van een Q#-project, stelt u het doelprofiel rechtstreeks in uw Q#-code in. Voeg hiervoor de regel toe @EntryPoint(Adaptive_RIF) vóór de invoerpuntbewerking in uw programma.

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

Voer de volgende code uit om het adaptieve RIF-doelprofiel in te stellen in het QDK Python-pakket.

from qdk import init, TargetProfile

init(target_profile=TargetProfile.Adaptive_RIF) 

Adaptive QIR profiel

Het adaptieve doelprofiel heeft dezelfde mogelijkheden als het adaptieve RIF-profiel, maar ondersteunt ook programma's die gebruikmaken van lussen op basis van meetresultaten. Adaptive programma's kunnen lussen gebruiken met een vast aantal iteraties en RUS-lussen (repeat-until-success).

Azure Quantum heeft momenteel geen adaptieve doelen, maar u kunt programma's uitvoeren voor adaptieve doelen op de lokale QDK simulators. Zie voor meer informatie over simulators in de QDK, Overzicht van kwantumsimulators in de QDK.

Het adaptieve profiel instellen

Als u het adaptieve QIR doelprofiel in de QDK extensie voor VS Code wilt instellen, kiest u een van de volgende opties.

  • Als u een Q#-project instelt, voegt u de volgende opdracht toe aan het bestand van qsharp.json uw project:

    {
      "targetProfile": "adaptive"
    }
    
  • Als u in een .qs bestand werkt dat geen deel uitmaakt van een Q#-project, stelt u het doelprofiel rechtstreeks in uw Q#-code in. Voeg hiervoor de regel toe @EntryPoint(Adaptive) vóór de invoerpuntbewerking in uw programma.

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

Voer de volgende code uit om het adaptieve doelprofiel in te stellen in het QDK Python-pakket.

from qdk import init, TargetProfile

init(target_profile=TargetProfile.Adaptive) 

Unrestricted QIR profiel

Het onbeperkte doelprofiel kan alle kwantumprogramma's uitvoeren. Er is geen huidig kwantumdoel dat onbeperkte QIRondersteuning biedt, maar u kunt het onbeperkte profiel gebruiken om complexe programma's uit te voeren op de QDK simulators voor kwantumontwikkeling.

Het onbeperkte profiel instellen

Als u het onbeperkte QIR doelprofiel in de QDK extensie voor VS Code wilt instellen, kiest u een van de volgende opties.

  • Als u een Q#-project instelt, voegt u de volgende opdracht toe aan het bestand van qsharp.json uw project:

    {
      "targetProfile": "unrestricted"
    }
    
  • Als u in een .qs bestand werkt dat geen deel uitmaakt van een Q#-project, stelt u het doelprofiel rechtstreeks in uw Q#-code in. Voeg hiervoor de regel toe @EntryPoint(Unrestricted) vóór de invoerpuntbewerking in uw programma.

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

Voer de volgende code uit om het onbeperkte doelprofiel in te stellen in het QDK Python-pakket.

from qdk import init, TargetProfile

init(target_profile=TargetProfile.Unrestricted)