Bonjour à tous!
Depuis environ six mois, la maison d'édition travaille activement sur le thème de l'informatique quantique et de son applicabilité pratique. Pendant longtemps, il n'a pas été possible de trouver un article valable à traduire sur ce sujet intéressant, jusqu'à ce qu'un tel article apparaisse sur le blog Oracle. La publication constituera une excellente introduction aux logiciels, au matériel et aux problèmes des sciences naturelles de ce nouveau paradigme, donc la lecture est un must.

Au cours des derniers mois et des dernières années, l'intérêt pour l'informatique quantique a considérablement augmenté. De nouveaux documents sont constamment publiés par des instituts de recherche, des entreprises ou des organisations gouvernementales, racontant des avancées décisives dans ce domaine. Dans le même temps, des articles avec une base technique plus faible discutent des conséquences potentielles de l'informatique quantique, et les prévisions vont du piratage des techniques de chiffrement les plus modernes aux promesses de guérir toutes les maladies et des travaux complets sur la création d'une IA à part entière. Cependant, toutes ces attentes ne sont pas également réalistes.
Si vous êtes un programmeur sobre pratiquant, vous vous demandez peut-être où se situe la frontière entre les faits et la fiction dans ces calculs, et comment l'informatique quantique affectera le développement de logiciels à l'avenir.
Naturellement, il reste de nombreuses années avant la création d'un matériel fonctionnel pour l'informatique quantique. Cependant, les principes généraux de ce paradigme sont déjà compris aujourd'hui, il existe des abstractions qui permettent aux développeurs de créer des applications dans lesquelles les possibilités de l'informatique quantique sont réalisées à l'aide de simulateurs.
L'informatique quantique est-elle réduite à un autre gain CPU?
Le développement de logiciels traditionnels à l'aide d'ordinateurs classiques implique la traduction d'un langage de programmation de haut niveau (par exemple, Java) en opérations effectuées sur un grand nombre de transistors (matériels).
Dans la figure 1, ce processus est schématisé dans sa forme la plus simple: le code source Java est compilé en code octet indépendant de la plateforme, qui, à son tour, est traduit en code machine spécifique à la plateforme. Le code machine utilise un certain nombre d'opérations simples (portes) effectuées en mémoire. Le principal composant matériel utilisé à cet effet est le transistor bien connu.
Fig. 1. Traduction d'un langage de programmation de haut niveau en opérations effectuées sur des transistors .
L'augmentation de la productivité réalisée au cours des dernières années est principalement due à l'amélioration des technologies matérielles. Les tailles d'un seul transistor ont considérablement diminué, et plus vous pouvez mettre de transistors sur chaque millimètre carré, plus l'ordinateur aura de mémoire et de puissance de traitement.
L'informatique quantique est une technologie perturbatrice, car ici les unités informatiques les plus simples ne sont pas des transistors classiques, mais des qubits, dont nous parlerons ci-dessous.
Le point n'est pas seulement dans les différences de ces éléments primaires, mais aussi dans un dispositif différent de soupapes. Ainsi, la pile avec fig. 1 en informatique quantique n'est pas applicable.
L'informatique quantique cassera-t-elle toute la pile ci-dessus jusqu'au niveau Java?
En bref - "pas vraiment". Les scientifiques conviennent progressivement que les ordinateurs quantiques seront particulièrement bons pour résoudre des problèmes spécifiques, tandis que d'autres problèmes seront résolus de manière plus rationnelle en utilisant des ordinateurs traditionnels. Cela semble familier, non? Une situation similaire est observée lors de la comparaison du GPU et du CPU. Bien que les transistors soient également utilisés dans le GPU, ils diffèrent en principe du CPU, mais de nombreuses applications écrites dans un langage de haut niveau utilisent les capacités du CPU et du GPU sous le capot. Les GPU sont très bons pour le traitement vectoriel, et dans de nombreuses applications et bibliothèques, le travail du CPU et du GPU est différencié.
Par exemple, c'est exactement la situation lors de l'utilisation de JavaFX ou Deeplearning4j. Si vous écrivez une application d'interface utilisateur à l'aide de JavaFX, vous ne travaillez qu'avec du code Java (peut-être aussi FXML pour déclarer une interface utilisateur). Lorsque la scène JavaFX doit être affichée à l'écran, les implémentations internes de JavaFX utilisent des shaders et des textures pour cela, en contactant directement les pilotes de GPU de bas niveau, comme illustré dans la figure 2. Par conséquent, vous n'avez pas à vous soucier de la partie du code qui est mieux adaptée pour fonctionner avec le CPU et qui avec GPU.
Fig. 2. JavaFX délègue le travail du GPU et du CPU.Comme le montre la fig. 2, le code d'implémentation JavaFX délègue le travail en le passant au GPU et au CPU. Bien que ces opérations soient cachées au développeur (non fournies via l'API), certaines connaissances du GPU sont souvent utiles lorsque vous devez développer des applications JavaFX plus puissantes.
Lors de l'utilisation de Deeplearning4j, une situation similaire se développe. Deeplearning4j dispose d'un certain nombre d'implémentations pour effectuer les opérations vectorielles et matricielles requises, et certaines d'entre elles utilisent des GPU. Cependant, peu importe pour vous, en tant que développeur final, les capacités que votre code utilisera - CPU ou GPU.
Il semble que les ordinateurs quantiques feront un excellent travail pour résoudre les problèmes qui, en règle générale, augmentent de façon exponentielle à mesure que le volume du problème augmente et, par conséquent, peuvent difficilement être résolus ou presque insolubles en utilisant des ordinateurs classiques. En particulier, les experts parlent d'un mode de réalisation hybride: une application de bout en bout typique contient du code classique qui s'exécute sur le CPU, mais il peut également contenir du code quantique.
Comment un système peut-il exécuter du code quantique?
Aujourd'hui, le matériel informatique quantique est encore extrêmement expérimental. Alors que les grandes entreprises et, vraisemblablement, certains États sont engagés dans le développement de prototypes, cette technologie n'est pas largement disponible. Mais, lorsqu'elle apparaît, sa forme peut être différente:
- Un coprocesseur quantique peut être intégré à l'unité centrale du système.
- Les problèmes quantiques peuvent être délégués à des systèmes de nuages quantiques.
Bien qu'il subsiste une énorme incertitude sur le contexte pratique de telles décisions, nous sommes de plus en plus d'accord sur l'apparence d'un code quantique. Au niveau le plus bas devrait se trouver les briques suivantes:
qubits et
portes quantiques . En vous basant sur eux, vous pouvez créer
des simulateurs quantiques qui implémentent le comportement attendu.
Par conséquent, un simulateur quantique est un outil idéal pour un tel développement.
Les résultats qu'ils donnent devraient être presque les mêmes que ceux qu'ils obtiendraient sur un équipement réel d'un ordinateur quantique - mais le simulateur fonctionne beaucoup plus lentement, car les effets quantiques qui accélèrent l'équipement quantique doivent être simulés à l'aide d'un logiciel traditionnel.
Quels sont les éléments de base de l'informatique quantique?
Il est souvent important de comparer des calculs classiques avec des calculs quantiques. En informatique classique, nous avons des bits et des portes.
Un bit contient un seul bit d'information et sa valeur peut être 0 ou 1.
Une vanne agit sur un ou plusieurs bits et peut fonctionner sur eux. Par exemple, la valve NOT, illustrée à la figure 3, inverse la valeur d'un bit. Si l'entrée est 0, alors la sortie de la porte NOT sera 1 et vice versa.
Fig. 3. PAS de valveEn informatique quantique, nous avons des bits et des portes équivalents. L'équivalent quantique d'un bit est qubit. La valeur d'un qubit peut être égale à 0 ou 1, comme un bit classique, cependant, elle peut également être dans la soi-disant superposition. Il s'agit d'un concept complexe, selon lequel un qubit peut être simultanément dans les deux états: 0 et 1.
Lorsqu'un qubit est en superposition, sa valeur est une combinaison linéaire des états 0 et 1. Ceci peut être écrit comme indiqué sur la Fig. 4:
Fig. 4. Égalité où le qubit est en superposition.Remarque: les qubits sont souvent écrits en
notation crochet , où le nom de la variable est placé entre les caractères "|" et ">".
L'expression de la Fig. 4 rapporte que qubit x est dans une superposition d'états | 0> et | 1>. Cela ne signifie pas qu'il est dans l'état | 0> OU dans l'état | 1>; cela signifie que son état actuel ne nous est pas connu.
En fait, il est dans les deux états en même temps, et sous cette forme, il peut être manipulé. Cependant, lorsque nous mesurons le qubit, il sera dans un état, soit | 0> ou | 1>. Il y a une autre restriction dans l'expression ci-dessus: a ^ 2 + b ^ 2 = 1.
Les valeurs de a et b sont probabilistes: il y a une probabilité a ^ 2 que, lorsque nous mesurons le qubit | x>, il contiendra la valeur | 0>, et la probabilité b ^ 2 que le qubit mesuré contienne la valeur | 1>.
Il existe un facteur limitant important qui rompt les joies de l'informatique quantique: après la mesure d'un qubit, toutes les informations sur la superposition potentielle dans laquelle il se trouvait sont perdues. La valeur qubit peut être 0 ou 1.
Dans les calculs, un qubit en superposition peut correspondre à 0 et 1 en même temps (avec des probabilités différentes). Si nous avons deux qubits, alors ils peuvent être utilisés pour représenter quatre états (00, 01, 10 et 11), encore une fois, avec des probabilités différentes. Nous arrivons ici à l'essence de la puissance des ordinateurs quantiques. Ayant huit bits classiques, vous pouvez représenter exactement un nombre dans la plage de 0 à 255. Les valeurs de chacun des huit bits seront 0 ou 1. Ayant huit qubits, vous pouvez représenter simultanément tous les nombres de 0 à 255.
À quoi sert la superposition si vous ne pouvez mesurer qu'un seul état?
Souvent, le résultat de l'algorithme est simple (oui ou non), mais pour y arriver, beaucoup de calcul parallèle est nécessaire. En tenant les qubits en superposition pendant les calculs, vous pouvez immédiatement prendre en compte de nombreuses options différentes. Sans prendre de décisions pour chaque combinaison individuelle, un ordinateur quantique peut calculer toutes les options en une seule étape.
Ensuite, dans de nombreux algorithmes quantiques, la prochaine étape importante commence: connecter le résultat de l'algorithme à une mesure qui donne un résultat significatif. Souvent, les interférences sont prises en compte: des résultats intéressants se superposent structurellement les uns aux autres, tandis que ceux sans intérêt s'annulent (interférences destructives).
Comment «transformer» un qubit en état de superposition?
Tout comme les portes classiques manipulent les bits, les portes quantiques manipulent les qubits. Certaines portes quantiques ressemblent à des portes classiques; par exemple, la porte Pauli-X transfère le qubit de l'état a | 0> + b | 1> à l'état b | 0 | + a | 1>, qui est similaire au principe de la porte NOT classique. En effet, lorsque a = 1 et b = 0, le qubit était initialement dans l'état | 0>. Après l'action de la valve Pauli-X, ce qubit passera dans l'état | 1>, comme le montre la Fig. 5.
Fig. 5. Le résultat de l'utilisation de la valve Pauli-X.Dans ce contexte, la valve Hadamard est très intéressante. Il met le qubit dans l'état | 0>: 1 / sqrt (2) * (| 0> + | 1>) dans une superposition, comme le montre la Fig. 6.
Fig. 6. Le résultat de l'application de la valve Hadamard.Après avoir appliqué la valve Hadamard à un qubit et mesurer le qubit, il y a une probabilité de 50% que la valeur du qubit soit 0 et 50% que la valeur du qubit soit 1. Jusqu'à ce que le qubit soit mesuré, il reste dans un état de superposition .
Comment est-ce possible?
Si vous êtes vraiment intéressé par la réponse à cette question, vous devrez étudier la physique quantique en détail. Mais, heureusement, il n'est pas nécessaire de comprendre toute la base théorique de ces phénomènes. Si le phénomène de superposition peut sembler incompréhensible, il est important de souligner que ce sont ces propriétés qui sont caractéristiques des particules élémentaires dans la nature. Par conséquent, l'informatique quantique est beaucoup plus proche des bases de la réalité physique qu'il n'y paraît à première vue.
Dois-je attendre quelques années, puis regarder de plus près l'informatique quantique?
Non. Dans ce cas, vous serez en retard. Il est théoriquement possible de développer d'abord le matériel, puis de procéder à l'étude du niveau logiciel et de voir ce qui peut être réalisé avec. Cependant, tous les concepts sont déjà plus ou moins clairs, et il est déjà possible d'écrire des simulateurs quantiques dans des langages populaires, dont Java, C #, Python et autres.
Ensuite, ces simulateurs peuvent être utilisés pour travailler sur des algorithmes quantiques. Bien que ces algorithmes n'entraîneront pas une telle augmentation des performances réalisable avec leur aide lors du travail sur un équipement quantique réel, ils devraient être complètement complets sur le plan fonctionnel.
Ainsi, si vous développez actuellement un algorithme quantique, vous avez le temps de l'améliorer et vous pouvez le démarrer lorsque l'équipement quantique apparaît dans l'accès.
Les algorithmes quantiques nécessitent une approche intellectuelle différente de celles classiques. D'éminents scientifiques ont commencé à développer des algorithmes quantiques au siècle dernier, et de plus en plus d'articles sont publiés décrivant ces algorithmes, y compris ceux pour la multiplication d'entiers, la recherche de liste, le travail d'optimisation de chemin, et bien plus encore.
Il existe d'autres raisons pour lesquelles il pourrait être utile de faire de l'informatique quantique aujourd'hui. La refactorisation d'un système logiciel dans une grande entreprise moderne ne fait pas partie de ces choses qui peuvent se faire du jour au lendemain. Cependant, l'un des domaines dans lesquels l'informatique quantique fera une véritable révolution est le chiffrement; après tout, tout repose sur la théorie selon laquelle sur un ordinateur classique, il est pratiquement impossible de décomposer un grand entier en facteurs premiers.
Bien qu'il puisse s'écouler de nombreuses années avant que les ordinateurs quantiques ne deviennent suffisamment grands pour résoudre facilement le problème de la factorisation entière, les développeurs savent qu'il faut de nombreuses années pour changer de système et y introduire de nouvelles technologies plus sûres.
Comment puis-je apprendre à travailler avec des algorithmes quantiques en Java?
Vous pouvez télécharger et maîtriser
Strange , le simulateur informatique quantique open source en Java. Strange vous permet de simuler un algorithme quantique en créant une série de qubits et en leur appliquant plusieurs portes quantiques.
Comme exemple simple, créons deux qubits, q [0] et q [1], de sorte qu'au départ, les deux soient à l'état 0. Ensuite, nous appliquons deux portes simples à chacun des qubits, de sorte que graphiquement cette opération corresponde à la fig. 7.
Le premier qubit ira d'abord à la valve Pauli-X, puis à la valve Hadamard. La valve Pauli-X le transférera de l'état | 0 & gt à | 1 & gt, et la valve Hadamard le traduira en une superposition avec des probabilités égales | 0 & gt et | 1 & gt. Par conséquent, si nous terminons la séquence entière 1000 fois et mesurons le premier qubit 1000 fois à la fin de ce cycle, alors en moyenne, nous pouvons nous attendre à ce que dans 500 cas, il ait une valeur de 0 et dans 500 cas, il aura une valeur de 1.
Le deuxième qubit est encore plus simple. Nous commençons par la porte d'identité, qui ne change pas le comportement du qubit, puis nous la passons à la porte Pauli-X, en changeant sa valeur de 0 à 1.
Fig. 7. Un exemple d'algorithme quantique qui peut être simulé à l'aide de Strange.Pour vous assurer que notre raisonnement est correct, vous pouvez créer un programme quantique simple en utilisant Strange.
public static void main(String[] args) { Program p = new Program(2); Step s = new Step(); s.addGate(new X(0)); p.addStep(s); Step t = new Step(); t.addGate(new Hadamard(0)); t.addGate(new X(1)); p.addStep(t); SimpleQuantumExecutionEnvironment sqee = new SimpleQuantumExecutionEnvironment(); Result res = sqee.runProgram(p); Qubit[] qubits = res.getQubits(); Arrays.asList(qubits).forEach(q -> System.out.println("qubit with probability on 1 = "+q.getProbability()+", measured it gives "+ q.measure())); }
Dans cette application, un programme quantique avec deux qubits est créé:
Program p = new Program(2);
Dans le cadre de ce programme, nous traversons deux étapes. Dans la première étape, appliquez la valve Pauli-X à q [0]. Nous n'appliquons pas la valve à q [1], et impliquons donc qu'elle fonctionnera avec la valve d'identité. Ajoutez cette étape au programme:
Step s = new Step(); s.addGate(new X(0)); p.addStep(s);
Ensuite, nous passons à la deuxième étape, où nous appliquons la valve Hadamard à q [0] et la valve Pauli-X à q [1]; ajoutez cette étape au programme:
Step t = new Step(); t.addGate(new Hadamard(0)); t.addGate(new X(1)); p.addStep(t);
Donc, notre programme est prêt. Maintenant, faisons-le. Un simulateur quantique est intégré à Strange, cependant, Strange peut également utiliser un service cloud pour exécuter des programmes dans une sorte de cloud, par exemple, dans
Oracle Cloud .
Dans l'exemple suivant, nous utilisons un simple simulateur intégré, exécutons le programme et obtenons les qubits résultants:
SimpleQuantumExecutionEnvironment sqee = new SimpleQuantumExecutionEnvironment(); Result res = sqee.runProgram(p); Qubit[] qubits = res.getQubits();
Avant de mesurer les qubits (et de perdre toutes les informations), nous affichons les probabilités. Maintenant, mesurez les qubits et regardez les valeurs:
Arrays.asList(qubits).forEach(q -> System.out.println("qubit with probability on 1 = "+q.getProbability()+", measured it gives "+ q.measure()));
En exécutant cette application, nous obtenons la sortie suivante:
qubit with probability on 1 = 0.50, measured it gives 1
qubit with probability on 1 = 1, measured it gives 1
Remarque: pour le premier qubit, la valeur 0 peut également être mesurée, comme nous l'avions prévu.
Si vous exécutez ce programme plusieurs fois, la valeur du premier qubit sera en moyenne de 0 dans la moitié des cas et de 1 dans la moitié des cas.
Est-ce tout ce que vous devez savoir sur l'informatique quantique?
Bien sûr que non. Ici, nous n'avons pas abordé un certain nombre de concepts importants, en particulier, nous n'avons pas discuté des
subtilités qui assurent l'interaction entre deux qubits, même s'ils sont physiquement très éloignés l'un de l'autre. Nous n'avons pas parlé des algorithmes quantiques les plus connus, dont l'algorithme de Shore, qui permet de décomposer des entiers en facteurs premiers. Nous avons également ignoré un certain nombre de faits mathématiques et physiques, en particulier, ne tenons pas compte du fait que dans la superposition | x> = a | 0> + b | 1>, les deux nombres, a et b, peuvent être complexes.
Cependant, l'objectif principal de cet article était de vous donner l'impression de l'informatique quantique et de comprendre comment ils s'intègrent dans l'avenir du développement logiciel.