Types de profils cibles dans Azure Quantum

Cet article décrit les différents types de target profils disponibles dans les fournisseurs d’informatique quantique dans Azure Quantum. À ce stade, en raison du stade précoce de développement du secteur, les appareils quantiques présentent des limitations et des exigences pour les programmes qui s’exécutent dessus.

Unités de traitement quantiques (QPU) : différents profils et leurs limitations

Un processeur quantique (QPU, Quantum Processing Unit) est un processeur physique ou simulé contenant un certain nombre de qubits interconnectés qui peuvent être manipulés pour le calcul d’algorithmes quantiques. Il s’agit du composant central d’un ordinateur ou simulateur quantique.

Les appareils quantiques sont encore une technologie émergente, et tous ne peuvent pas exécuter tout le code Q#. Par conséquent, vous devez garder à l’esprit certaines restrictions lors du développement de programmes pour différents targets. Actuellement, Azure Quantum et le kit de développement Quantum gèrent trois profils différents pour les QPU :

  • Full: ce profil peut exécuter n’importe quel programme Q# dans les limites de la mémoire pour les simulateurs ou du nombre de qubits pour les ordinateurs quantiques physiques.
  • No Control Flow: ce profil peut exécuter n’importe quel programme Q# qui ne nécessite pas l’utilisation des résultats des mesures de qubit pour contrôler le flux du programme. Dans un programme targetQ# pour ce type de QPU, les valeurs de type Result ne prennent pas en charge la comparaison d’égalité.
  • Basic Measurement Feedback: ce profil a une capacité limitée à utiliser les résultats des mesures de qubit pour contrôler le flux du programme. Dans un programme targetQ# ed pour ce type de QPU, vous pouvez comparer des valeurs de type Result dans le cadre de conditions au sein if d’instructions dans des opérations, ce qui permet la mesure du circuit intermédiaire. Les blocs conditionnels correspondants ne peuvent pas contenir d’instructions return ou set.

Créer et exécuter des applications pour Full le profil targets

Full profile targets peut exécuter n’importe quel programme Q#, ce qui signifie que vous pouvez écrire des programmes sans restrictions de fonctionnalités. Azure Quantum ne fournit target pas encore ce profil.

Créer et exécuter des applications pour No Control Flow le profil targets

No Control Flow profile targets peut exécuter une grande variété d’applications Q#, avec la contrainte qu’ils ne peuvent pas utiliser les résultats des mesures de qubit pour contrôler le flux du programme. Plus spécifiquement, les valeurs de type Result ne prennent pas en charge la comparaison d’égalité.

Par exemple, cette opération ne peut pas être exécutée sur un No Control Flowtarget:

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

La tentative d’exécution de cette opération sur un No Control Flowtarget échoue, car elle évalue une comparaison entre deux résultats (desired != M(q)) pour contrôler le flux de calcul avec une if instruction. Cela s’applique à tout type de branchement conditionnel, tel que elif les instructions et else .

Notes

Actuellement, vous ne pouvez pas envoyer de programmes quantiques qui appliquent des opérations sur des qubits qui ont été mesurés dans No Control Flowtargets, même si vous n’utilisez pas les résultats pour contrôler le flux de programme. Autrement dit, No Control Flowtargets n’autorisez pas les mesures de circuit moyen.

Par exemple, le code suivant ne peut pas être exécuté sur un No Control Flowtarget:

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

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

Actuellement, celles-ci No Control Flowtargets sont disponibles pour Azure Quantum :

Créer et exécuter des applications pour Basic Measurement Feedback le profil targets

Basic Measurement Feedback profile targets peut exécuter une grande variété d’applications Q#, avec la contrainte que vous ne pouvez comparer des valeurs de type Result que dans le cadre de conditions dans if des instructions dans des opérations. Ce type de profil suppose une amélioration par rapport No Control Flow aux profils, mais est toujours soumis à certaines limitations.

Basic Measurement Feedback profile targets autorise les opérations conditionnelles basées sur la mesure et les mesures de circuit intermédiaire, ce qui signifie que les qubits peuvent être mesurés de manière sélective à un point autre que l’instruction finale d’un programme quantique, et la sortie de la mesure peut être utilisée dans d’autres opérations. La mesure à mi-circuit permet plusieurs mesures à n’importe quel point du programme quantique. Les informations quantiques des qubits mesurés sont réduites à un état classique (zéro ou un), mais les qubits non mesurés conservent leur état quantique.

En Q# lors de la mesure d’un qubit, une valeur de type Result est retournée. Si vous souhaitez utiliser ce résultat dans une instruction conditionnelle, vous devez effectuer une comparaison directe dans l’instruction conditionnelle. Les blocs conditionnels correspondants ne peuvent pas contenir d’instructions return ou set.

Par exemple, le code Q# suivant est autorisé dans un Basic Measurement Feedbacktarget:

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

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

Toutefois, le même code avec l’évaluation booléenne déplacée ne serait pas autorisé :

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

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

L’opération SetQubitState dans peut être utilisée dans un Basic Measurement Feedbacktarget tant que vous n’incluez aucune return instruction ou set dans l’instruction ifNo Control Flow . Cela s’applique à tout type de branchement conditionnel, tel que elif les instructions et else . Par exemple, l’opération suivante ne peut pas être utilisée dans un Basic Measurement Feedbacktarget:

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

Actuellement, celles-ci Basic Measurement Feedbacktargets sont disponibles pour Azure Quantum :