{"id":16227,"date":"2018-07-31T17:01:31","date_gmt":"2018-07-31T16:01:31","guid":{"rendered":"https:\/\/www.oezratty.net\/wordpress\/?p=16227"},"modified":"2018-09-27T15:01:32","modified_gmt":"2018-09-27T14:01:32","slug":"comprendre-informatique-quantique-outils-de-developpement","status":"publish","type":"post","link":"https:\/\/www.oezratty.net\/wordpress\/2018\/comprendre-informatique-quantique-outils-de-developpement\/","title":{"rendered":"Comprendre l&#8217;informatique quantique &#8211; outils de d\u00e9veloppement"},"content":{"rendered":"<p>Apr\u00e8s avoir fait le tour de <a href=\"https:\/\/www.oezratty.net\/wordpress\/2018\/comprendre-informatique-quantique-algorithmes-et-applications\/\">quelques algorithmes quantiques<\/a> de base puis des <a href=\"https:\/\/www.oezratty.net\/wordpress\/2018\/comprendre-informatique-quantique-complexite\/\">th\u00e9ories de la complexit\u00e9<\/a> qui permettent de d\u00e9tourer vaguement l\u2019univers du possible pour le calcul quantique, il nous faut maintenant explorer les outils logiciels de l\u2019informatique quantique. Comme pour tout le reste, c\u2019est un monde enti\u00e8rement nouveau et avec des paradigmes tr\u00e8s diff\u00e9rents par rapport \u00e0 la cr\u00e9ation de logiciels classiques. On peut cependant y retrouver ses petits.<\/p>\n<p>Qui dit algorithme dit programmation, langages de programmation et environnements de d\u00e9veloppement. Comme l\u2019indique le sch\u00e9ma ci-dessous (dont j\u2019ai perdu la source\u2026), les logiciels quantiques sont organis\u00e9s en couches superpos\u00e9es avec en partant du bas, les qubits, puis le langage machine permettant de les piloter, puis le \u201chigh level quantum source code\u201d qui est en fait une sorte de macro-assembleur, pouvant tirer parti de biblioth\u00e8ques de fonctions avec des algorithmes pr\u00eats \u00e0 l\u2019emploi (transform\u00e9e de Fourier quantique, etc.) et enfin, d\u2019\u00e9ventuels langages de haut niveau adapt\u00e9s \u00e0 des besoins m\u00e9tiers sp\u00e9cifiques.<\/p>\n<p><a href=\"https:\/\/www.oezratty.net\/wordpress\/wp-content\/Stacks-quantiques.jpg\"><img loading=\"lazy\" decoding=\"async\" style=\"background-image: none; padding-top: 0px; padding-left: 0px; margin: 10px 0px 10px 10px; display: inline; padding-right: 0px; border-width: 0px;\" title=\"Stacks quantiques\" src=\"https:\/\/www.oezratty.net\/wordpress\/wp-content\/Stacks-quantiques_thumb.jpg\" alt=\"Stacks quantiques\" width=\"530\" height=\"287\" border=\"0\" \/><\/a><\/p>\n<p>Dans les couches basses entre langage machine et le macro-assembleur se trouvent des fonctions de conversion des portes quantiques en portes quantiques universelles support\u00e9es par l\u2019ordinateur quantique ainsi que les syst\u00e8mes de codes de correction d\u2019erreur qui peuvent demander l\u2019ex\u00e9cution d\u2019un grand nombre de portes quantiques. Un compilateur quantique va aussi faire de l\u2019optimisation en supprimant par exemple les s\u00e9quences de portes quantiques qui ne changent pas l\u2019\u00e9tat d\u2019un qubit, comme deux portes unitaires de Hadamard ou X (NOT) cons\u00e9cutives.<\/p>\n<p>Les architectures logicielles du quantique sont g\u00e9n\u00e9ralement hybrides et permettent de contr\u00f4ler un ordinateur quantique \u00e0 partir de logiciels proc\u00e9duraux assez traditionnels. Ils g\u00e8rent c\u00f4te \u00e0 c\u00f4te l\u2019ex\u00e9cution de logiciels classiques et de logiciels quantiques et manipulant de la m\u00e9moire traditionnelle en plus de celle des qubits, comme illustr\u00e9 dans le sch\u00e9ma ci-dessous originaire de la startup Rigetti.<\/p>\n<p><a href=\"https:\/\/www.oezratty.net\/wordpress\/wp-content\/Interacting-with-a-Classical-Computer.jpg\"><img loading=\"lazy\" decoding=\"async\" style=\"background-image: none; padding-top: 0px; padding-left: 0px; display: inline; padding-right: 0px; border-width: 0px;\" title=\"Interacting with a Classical Computer\" src=\"https:\/\/www.oezratty.net\/wordpress\/wp-content\/Interacting-with-a-Classical-Computer_thumb.jpg\" alt=\"Interacting with a Classical Computer\" width=\"535\" height=\"357\" border=\"0\" \/><\/a><\/p>\n<p>L\u2019ordinateur classique sert au minimum \u00e0 contr\u00f4ler l\u2019ex\u00e9cution des algorithmes quantiques, ne serait-ce que pour d\u00e9clencher les portes quantiques au bon moment, de mani\u00e8re s\u00e9quentielle. Il peut aussi d\u00e9clencher plusieurs algorithmes quantiques les uns apr\u00e8s les autres. On peut imaginer qu\u2019une application fera appel \u00e0 plusieurs algorithmes quantiques et pas un seul.<\/p>\n<p><strong>Les classes d\u2019outils de d\u00e9veloppement<\/strong><\/p>\n<p>On peut identifier quelques grandes classes d\u2019outils de cr\u00e9ation de logiciels quantiques : les outils de programmation graphiques, les langages de scripting, les langages interm\u00e9diaires, les langages machine et les compilateurs.<\/p>\n<p><u>Outils de programmation graphique<\/u><\/p>\n<p>Ils permettent de sp\u00e9cifier la s\u00e9quence des portes quantiques \u00e0 exploiter pour cr\u00e9er des algorithmes directement exploitables dans des ordinateurs quantiques du cloud ou des simulateurs HPC dans le cloud. Ces outils peuvent faire fonctionner et visualiser l\u2019\u00e9tat des qubits lorsque leur nombre est raisonnable. Ils permettent de v\u00e9rifier la faisabilit\u00e9 de l\u2019ex\u00e9cution de l\u2019algorithme. L\u2019un des exemples de tels outils est l\u2019<a href=\"https:\/\/quantumexperience.ng.bluemix.net\/qx\/experience\">IBM Q Experience<\/a> qui est propos\u00e9 dans le cloud depuis 2016 (<em>ci-dessous<\/em>).<\/p>\n<p><a href=\"https:\/\/www.oezratty.net\/wordpress\/wp-content\/IBM-Quantum-Experience.jpg\"><img loading=\"lazy\" decoding=\"async\" style=\"background-image: none; padding-top: 0px; padding-left: 0px; display: inline; padding-right: 0px; border-width: 0px;\" title=\"IBM Quantum Experience\" src=\"https:\/\/www.oezratty.net\/wordpress\/wp-content\/IBM-Quantum-Experience_thumb.jpg\" alt=\"IBM Quantum Experience\" width=\"543\" height=\"307\" border=\"0\" \/><\/a><\/p>\n<p>On y trouve aussi des simulateurs graphiques de qubits avec lesquels on peut se faire la main pour comprendre comment encha\u00eener les portes quantiques sur quelques qubits et visualiser le r\u00e9sultat visuellement. C\u2019est notamment le cas de <a href=\"http:\/\/www.quantumplayground.net\">QuantumPlayground<\/a> originaire de Google et de l\u2019outil open source <a href=\"http:\/\/algassert.com\/2016\/05\/22\/quirk.html\">Quirk<\/a>, ce dernier pouvant simuler jusqu\u2019\u00e0 16 qubits. Il fonctionne en ligne et on peut le t\u00e9l\u00e9charger pour l\u2019ex\u00e9cuter sur son propre ordinateur en local. Sa capacit\u00e9 n\u2019est limit\u00e9e que par la RAM dont vous disposez. Voici ci-dessous, un <a href=\"http:\/\/algassert.com\/quirk#circuit={%22cols%22:[[%22Counting8%22],[%22Chance8%22],[%22%E2%80%A6%22,%22%E2%80%A6%22,%22%E2%80%A6%22,%22%E2%80%A6%22,%22%E2%80%A6%22,%22%E2%80%A6%22,%22%E2%80%A6%22,%22%E2%80%A6%22],[%22Swap%22,1,1,1,1,1,1,%22Swap%22],[1,%22Swap%22,1,1,1,1,%22Swap%22],[1,1,%22Swap%22,1,1,%22Swap%22],[1,1,1,%22Swap%22,%22Swap%22],[%22H%22],[%22Z^%C2%BD%22,%22%E2%80%A2%22],[1,%22H%22],[%22Z^%C2%BC%22,%22Z^%C2%BD%22,%22%E2%80%A2%22],[1,1,%22H%22],[%22Z^%E2%85%9B%22,%22Z^%C2%BC%22,%22Z^%C2%BD%22,%22%E2%80%A2%22],[1,1,1,%22H%22],[%22Z^%E2%85%9F%E2%82%81%E2%82%86%22,%22Z^%E2%85%9B%22,%22Z^%C2%BC%22,%22Z^%C2%BD%22,%22%E2%80%A2%22],[1,1,1,1,%22H%22],[%22Z^%E2%85%9F%E2%82%83%E2%82%82%22,%22Z^%E2%85%9F%E2%82%81%E2%82%86%22,%22Z^%E2%85%9B%22,%22Z^%C2%BC%22,%22Z^%C2%BD%22,%22%E2%80%A2%22],[1,1,1,1,1,%22H%22],[%22Z^%E2%85%9F%E2%82%86%E2%82%84%22,%22Z^%E2%85%9F%E2%82%83%E2%82%82%22,%22Z^%E2%85%9F%E2%82%81%E2%82%86%22,%22Z^%E2%85%9B%22,%22Z^%C2%BC%22,%22Z^%C2%BD%22,%22%E2%80%A2%22],[1,1,1,1,1,1,%22H%22],[%22Z^%E2%85%9F%E2%82%81%E2%82%82%E2%82%88%22,%22Z^%E2%85%9F%E2%82%86%E2%82%84%22,%22Z^%E2%85%9F%E2%82%83%E2%82%82%22,%22Z^%E2%85%9F%E2%82%81%E2%82%86%22,%22Z^%E2%85%9B%22,%22Z^%C2%BC%22,%22Z^%C2%BD%22,%22%E2%80%A2%22],[1,1,1,1,1,1,1,%22H%22]]}\">exemple<\/a> de transform\u00e9e de Fourier quantique r\u00e9alis\u00e9e en Quirk.<\/p>\n<p><a href=\"https:\/\/www.oezratty.net\/wordpress\/wp-content\/Quirk-QFT-Example.jpg\"><img loading=\"lazy\" decoding=\"async\" style=\"background-image: none; padding-top: 0px; padding-left: 0px; display: inline; padding-right: 0px; border-width: 0px;\" title=\"Quirk QFT Example\" src=\"https:\/\/www.oezratty.net\/wordpress\/wp-content\/Quirk-QFT-Example_thumb.jpg\" alt=\"Quirk QFT Example\" width=\"543\" height=\"217\" border=\"0\" \/><\/a><\/p>\n<p>Je ferai en sorte de tester quelques algorithmes de base avec Quirk pour l&#8217;\u00e9dition ebook de cette s\u00e9rie d&#8217;articles !<\/p>\n<p><u>Langages de scripting<\/u><\/p>\n<p>Ils permettent de programmer en mode texte la structure des portes quantiques d\u2019une solution. Ces outils permettent d\u2019associer de la programmation classique avec enchainement de fonctions quantiques conditionn\u00e9es par l\u2019\u00e9tat de variables en m\u00e9moire classique.<\/p>\n<p>On compte deux principaux types de langages quantiques : les langages imp\u00e9ratifs et les langages fonctionnels. Les langages imp\u00e9ratifs sont les langages de programmation proc\u00e9duraux (objets ou pas) o\u00f9 l\u2019on d\u00e9crit les algorithmes pas \u00e0 pas. On y range les langages habituels tels que C, C++, PHP ou Java.<\/p>\n<p><a href=\"https:\/\/www.oezratty.net\/wordpress\/wp-content\/Quantum-Programming-Languages.jpg\"><img loading=\"lazy\" decoding=\"async\" style=\"background-image: none; padding-top: 0px; padding-left: 0px; margin: 10px 0px 10px 10px; display: inline; padding-right: 0px; border-width: 0px;\" title=\"Quantum Programming Languages\" src=\"https:\/\/www.oezratty.net\/wordpress\/wp-content\/Quantum-Programming-Languages_thumb.jpg\" alt=\"Quantum Programming Languages\" width=\"507\" height=\"239\" border=\"0\" \/><\/a><\/p>\n<p>Les langages fonctionnels sont utilis\u00e9s en d\u00e9finissant des fonctions diverses qui sont appel\u00e9es de mani\u00e8re ad-hoc par le programme. Les boucles (For, While) sont remplac\u00e9es par la r\u00e9cursivit\u00e9 de fonctions et il n\u2019y a pas de variables modifiables. Ils permettent d\u2019utiliser des type de donn\u00e9es abstraits de haut niveau manipul\u00e9s par les fonctions. L\u2019ensemble est plus concis.<\/p>\n<p>Une bonne part des langages de programmation traditionnels peuvent \u00eatre exploit\u00e9s en programmation imp\u00e9rative ou fonctionnelle, notamment d\u00e8s lors qu\u2019ils disposent de pointeurs de fonctions ou qu\u2019ils supportent une logique \u00e9v\u00e9nementielle. Dans une certaine mesure, JavaScript et Jquery peuvent-\u00eatre utilis\u00e9s comme des langages fonctionnels via leurs <em>call-back functions<\/em>. C\u2019est aussi le cas du C++.<\/p>\n<p>Chez les fournisseurs d\u2019ordinateurs quantiques tels qu\u2019IBM ou Rigetti, deux types de langages sont parfois propos\u00e9s : un langage interm\u00e9diaire (Quil chez Rigetti) et un langage de plus haut niveau sous la forme d\u2019extensions du langage de programmation Python (pyQuil chez Rigetti). Un outil de conversion converti le second dans le premier langage.<\/p>\n<p><u>Langages machine<\/u><\/p>\n<p>Ce sont les langages de plus bas niveau de programmation de l\u2019ordinateur quantique, qui programment l\u2019initialisation des qubits et l\u2019activation des portes universelles qui agissent dessus puis la mesure des r\u00e9sultats. Ils sont g\u00e9n\u00e9ralement sp\u00e9cifiques \u00e0 chaque type d\u2019ordinateur quantique, voir \u00e0 chaque ordinateur quantique.<\/p>\n<p><u>Compilateurs<\/u><\/p>\n<p>Les compilateurs exploitent le contenu des pr\u00e9c\u00e9dents outils, et surtout des langages de scripting, pour g\u00e9n\u00e9rer la s\u00e9quence de contr\u00f4le des portes physiques de l\u2019ordinateur quantique cible en langage machine, int\u00e9grant au passage les fonctions de corrections d\u2019erreurs quantiques (QEC). Ces compilateurs vont transformer les portes logiques utilis\u00e9es dans la programmation en portes physiques universelles exploit\u00e9es par l\u2019ordinateur quantique. Ils vont aussi calculer les temps d\u2019activation des portes et v\u00e9rifier que l\u2019accumulation de ces temps d\u2019activation est inf\u00e9rieure au temps de coh\u00e9rence des qubits de l\u2019ordinateur cible.<\/p>\n<p>Comme le aASM d\u2019Atos, ces outils de compilation peut \u00eatre \u201cmultiplateformes\u201d et supporter diff\u00e9rentes architectures d\u2019ordinateurs quantiques, au moins universels. La compilation n\u2019est pas la m\u00eame sur des ordinateurs quantiques topologiques. Ces compilateurs utilisent des langages de programmation quantiques. Les langages de programmation quantique sont g\u00e9n\u00e9ralement capables d\u2019associer de la programmation proc\u00e9durale classique avec de la programmation de registres et portes quantiques. Ils permettent de g\u00e9rer parall\u00e8lement de la m\u00e9moire classique \u00e0 des registres quantiques. Ils proviennent de la recherche ou de concepteurs d\u2019ordinateurs quantiques comme IBM, Microsoft, Rigetti et D-Wave.<\/p>\n<p>Voir cette pr\u00e9sentation qui d\u00e9crit bien quelques-unes des t\u00e2ches r\u00e9alis\u00e9es par des compilateurs quantiques : <a href=\"https:\/\/cpb-us-e1.wpmucdn.com\/blogs.gwu.edu\/dist\/d\/530\/files\/2018\/04\/Chong-QC-CCGrid-5-18-1ycb6dd.pdf\">Opportunities and Challenges in Intermediate-Scale Quantum Computing<\/a> de Fred Chong, 2018 (34 slides).<\/p>\n<p><strong>Langages de programmation quantiques issus de la recherche<\/strong><\/p>\n<p>Voici un aper\u00e7u des principaux langages quantiques cr\u00e9\u00e9s \u00e0 ce jour, avec tout d\u2019abord les langages ind\u00e9pendants des architectures mat\u00e9rielles et qui sont souvent issus de laboratoires de recherche.<\/p>\n<p>Ils pr\u00e9sentent l\u2019inconv\u00e9nient de ne pas \u00eatre g\u00e9n\u00e9ralement reli\u00e9s \u00e0 des offres d\u2019ordinateurs quantiques dans le cloud. Ils ont par contre souvent un certain privil\u00e8ge d\u2019ant\u00e9riorit\u00e9 par rapport aux outils de d\u00e9veloppement des fournisseurs d\u2019ordinateurs quantiques que nous verrons plus loin. C\u2019est bien normal puisque les chercheurs sont les premiers \u00e0 s\u2019embarquer dans les domaines \u00e9mergents, bien avant les acteurs priv\u00e9s. Ils ont souvent con\u00e7u les premiers langages de programmation quantique \u00e0 une \u00e9poque o\u00f9 l\u2019on n\u2019arrivait \u00e0 aligner qu\u2019\u00e0 peine un \u00e0 deux qubits !<\/p>\n<p>Ce sont un peu les Kernighan et Richie (cr\u00e9ateurs du langage C) et Bjarne Stroustrup (cr\u00e9ateur du C++) du domaine ! Vous remarquerez au passage qu\u2019un bon nombre de ces langages provient d\u2019Europe.<\/p>\n<ul>\n<li><strong>QCL <\/strong>ou Quantum Computation Language dispose d\u2019une syntaxe et des types de donn\u00e9es proches de ceux du langage C. Ce langage est l\u2019un des premiers qui soit pour la programmation quantique, cr\u00e9\u00e9 en 1998 par le chercheur Autrichien <strong>Bernhard \u00d6mer <\/strong>de l\u2019Austrian Institute of Technology \u00e0 Vienne. Il est d\u00e9crit dans <a href=\"http:\/\/tph.tuwien.ac.at\/~oemer\/doc\/structquprog.pdf\">Structured Quantum Programming<\/a>, 2009 (130 pages) qui positionne tr\u00e8s bien les diff\u00e9rences conceptuelles entre langages de programmation classiques et quantiques (<em>ci-dessous<\/em>).<\/li>\n<\/ul>\n<p><a href=\"https:\/\/www.oezratty.net\/wordpress\/wp-content\/Conceptual-differences.jpg\"><img loading=\"lazy\" decoding=\"async\" style=\"background-image: none; padding-top: 0px; padding-left: 0px; display: inline; padding-right: 0px; border-width: 0px;\" title=\"Conceptual differences\" src=\"https:\/\/www.oezratty.net\/wordpress\/wp-content\/Conceptual-differences_thumb.jpg\" alt=\"Conceptual differences\" width=\"453\" height=\"317\" border=\"0\" \/><\/a><\/p>\n<ul>\n<li><strong>Q Language <\/strong>est une extension du langage C++ qui fournit des classes permettant de programmer des portes quantiques (Hadamard, CNOT, SWAP, QFT pour transform\u00e9e de Fourier quantique). Il est document\u00e9 dans <a href=\"https:\/\/arxiv.org\/abs\/cs\/0103009\">Toward an architecture for quantum programming<\/a>, 2003 (23 pages), avec comme coauteur un certain Stefano Bettelli du Laboratoire de Physique Quantique de l\u2019Universit\u00e9 Paul Sabatier de Toulouse.<\/li>\n<li><strong>QFC <\/strong>et <strong>QPL <\/strong>sont deux langages fonctionnels d\u00e9finis par le Canadien Peter Selinger, le premier utilisant une syntaxe graphique et le second, une syntaxe textuelle. Ils sont d\u00e9crits dans <a href=\"https:\/\/www.mscs.dal.ca\/~selinger\/papers\/qpl.pdf\">Towards a Quantum Programming Language<\/a>, 2003 (56 pages).\n<ul><!--EndFragment--><\/ul>\n<\/li>\n<li><strong>QML <\/strong>est un langage de programmation fonctionnel cr\u00e9\u00e9 par les Anglais Thorsten Altenkirch et Jonathan Grattage dans <a href=\"https:\/\/arxiv.org\/pdf\/quant-ph\/0409065.pdf\">A functional quantum programming language<\/a>, 2004 (15 pages) et dont les principes sont bien d\u00e9crits dans la pr\u00e9sentation <a href=\"http:\/\/cs.ioc.ee\/~tarmo\/pls06\/altenkirch-slides.pdf\">Functional Quantum Programming<\/a> (151 slides).<\/li>\n<li><strong>qGCL <\/strong>ou Quantum Guarded Command Language a \u00e9t\u00e9 cr\u00e9\u00e9 par Paolo Zuliani de l\u2019Universit\u00e9 de Newcastle et est d\u00e9crit dans <a href=\"http:\/\/citeseerx.ist.psu.edu\/viewdoc\/download?doi=10.1.1.84.5012&amp;rep=rep1&amp;type=pdf\">Compiling quantum programs<\/a>, 2005 (39 pages).<\/li>\n<li><strong>Scaffold <\/strong>est un langage issu de l\u2019Universit\u00e9 de Princeton. Il est d\u00e9crit dans <a href=\"ftp:\/\/ftp.cs.princeton.edu\/techreports\/2012\/934.pdf\">Scaffold: Quantum Programming Language<\/a>, 2012 (43 pages). Il permet notamment de programmer du code traditionnel qui est ensuite transform\u00e9 automatiquement en portes quantiques via sa fonction C2QG (Classical code to Quantum Gates). Scaffold peut notamment g\u00e9n\u00e9rer du QASM. En voici un exemple de code, presque facile \u00e0 comprendre ! Son d\u00e9veloppement a \u00e9t\u00e9 \u00e9galement financ\u00e9 par l\u2019IARPA.<\/li>\n<\/ul>\n<p><a href=\"https:\/\/www.oezratty.net\/wordpress\/wp-content\/Scaffold-Code-Example.jpg\"><img loading=\"lazy\" decoding=\"async\" style=\"background-image: none; padding-top: 0px; padding-left: 0px; margin: 10px 0px 10px 10px; display: inline; padding-right: 0px; border-width: 0px;\" title=\"Scaffold Code Example\" src=\"https:\/\/www.oezratty.net\/wordpress\/wp-content\/Scaffold-Code-Example_thumb.jpg\" alt=\"Scaffold Code Example\" width=\"391\" height=\"399\" border=\"0\" \/><\/a><\/p>\n<ul>\n<li><strong>Quipper<\/strong> est un langage cr\u00e9\u00e9 en 2013 qui s\u2019appuie sur le langage classique <a href=\"https:\/\/en.wikipedia.org\/wiki\/Haskell_(programming_language)\">Haskell<\/a>, cr\u00e9\u00e9 en 1990, auquel il fournit des extensions sous forme de biblioth\u00e8ques. Il est document\u00e9 dans <a href=\"https:\/\/arxiv.org\/abs\/1304.5485\">An Introduction to Quantum Programming in Quipper<\/a>, 2013 (15 pages). Il manipule une version logicielle de QRAM, l\u2019\u00e9tat des registres quantiques, indispensable \u00e0 l\u2019ex\u00e9cution d\u2019algorithmes quantiques comme celui de Grover. Sa cr\u00e9ation a \u00e9t\u00e9 financ\u00e9e par l\u2019IARPA, l\u2019agence f\u00e9d\u00e9rale du renseignement am\u00e9ricain qui finance de la R&amp;D comme le fait la DARPA dans la d\u00e9fense. L\u2019IARPA est rattach\u00e9e au DNI (Director of national Intelligence), le coordinateur du renseignement US rattach\u00e9 \u00e0 la Maison Blanche et \u00e0 qui reportent les 17 patrons du renseignement US dont ceux de la CIA et de la NSA.<!--EndFragment--> Malgr\u00e9 tout cela, le langage ne semble pas avoir \u00e9volu\u00e9 depuis 2016.\n<ul><!--EndFragment--><\/ul>\n<\/li>\n<li><strong>ProjectQ <\/strong>est un langage de scripting l\u2019ETH Zurich qui prend la forme d\u2019un framework Python open source, diffus\u00e9 sur GitHub depuis 2016. Il comprend notamment un compilateur convertissant le code quantique en langage C++ pour son ex\u00e9cution dans un simulateur quantique \u00e0 processeur traditionnel. Cf <a href=\"https:\/\/quantum-journal.org\/papers\/q-2018-01-31-49\/pdf\/\">ProjectQ: An Open Source Software Framework for Quantum Computing<\/a> de Damian Steiger, Thomas H\u00e4ner et Matthias Troyer, 2018 (13 pages) qui explique bien comment le compilateur optimise le code en fonction des portes disponibles dans l\u2019ordinateur quantique (<em>ci-dessous<\/em>). Lanc\u00e9 d\u00e9but 2017, il supporte les ordinateurs quantiques d\u2019IBM via leur langage OpenQASM Ce qui est normal puisque l\u2019ETH Zurich est partenaire de ce dernier, ainsi que la simulation sur ordinateur traditionnel via une impl\u00e9mentation d\u00e9velopp\u00e9es en C++ qui supporte jusqu\u2019\u00e0 28 qubits. ProjectQ est compatible avec OpenFermion de Rigetti et Google, cit\u00e9 plus loin.<\/li>\n<\/ul>\n<p><a href=\"https:\/\/www.oezratty.net\/wordpress\/wp-content\/ProjectQ-Optimization.jpg\"><img loading=\"lazy\" decoding=\"async\" style=\"background-image: none; padding-top: 0px; padding-left: 0px; display: inline; padding-right: 0px; border-width: 0px;\" title=\"ProjectQ Optimization\" src=\"https:\/\/www.oezratty.net\/wordpress\/wp-content\/ProjectQ-Optimization_thumb.jpg\" alt=\"ProjectQ Optimization\" width=\"620\" height=\"168\" border=\"0\" \/><\/a><\/p>\n<ul>\n<li><strong>QWire <\/strong>est un autre langage de programmation quantique, issu de l\u2019Universit\u00e9 de Pennsylvanie (Upenn), document\u00e9 dans <a href=\"http:\/\/delivery.acm.org\/10.1145\/3010000\/3009894\/p846-paykin.pdf?ip=78.192.92.208&amp;id=3009894&amp;acc=CHORUS&amp;key=4D4702B0C3E38B35%2E4D4702B0C3E38B35%2E4D4702B0C3E38B35%2E6D218144511F3437&amp;__acm__=1529852634_8da05c59dc03f4e5b2daf73dd649250d\">QWIRE: A Core Language for Quantum Circuits<\/a> (13 pages) et dans <a href=\"http:\/\/www.cis.upenn.edu\/~rrand\/popl_2017_talk.pdf\">A core language for quantum circuits<\/a>, 2017 (97 slides).\n<ul><!--EndFragment--><\/ul>\n<\/li>\n<li><strong>Qubiter <\/strong>est un langage open source d\u00e9velopp\u00e9 en Python utilisable au-dessus d\u2019OpenQASM d\u2019IBM et OpenFermion de Google. Il a donc une application industrielle plus directe que les langages cit\u00e9s ci-dessus. Il date aussi de 2017.<\/li>\n<li><strong>Qumin <\/strong>est un langage quantique minimaliste con\u00e7u en Gr\u00e8ce en 2017. Cf <a href=\"https:\/\/arxiv.org\/abs\/1704.04460\">Qumin, a minimalist quantum programming language<\/a>, 2017 (34 pages). Il est disponible en open source.<\/li>\n<li><strong>QuEST <\/strong>(<a href=\"https:\/\/quest.qtechtheory.org\/about\/\">Quantum Exact Simulation Toolkit<\/a>) est un simulateur quantique d\u00e9velopp\u00e9 en langage C et supportant les APIs QUDA et les GPU de Nvidia, cr\u00e9\u00e9 par des chercheurs de l\u2019Universit\u00e9 d\u2019Oxford et open source. Le syst\u00e8me permet de simuler de 26 \u00e0 45 qubits selon la m\u00e9moire RAM disponible, respectivement de 2 Go et 256 Go. Il date aussi de 2017.<\/li>\n<li>S\u2019ensuivent des langages de mise en \u0153uvre quantique du <strong>lambda calculus<\/strong>, conceptualis\u00e9 par Alonzo Church et Stephen Cole Kleene pendant les ann\u00e9es 1930. Traduction en langage naturel ? Ce type de calcul permet de r\u00e9soudre des probl\u00e8mes tr\u00e8s complexes et de type NP-complet, la classe des probl\u00e8mes v\u00e9rifiable en temps polynomial et dont la r\u00e9solution requiert un temps exponentiel sur ordinateurs classiques et potentiellement polynomial sur ordinateurs quantiques !<\/li>\n<\/ul>\n<p>Dans la pratique, peu de d\u00e9veloppeurs d\u2019applications commerciales vont exploiter les langages ci-dessus. Ils vont plut\u00f4t s\u2019ancrer dans les langages issus des fournisseurs d\u2019ordinateurs quantiques commerciaux que voici <em>ci-dessous<\/em>.<\/p>\n<p><strong>Outils de d\u00e9veloppement des concepteurs de calculateurs quantiques<\/strong><\/p>\n<p>Avant m\u00eame que les ordinateurs quantiques universels soient op\u00e9rationnels \u00e0 une \u00e9chelle exploitable, la bataille des plateformes est d\u00e9j\u00e0 enclench\u00e9e. Les grands acteurs de l\u2019ordinateur quantique ont presque tous adopt\u00e9 une approche d\u2019int\u00e9gration verticale de bout en bout allant de l\u2019ordinateur aux outils de d\u00e9veloppement. C\u2019est en particulier le cas chez IBM, Microsoft, Rigetti et D-Wave.<\/p>\n<p>C\u2019est bien illustr\u00e9 dans le sch\u00e9ma <em>ci-dessous<\/em> de synth\u00e8se d\u00e9couvert dans <a href=\"https:\/\/quantumcomputingreport.com\/wp-content\/uploads\/2018\/06\/Overview-and-Comparison-of-Gate-Level-Quantum-Software-Platforms-Final-June-21-2018.pdf\">Overview and Comparison of Gate Level Quantum Software Platforms<\/a> de Ryan LaRose, juin 2018 (18 pages) qui d\u00e9crit par ailleurs fort bien les principaux environnements de d\u00e9veloppement d\u2019applications quantiques de Rigetti et IBM et dont est inspir\u00e9e la partie qui les concerne ici m\u00eame.<\/p>\n<p><a href=\"https:\/\/www.oezratty.net\/wordpress\/wp-content\/Comment-developper-en-quantique.jpg\"><img loading=\"lazy\" decoding=\"async\" style=\"background-image: none; padding-top: 0px; padding-left: 0px; display: inline; padding-right: 0px; border-width: 0px;\" title=\"Comment developper en quantique\" src=\"https:\/\/www.oezratty.net\/wordpress\/wp-content\/Comment-developper-en-quantique_thumb.jpg\" alt=\"Comment developper en quantique\" width=\"625\" height=\"430\" border=\"0\" \/><\/a><\/p>\n<p>L\u2019offre verticalis\u00e9e des acteurs cit\u00e9s int\u00e8gre souvent un langage quantique de bas niveau assimilable au langage machine, puis un langage de plus haut niveau assimilable au macro-assembleur des ordinateurs traditionnels, puis un framework open source exploitable le plus souvent en Python avec des fonctions pr\u00eates \u00e0 l\u2019emploi, un environnement de d\u00e9veloppement, \u00e9ventuellement, un simulateur graphique de portes quantiques et souvent, une offre d\u2019acc\u00e8s \u00e0 l\u2019ensemble en cloud.<\/p>\n<p>Reste \u00e0 inventer les langages avec un tr\u00e8s haut niveau d\u2019abstraction permettant de s\u2019affranchir des portes quantiques ! Pour l\u2019instant, il n\u2019en existe pas \u00e0 ma connaissance, sauf dans une certaine mesure autour des ordinateurs quantiques de D-Wave dont le mod\u00e8le de programmation est particulier.<\/p>\n<p><u>D-Wave<\/u><\/p>\n<p>C\u2019est le plus ancien acteur du march\u00e9. Il propose une gamme compl\u00e8te d\u2019outils logiciels qui ont bien \u00e9volu\u00e9 depuis sa cr\u00e9ation. L\u2019architecture n\u2019est d\u2019ailleurs pas \u00e9vidente \u00e0 suivre. Le plus bas niveau d\u2019acc\u00e8s aux ordinateurs D-Wave est le langage QMI, sorte de langage machine de d\u00e9finition des liens entre les qubits reli\u00e9s entre eux dans le processeur quantique de l\u2019ordinateur adiabatique. QMI est exploitable \u00e0 partir des langages C, C++ Python et m\u00eame Matlab, via l\u2019interface SAPI (Solver API).<\/p>\n<p><a href=\"https:\/\/www.oezratty.net\/wordpress\/wp-content\/D-Wave-software.jpg\"><img loading=\"lazy\" decoding=\"async\" style=\"background-image: none; padding-top: 0px; padding-left: 0px; display: inline; padding-right: 0px; border-width: 0px;\" title=\"D-Wave software\" src=\"https:\/\/www.oezratty.net\/wordpress\/wp-content\/D-Wave-software_thumb.jpg\" alt=\"D-Wave software\" width=\"555\" height=\"416\" border=\"0\" \/><\/a><\/p>\n<p>Au-dessus de QMI se situe une surcouche avec un plus haut niveau d\u2019abstraction, qbsolv, qui est une biblioth\u00e8que open source depuis fin 2017. Elle permet de r\u00e9soudre des probl\u00e8mes d\u2019optimisation en d\u00e9composant un probl\u00e8me QUBO (Quadratic Unconstrained Binary Optimization) pour le faire traiter par un ordinateur D-Wave ou un ordinateur traditionnel.<\/p>\n<p>Les d\u00e9veloppeurs peuvent aussi faire appel au langage open source QMASM (Quantum Macro Assembler) qui est un langage de bas niveau adapt\u00e9 \u00e0 la programmation sur ordinateur \u00e0 recuit quantique D-Wave. Comme qbsolv, QMASM permet de d\u00e9crire un \u201chamiltonien\u201d fait de relations entre qubits \u00e0 base de coupleurs qui sont dot\u00e9s d\u2019un poids comme le poids des synapses dans un r\u00e9seau de neurone. Lors de l\u2019ex\u00e9cution, l\u2019ordinateur D-Wave cherche ensuite \u00e0 d\u00e9terminer un minimum \u00e9nerg\u00e9tique de ce syst\u00e8me pour le faire converger vers une solution. Cette m\u00e9thode pr\u00e9sente un inconv\u00e9nient : il est pr\u00e9f\u00e9rable d\u2019initialiser le syst\u00e8me dans un \u00e9tat voisin de la solution recherch\u00e9e et cet \u00e9tat ne peut \u00eatre d\u00e9termin\u00e9 que par des calculs traditionnels. Bref, c\u2019est un peu le serpent qui se mort la queue !<\/p>\n<p>C\u2019est en tout cas un mod\u00e8le de programmation tr\u00e8s diff\u00e9rente de celui des portes quantiques universelles m\u00eame s\u2019il existe une \u00e9quivalence th\u00e9orique entre les mod\u00e8les adiabatiques et \u00e0 portes quantiques universelles comme nous l\u2019avons vu dans la <a href=\"https:\/\/www.oezratty.net\/wordpress\/2018\/comprendre-informatique-quantique-complexite\/\">partie pr\u00e9c\u00e9dente<\/a>.<\/p>\n<p>QMASM est aussi int\u00e9gr\u00e9 dans Quadrant, une plateforme compl\u00e8te pour le d\u00e9veloppement de solutions D-Wave dans le cloud appliqu\u00e9es au machine learning et lanc\u00e9e par D-Wave fin 2017 (<a href=\"https:\/\/www.dwavesys.com\/press-releases\/d-wave-announces-quadrant-machine-learning-business-unit\">source<\/a>).<\/p>\n<p>Enfin, on peut ajouter des surcouches tierces-parties comme QSage, un framework destin\u00e9 \u00e0 la r\u00e9solution de probl\u00e8mes d\u2019optimisation et ToQ, un autre framework, pour r\u00e9soudre des probl\u00e8mes de satisfaction de contraintes ainsi que le SDK de la startup canadienne 1Qbit. Avec ces surcouches, on commence \u00e0 se rapprocher des solutions m\u00e9tiers.<\/p>\n<p>A ce jour, D-Wave, ses partenaires et clients ont prototyp\u00e9 un bon nombre d\u2019algorithmes et solutions. Nous les \u00e9voquerons dans une partie \u00e0 venir sur l\u2019offre des diff\u00e9rents acteurs du march\u00e9.<\/p>\n<p><u>IBM<\/u><\/p>\n<p>IBM propose OpenQASM, un langage de programmation qui compl\u00e8te son outil de programmation graphique en ligne Q Experience. Il est sp\u00e9cifi\u00e9 dans <a href=\"https:\/\/arxiv.org\/pdf\/1707.03429.pdf\">Open Quantum Assembly Language<\/a>, 2017 (24 pages), ce document d\u00e9crivant au passage les nombreuses t\u00e2ches r\u00e9alis\u00e9es par le compilateur associ\u00e9. OpenQASM comprend une douzaine de commandes.<\/p>\n<p><a href=\"https:\/\/www.oezratty.net\/wordpress\/wp-content\/Quantum-compiler-tasks.jpg\"><img loading=\"lazy\" decoding=\"async\" style=\"background-image: none; padding-top: 0px; padding-left: 0px; margin: 10px 0px 10px 10px; display: inline; padding-right: 0px; border-width: 0px;\" title=\"Quantum compiler tasks\" src=\"https:\/\/www.oezratty.net\/wordpress\/wp-content\/Quantum-compiler-tasks_thumb.jpg\" alt=\"Quantum compiler tasks\" width=\"562\" height=\"321\" border=\"0\" \/><\/a><\/p>\n<p>Un langage de scripting de haut niveau associ\u00e9 \u00e0 OpenQASM est propos\u00e9 par IBM : <strong>Qiskit<\/strong>, exploitable en Python, JavaScript et Swift (un langage g\u00e9n\u00e9raliste d\u2019Apple) et sur Windows, Linux et MacOS. Il a \u00e9t\u00e9 lanc\u00e9 d\u00e9but 2017 et est en open source. Le slide ci-dessous qui d\u00e9crit Qiskit est issu de la pr\u00e9sentation <a href=\"https:\/\/www.rsaconference.com\/writable\/presentations\/file_upload\/pdac-f03-quantum-computing-is-here-final.pdf\">Quantum Computing is Here Powered by Open Source<\/a> 2018 (41 slides, <a href=\"https:\/\/www.rsaconference.com\/events\/us18\/agenda\/sessions\/10618-Quantum-Computing-Is-Here,-Powered-by-Open-Source\">vid\u00e9o<\/a>).<\/p>\n<p><a href=\"https:\/\/www.oezratty.net\/wordpress\/wp-content\/QISKIT.jpg\"><img loading=\"lazy\" decoding=\"async\" style=\"background-image: none; padding-top: 0px; padding-left: 0px; display: inline; padding-right: 0px; border-width: 0px;\" title=\"QISKIT\" src=\"https:\/\/www.oezratty.net\/wordpress\/wp-content\/QISKIT_thumb.jpg\" alt=\"QISKIT\" width=\"469\" height=\"266\" border=\"0\" \/><\/a><\/p>\n<p>Qiskit est fourni avec de nombreux templates et exemples de codes permettant d\u2019exploiter une vaste gamme d\u2019algorithmes quantiques connus. Il comprend une fonction \u201ccircuit-drawer\u201d qui g\u00e9n\u00e8re une visualisation graphique des circuits quantiques programm\u00e9s en passant par le langage de composition de documents open source LaTeX. La biblioth\u00e8que Aqua de Qiskit permet quant \u00e0 elle de d\u00e9velopper pour des NISQ, les premiers ordinateurs quantiques universels (Noisy Intermediate-Scale Quantum selon l&#8217;appellation de John Preskill).<\/p>\n<p>La compilation du code quantique a ensuite lieu pour ex\u00e9cuter l\u2019ensemble soit sur le simulateur HPC classique en cloud d\u2019IBM soit sur un ordinateur quantique universel comme ceux d\u2019IBM qui sont \u00e9galement accessibles dans le cloud.<\/p>\n<p><u>Rigetti <\/u><\/p>\n<p>La startup am\u00e9ricaine d\u00e9veloppe des ordinateurs quantiques universels \u00e0 base de qubits supraconducteurs dans la lign\u00e9e de ce que fait IBM. Elle propose aussi une plateforme int\u00e9gr\u00e9e avec le langage de bas niveau Quil qui supporte un mod\u00e8le de m\u00e9moire mixte classique et quantique. Il est document\u00e9 dans <a href=\"https:\/\/arxiv.org\/pdf\/1608.03355.pdf\">A Practical Quantum Instruction Set Architecture<\/a>, 2017 (15 pages). Il fonctionne sur Windows, Linux et MacOS. Le langage utilise la classe gates pour d\u00e9crire les op\u00e9rations \u00e0 op\u00e9rer sur les qubits, index\u00e9s de 0 \u00e0 n-1, pour n qubits et avec des portes quantiques. Le langage permet de cr\u00e9er de la programmation conditionnelle en fonction de l\u2019\u00e9tat des qubits.<\/p>\n<p>Il est compl\u00e9t\u00e9 du langage de scripting <strong>pyQuil <\/strong>open source lanc\u00e9 d\u00e9but 2017 qui est dot\u00e9 de la biblioth\u00e8que Grove d\u2019algorithmes quantiques de base (<a href=\"https:\/\/grove-docs.readthedocs.io\/en\/latest\/\">documentation<\/a>). Le pyQuil de haut niveau (assembleur) g\u00e9n\u00e8re le langage Quil de bas niveau (code machine).<\/p>\n<p><a href=\"https:\/\/www.oezratty.net\/wordpress\/wp-content\/pyQuil.jpg\"><img loading=\"lazy\" decoding=\"async\" style=\"background-image: none; padding-top: 0px; padding-left: 0px; display: inline; padding-right: 0px; border-width: 0px;\" title=\"pyQuil\" src=\"https:\/\/www.oezratty.net\/wordpress\/wp-content\/pyQuil_thumb.jpg\" alt=\"pyQuil\" width=\"476\" height=\"270\" border=\"0\" \/><\/a><\/p>\n<p>En voici un simple exemple avec un seul qubit activ\u00e9 par une porte de Hadamard qui cr\u00e9\u00e9 une superposition d\u2019\u00e9tat 0 et 1 permettant de cr\u00e9er un g\u00e9n\u00e9rateur de nombre vraiment al\u00e9atoire. Utilis\u00e9 de mani\u00e8re it\u00e9rative dans une boucle classique, le programme peut g\u00e9n\u00e9rer une s\u00e9rie al\u00e9atoire de 0 et de 1 avec 50% de chances d\u2019avoir l\u2019un ou l\u2019autre permettant de cr\u00e9er un code binaire unique compl\u00e8tement al\u00e9atoire.<\/p>\n<p><a href=\"https:\/\/www.oezratty.net\/wordpress\/wp-content\/Generateur-nombre-aleatoire.jpg\"><img loading=\"lazy\" decoding=\"async\" style=\"background-image: none; padding-top: 0px; padding-left: 0px; display: inline; padding-right: 0px; border-width: 0px;\" title=\"Generateur nombre aleatoire\" src=\"https:\/\/www.oezratty.net\/wordpress\/wp-content\/Generateur-nombre-aleatoire_thumb.jpg\" alt=\"Generateur nombre aleatoire\" width=\"572\" height=\"181\" border=\"0\" \/><\/a><\/p>\n<p>Rigetti propose l\u2019ex\u00e9cution de programmes quantiques dans ses ordinateurs en cloud et sur des simulateurs classiques via ses QVM, pour <strong>Quantum Virtual Machines<\/strong>. C\u2019est document\u00e9 dans <a href=\"https:\/\/media.readthedocs.org\/pdf\/pyquil\/latest\/pyquil.pdf\">pyQuil Documentation<\/a>, juin 2018 (120 pages) qui contient de nombreux exemples de code comme celui <em>ci-dessous<\/em>.<\/p>\n<p>Quil est utilisable \u00e0 partir de l\u2019environnement de d\u00e9veloppement <strong>Forest<\/strong> propos\u00e9 par Rigetti. Ces outils sont open source, mais pas multiplateforme. Dommage !<\/p>\n<p><a href=\"https:\/\/www.oezratty.net\/wordpress\/wp-content\/Rigetti-Forest.jpg\"><img loading=\"lazy\" decoding=\"async\" style=\"background-image: none; padding-top: 0px; padding-left: 0px; display: inline; padding-right: 0px; border-width: 0px;\" title=\"Rigetti Forest\" src=\"https:\/\/www.oezratty.net\/wordpress\/wp-content\/Rigetti-Forest_thumb.jpg\" alt=\"Rigetti Forest\" width=\"474\" height=\"268\" border=\"0\" \/><\/a><\/p>\n<p>Fin 2017, Google et Rigetti, lan\u00e7aient l\u2019initiative open source <strong>OpenFermion<\/strong>. Ce framework d\u00e9velopp\u00e9 en Python exploite aussi les travaux des universit\u00e9s de Delft (Pays-Bas) et de Leiden. C\u2019est une solution logicielle de cr\u00e9ation d\u2019algorithmes quantiques de simulation de fonctions chimiques supportant tout ordinateur quantique, des ordinateurs quantiques universels aux ordinateurs quantiques adiabatiques de D-Wave. C\u2019est une initiative int\u00e9ressante car elle cr\u00e9\u00e9 une ouverture multiplateforme sur un domaine d\u2019application cl\u00e9 des ordinateurs quantiques. Elle compl\u00e8te l\u2019approche multiplateforme d\u2019Atos. Voir l\u2019<a href=\"https:\/\/ai.googleblog.com\/2017\/10\/announcing-openfermion-open-source.html\">annonce<\/a> en octobre 2017, <a href=\"https:\/\/arxiv.org\/abs\/1710.07629\">OpenFermion: The Electronic Structure Package for Quantum Computers<\/a>, 2018 (19 pages) et la <a href=\"https:\/\/media.readthedocs.org\/pdf\/openfermion\/latest\/openfermion.pdf\">documentation d\u2019Openfermion<\/a>.<\/p>\n<p><a href=\"https:\/\/www.oezratty.net\/wordpress\/wp-content\/OpenFermion-Logo.jpg\"><img loading=\"lazy\" decoding=\"async\" style=\"background-image: none; padding-top: 0px; padding-left: 0px; display: inline; padding-right: 0px; border-width: 0px;\" title=\"OpenFermion Logo\" src=\"https:\/\/www.oezratty.net\/wordpress\/wp-content\/OpenFermion-Logo_thumb.jpg\" alt=\"OpenFermion Logo\" width=\"240\" height=\"114\" border=\"0\" \/><\/a><\/p>\n<p><u>Google<\/u><\/p>\n<p>En plus d\u2019OpenFermion qui est plut\u00f4t un framework de haut niveau, Google lan\u00e7ait le 19 juillet 2018 son propre langage quantique d\u00e9nomm\u00e9 Cirq en open source. Il cible les NISQ, l\u2019appellation de John Preskill d\u00e9j\u00e0 \u00e9voqu\u00e9e, des ordinateurs \u00e0 portes quantiques universelles de taille et performance interm\u00e9diaire c\u00f4t\u00e9 taux d\u2019erreurs. C\u2019est un framework pour Python. Il servira notamment \u00e0 programmer les ordinateurs quantiques de Google notamment celui de 72 qubits qui a \u00e9t\u00e9 annonc\u00e9 en mars 2018 mais n\u2019est toujours pas op\u00e9rationnel.<\/p>\n<p><a href=\"https:\/\/www.oezratty.net\/wordpress\/wp-content\/Google-Cirq.jpg\"><img loading=\"lazy\" decoding=\"async\" style=\"background-image: none; padding-top: 0px; padding-left: 0px; display: inline; padding-right: 0px; border-width: 0px;\" title=\"Google Cirq\" src=\"https:\/\/www.oezratty.net\/wordpress\/wp-content\/Google-Cirq_thumb.jpg\" alt=\"Google Cirq\" width=\"215\" height=\"86\" border=\"0\" \/><\/a><\/p>\n<p>Il doit supporter d\u2019autres ordinateurs quantiques, pas encore pr\u00e9cis\u00e9s \u00e0 ce stade. Il est aussi accompagn\u00e9 d\u2019un simulateur. Voir les explications dans <a href=\"https:\/\/hackernoon.com\/google-cirq-and-the-new-world-of-quantum-programming-6bc849190a70\">Google Cirq and the New World of Quantum Programming<\/a> de Jesus Rodriguez, juillet 2018. Un outil de compilation de code OpenFermion en Cirq est aussi propos\u00e9.<\/p>\n<p><u>Microsoft<\/u><\/p>\n<p>L\u2019\u00e9diteur propose trois briques pour les d\u00e9veloppeurs avec l\u2019extension<strong> LIQUi|&gt; <\/strong>du langage de scripting <a href=\"https:\/\/en.wikipedia.org\/wiki\/F_Sharp_(programming_language)\">F#<\/a> qui permet de faire de la simulation de programme quantique.<\/p>\n<p>Le tout est compl\u00e9t\u00e9 depuis d\u00e9cembre 2017 par le langage <strong>Q# <\/strong>qui semble surtout adapt\u00e9 \u00e0 la programmation d\u2019ordinateurs quantiques topologiques, qui n\u2019existent pas encore, mais sont simulables sur ordinateurs classiques dans le cloud avec jusqu\u2019\u00e0 30 qubits.<\/p>\n<p><a href=\"https:\/\/www.oezratty.net\/wordpress\/wp-content\/Qsharp.jpg\"><img loading=\"lazy\" decoding=\"async\" style=\"background-image: none; padding-top: 0px; padding-left: 0px; display: inline; padding-right: 0px; border-width: 0px;\" title=\"Qsharp\" src=\"https:\/\/www.oezratty.net\/wordpress\/wp-content\/Qsharp_thumb.jpg\" alt=\"Qsharp\" width=\"520\" height=\"294\" border=\"0\" \/><\/a><\/p>\n<p>Q# a une syntaxe d\u00e9riv\u00e9e du langage C# de Microsoft. Le tout est fourni sous la forme d\u2019extensions de l\u2019environnement de d\u00e9veloppement Visual Studio et dans le QDK, pour Quantum Development Kit. Un langage interm\u00e9diaire est g\u00e9n\u00e9r\u00e9 par le compilateur, QIL. Il est cens\u00e9 \u00eatre multiplateforme mais ne l\u2019est pas encore. Microsoft aura certainement int\u00e9r\u00eat \u00e0 rendre multiplateformes ses outils de d\u00e9veloppement pour capter l\u2019attention et le temps des d\u00e9veloppeurs.<\/p>\n<p><a href=\"https:\/\/www.oezratty.net\/wordpress\/wp-content\/Quantum-Code-Compilation.jpg\"><img loading=\"lazy\" decoding=\"async\" style=\"background-image: none; padding-top: 0px; padding-left: 0px; display: inline; padding-right: 0px; border-width: 0px;\" title=\"Quantum Code Compilation\" src=\"https:\/\/www.oezratty.net\/wordpress\/wp-content\/Quantum-Code-Compilation_thumb.jpg\" alt=\"Quantum Code Compilation\" width=\"517\" height=\"288\" border=\"0\" \/><\/a><\/p>\n<p><u>IonQ<\/u><\/p>\n<p>La startup issue de l\u2019Universit\u00e9 de Maryland planche sur la cr\u00e9ation d\u2019ordinateurs quantiques \u00e0 base d\u2019ions pi\u00e9g\u00e9s. Nous d\u00e9taillerons cela plus tard. Comme Rigetti, ils veulent aussi cr\u00e9er une offre logicielle \u201cfull stack\u201d adapt\u00e9e \u00e0 leur architecture d\u2019ordinateur quantique, et propos\u00e9e en cloud.<\/p>\n<p><u>Intel<\/u><\/p>\n<p>A ce stade, Intel n\u2019est pas tr\u00e8s avanc\u00e9 c\u00f4t\u00e9 d\u00e9veloppement de logiciels quantiques. Ils ont cr\u00e9\u00e9 \u00e0 ce stade un logiciel de simulation quantique pour ordinateurs classiques, qui est document\u00e9 dans <a href=\"https:\/\/arxiv.org\/abs\/1601.07195\">qHiPSTER: The Quantum High Performance Software Testing Environment<\/a> de Mikhail Smelyanskiy, Nicolas Sawaya, et Alan Aspuru-Guzik, 2016 (9 pages), les deux premiers auteurs travaillant chez Intel et de dernier \u00e0 Harvard. Il peut simuler jusqu\u2019\u00e0 une quarantaine de qubits.<\/p>\n<p><u>Atos<\/u><\/p>\n<p>Atos n\u2019est pas encore un fabricant d\u2019ordinateurs quantiques m\u00eame si leurs partenariats avec le CEA laissent indiquer que cela pourrait les int\u00e9resser. Ils proposent pour l\u2019instant un simulateur de logiciels quantiques \u00e0 base de supercalculateur \u00e0 processeurs Intel et avec leur propre architecture m\u00e9moire optimis\u00e9e, les aQML. Ils simulent de 30 \u00e0 40 qubits.<\/p>\n<p>aQASM (Atos Quantum Assemby Programming Language) est un langage de programmation compl\u00e9tant Python qui permet de cr\u00e9er des algorithmes quantiques ex\u00e9cutables sur les simulateurs aQML ou sur toute architecture physique d\u2019ordinateur quantique universel (\u00e0 terme). Le langage permet de d\u00e9finir des portes quantiques utilisant d\u2019autres portes quantiques, l\u2019\u00e9quivalent des objets, fonctions ou des macros dans la programmation traditionnelle. <a href=\"http:\/\/orap.irisa.fr\/wp-content\/uploads\/2018\/03\/Orap_Forum41_Presentation_Christelle_Piechurski.pdf\">Source<\/a> du sch\u00e9ma <em>ci-dessous<\/em>.<\/p>\n<p><a href=\"https:\/\/www.oezratty.net\/wordpress\/wp-content\/Atos-Qml.jpg\"><img loading=\"lazy\" decoding=\"async\" style=\"background-image: none; padding-top: 0px; padding-left: 0px; display: inline; padding-right: 0px; border-width: 0px;\" title=\"Atos Qml\" src=\"https:\/\/www.oezratty.net\/wordpress\/wp-content\/Atos-Qml_thumb.jpg\" alt=\"Atos Qml\" width=\"535\" height=\"301\" border=\"0\" \/><\/a><\/p>\n<p>aQASM est une d\u00e9clinaison du langage standard OpenQASM, \u00e9voqu\u00e9 plus haut. Ce langage est compl\u00e9t\u00e9 par une biblioth\u00e8que Python d\u00e9nomm\u00e9e PyAQASM qui permet de g\u00e9n\u00e9rer des fichiers aQUASM. Le langage permet de programmer l\u2019ex\u00e9cution r\u00e9p\u00e9titive de portes en boucles et de cr\u00e9er des fonctions r\u00e9utilisables. Le compilateur du code aQASM g\u00e9n\u00e8re un code binaire CIRC qui est le langage pivot de bas niveau, ensuite converti dans le langage de contr\u00f4le d\u2019ordinateurs quantiques universels sp\u00e9cifiques ou pour des supercalculateurs de simulation via l\u2019interface QPU (Quantum Processing Unit Interface). Il est compl\u00e9t\u00e9 de plugins d\u2019optimisation divers qui vont \u00e9liminer les portes qui ne servent \u00e0 rien et adapter le code \u00e0 l\u2019architecture mat\u00e9rielle cibl\u00e9e.<\/p>\n<p><strong>Vue d\u2019ensemble<\/strong><\/p>\n<p>J\u2019ai essay\u00e9 de consolider une vue d\u2019ensemble des offres \u201cpropri\u00e9taires\u201d de programmation quantique, en mettant de c\u00f4t\u00e9 les langages de programmation fonctionnels et imp\u00e9ratifs issus des laboratoires de recherche. Cela donne le sch\u00e9ma suivant qui positionne les outils de d\u00e9veloppement en fonction de leur niveau. Comme je ne suis pas s\u00fbr de toutes les composantes int\u00e9gr\u00e9es, je corrigerai au fil de l\u2019eau si besoin est ! Mes articles sur ces sujets nouveaux sont ainsi des puzzles qui se construisent dynamiquement !<\/p>\n<p><a href=\"https:\/\/www.oezratty.net\/wordpress\/wp-content\/Plateformes-logicielles-quantiques-c2.jpg\"><img loading=\"lazy\" decoding=\"async\" style=\"background-image: none; padding-top: 0px; padding-left: 0px; margin: 10px 0px 10px 10px; display: inline; padding-right: 0px; border-width: 0px;\" title=\"Plateformes logicielles quantiques constructeurs\" src=\"https:\/\/www.oezratty.net\/wordpress\/wp-content\/Plateformes-logicielles-quantiques-c2_thumb.jpg\" alt=\"Plateformes logicielles quantiques constructeurs\" width=\"536\" height=\"306\" border=\"0\" \/><\/a><\/p>\n<p>Le plus int\u00e9ressant dans tout cela est que nombreux sont les outils de d\u00e9veloppement qui permettent de se faire la main sur des algorithmes quantiques \u00e0 petite \u00e9chelle avant que de \u201cgros\u201d ordinateurs quantiques soient disponibles. A vous de jouer si le c\u0153ur vous en dit !<\/p>\n<p><strong>_______________________<\/strong><\/p>\n<p>Dans la <a href=\"https:\/\/www.oezratty.net\/wordpress\/2018\/comprendre-informatique-quantique-applications-metiers\/\">prochaine partie<\/a>, nous irons faire un tour du c\u00f4t\u00e9 des applications quantiques par secteur d\u2019activit\u00e9 avec notamment la chimie, l\u2019\u00e9nergie, l\u2019environnement, la sant\u00e9, le marketing, la finance et le renseignement. Nous en aurons alors termin\u00e9 avec la partie \u201clogicielle\u201d de cette s\u00e9rie et reviendront au mat\u00e9riel avec un panorama des ordinateurs quantiques class\u00e9s par technologie de qubits.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Apr\u00e8s avoir fait le tour de quelques algorithmes quantiques de base puis des th\u00e9ories de la complexit\u00e9 qui permettent de d\u00e9tourer vaguement l\u2019univers du possible pour le calcul quantique, il nous faut maintenant explorer les outils logiciels de l\u2019informatique quantique. Comme pour tout le reste, c\u2019est un monde enti\u00e8rement nouveau et avec des paradigmes tr\u00e8s [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[3057],"tags":[3098,1521,2397,2470,1088,3034,260,3052,3053,2458,3099,3097,3051,3096],"class_list":["post-16227","post","type-post","status-publish","format-standard","hentry","category-quantique","tag-aqml","tag-atos","tag-d-wave","tag-google","tag-ibm","tag-informatique-quantique","tag-intel","tag-ionq","tag-majorana","tag-microsoft","tag-q","tag-qasm","tag-rigetti","tag-scaffold"],"views":38578,"_links":{"self":[{"href":"https:\/\/www.oezratty.net\/wordpress\/wp-json\/wp\/v2\/posts\/16227","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.oezratty.net\/wordpress\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.oezratty.net\/wordpress\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.oezratty.net\/wordpress\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/www.oezratty.net\/wordpress\/wp-json\/wp\/v2\/comments?post=16227"}],"version-history":[{"count":0,"href":"https:\/\/www.oezratty.net\/wordpress\/wp-json\/wp\/v2\/posts\/16227\/revisions"}],"wp:attachment":[{"href":"https:\/\/www.oezratty.net\/wordpress\/wp-json\/wp\/v2\/media?parent=16227"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.oezratty.net\/wordpress\/wp-json\/wp\/v2\/categories?post=16227"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.oezratty.net\/wordpress\/wp-json\/wp\/v2\/tags?post=16227"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}