Caveat Emptor: Ce qui suit est fortement biaisé par mes propres recherches et points de vue sur le champ de la CQ. Cela ne constitue pas le consensus général du terrain et pourrait même contenir une certaine auto-promotion.
Le problème de montrer un «monde bonjour» de l'informatique quantique est que nous sommes toujours aussi éloignés des ordinateurs quantiques que Leibnitz ou Babbage de votre ordinateur actuel. Bien que nous sachions comment ils devraient fonctionner en théorie, il n’existe pas de méthode standard pour construire un ordinateur quantique physique. Un effet secondaire de cela est qu’il n’existe pas de modèle de programmation unique pour l’informatique quantique. Des manuels tels que Nielsen et al. vous montrera un diagramme de «circuit quantique», mais ceux-ci sont loin des langages de programmation formels: ils obtiennent un peu de "manipulation" sur des détails tels que le contrôle classique ou le traitement des résultats d'entrée / sortie / mesure.
Ce qui me convient le mieux dans mes recherches d’informaticien en langage de programmation, et pour faire comprendre le concept de contrôle de la qualité à d’autres informaticiens, c’est d’utiliser le modèle de contrôle de la qualité le plus simple que j’ai jamais rencontré et qui fasse tout.
Le programme informatique quantique le plus simple que j'ai vu et qui contient tous les éléments essentiels est un petit programme à trois instructions du modèle de programmation quantique le plus simple que j'ai rencontré à ce jour. Je l'utilise comme un «bonjour monde» pour faire passer les bases.
Permettez-moi de résumer rapidement le calcul de The Measurement de Danos et al. 1 qui est basé sur est basé sur l'ordinateur quantique unidirectionnel 2 : un qubit est détruit lorsqu'il est mesuré, mais sa mesure affecte tous les autres qubits qui étaient enchevêtrés avec lui. Il présente des avantages théoriques et pratiques par rapport aux ordinateurs quantiques "basés sur des circuits" réalisés par la puce photonique, mais la discussion est différente.
Prenons un ordinateur quantique ne comportant que cinq instructions: N, E, M, X et Z. Son "langage d'assemblage" est similaire à votre ordinateur habituel. Après avoir exécuté une instruction, il passe à l'instruction suivante de la séquence. Chaque instruction utilise un identifiant de qubit cible, nous utilisons seulement un nombre ici et d’autres arguments.
N 2 # create a new quantum bit and identify it as '2'
E 1 2 # entangle qubits '1' and '2', qubit 1 already exists and is considered input
M 1 0 # measure qubit '1' with an angle of zero (angle can be anything in [0,2pi]
# qubit '1' is destroyed and the result is either True or False
# operations beyond this point can be dependent on the signal of '1'
X 2 1 # if the signal of qubit '1' is True, execute the Pauli-X operation on qubit '2'
Le programme ci-dessus crée donc une ancilla, l’enchevêtre avec le qubit d’entrée, mesure l’entrée et, en fonction du résultat de la mesure, effectue une opération sur la ancilla. Le résultat est que le bit 2 contient maintenant l'état du bit 1 après le fonctionnement de Hadamard .
Ce qui précède est naturellement tellement bas que vous ne voudriez pas le coder à la main. L'avantage du calcul de mesure est qu'il introduit des «motifs», une sorte de macros composables qui vous permettent de composer des algorithmes plus volumineux, comme vous le feriez avec des sous-routines. Vous commencez avec des modèles à 1 instruction et vous développez des modèles plus grands à partir de là.
Au lieu d'une séquence d'instructions de type assembleur, il est également courant d'écrire le programme sous forme de graphique:
input .........
\--> ( E ) ---> (M:0) v
(N) ---> ( ) ------------> (X) ---> output
où les flèches pleines sont des dépendances de qubit et la flèche en pointillé est une dépendance de 'signal'.
Ce qui suit est le même exemple de Hadamard exprimé dans un petit outil de programmation que j'imagine qu'un "programmeur quantique" utiliserait.
edit: (ajout de la relation avec les ordinateurs 'classiques') Les ordinateurs classiques sont toujours très efficaces dans ce qu'ils font le mieux, et la vision est donc que les ordinateurs quantiques seront utilisés pour décharger certains algorithmes, de la même manière que l'ordinateur actuel décharge les graphiques vers un GPU. Comme vous l'avez vu ci-dessus, la CPU contrôlait l'ordinateur quantique en lui envoyant un flux d'instructions et en relisant les résultats des mesures à partir des "signaux" booléens. De cette manière, vous obtenez une séparation stricte entre le contrôle classique par la CPU et l’état quantique et les effets sur l’ordinateur quantique.
Par exemple, je vais utiliser mon coprocesseur quantique pour calculer un booléen ou un cointoss aléatoire. Les ordinateurs classiques sont déterministes, il est donc difficile de renvoyer un bon nombre aléatoire. Les ordinateurs quantiques sont intrinsèquement probabilistes, cependant, tout ce que je dois faire pour obtenir un 0 ou un aléatoire est de mesurer un qubit tout aussi équilibré. La communication entre le processeur et 'QPU' ressemblerait à ceci:
qrand() N 1; M 1 0;
==> | CPU | ------------> | QPU | ==> { q1 } , []
start()
| | ------------> | | ==> { } , [q1: 0]
read(q1)
| | ------------> | |
q1: 0
0 | | <----------- | |
<==
Où { ... }
est la mémoire quantique du QPU contenant des bits et [...]
sa mémoire classique (signal) contenant des booléens.
- Danos et al. Le calcul de la mesure. arXiv (2007) vol. quant-ph
- Raussendorf et Briegel. Un ordinateur quantique à sens unique. Physical Review Letters (2001), vol. 86 (22) pp. 5188-5191