

{"id":346,"date":"2020-04-25T11:46:31","date_gmt":"2020-04-25T09:46:31","guid":{"rendered":"https:\/\/project.inria.fr\/emergences\/?p=346"},"modified":"2020-12-15T11:50:59","modified_gmt":"2020-12-15T10:50:59","slug":"unifier-la-programmation-sur-les-processeurs-multicoeurs-heterogenes-le-defi-de-caroline-collange","status":"publish","type":"post","link":"https:\/\/project.inria.fr\/emergences\/unifier-la-programmation-sur-les-processeurs-multicoeurs-heterogenes-le-defi-de-caroline-collange\/","title":{"rendered":"Unifier la programmation sur les processeurs multic\u0153urs h\u00e9t\u00e9rog\u00e8nes : le d\u00e9fi de Caroline Collange"},"content":{"rendered":"<p><strong><span style=\"font-family: georgia, palatino, serif; font-size: 12pt; color: #000000;\">Pour satisfaire des exigences toujours plus fortes en rapidit\u00e9 et en puissance, l&rsquo;industrie adopte des processeurs h\u00e9t\u00e9rog\u00e8nes o\u00f9 voisinent maintenant deux types de circuits optimis\u00e9s pour des t\u00e2ches diff\u00e9rentes. Probl\u00e8me : chacun utilise un mod\u00e8le de programmation sp\u00e9cifique non compatible avec l&rsquo;autre. Scientifique au centre Inria Rennes \u2013 Bretagne Atlantique et laur\u00e9ate d&rsquo;une bourse Jeune Chercheuse attribu\u00e9e par l&rsquo;Agence nationale de la recherche, Caroline Collange veut introduire un jeu d&rsquo;instructions unique qui permettrait d&rsquo;unifier la programmation, am\u00e9liorant au passage la performance g\u00e9n\u00e9rale et l&rsquo;efficacit\u00e9 \u00e9nerg\u00e9tique. <\/span><\/strong><\/p>\n<hr \/>\n<div id=\"attachment_347\" style=\"width: 1227px\" class=\"wp-caption aligncenter\"><a href=\"https:\/\/project.inria.fr\/emergences\/files\/2020\/12\/Inria-0310-315.jpg\"><img loading=\"lazy\" decoding=\"async\" aria-describedby=\"caption-attachment-347\" class=\"size-full wp-image-347\" src=\"https:\/\/project.inria.fr\/emergences\/files\/2020\/12\/Inria-0310-315.jpg\" alt=\"\" width=\"1217\" height=\"685\" srcset=\"https:\/\/project.inria.fr\/emergences\/files\/2020\/12\/Inria-0310-315.jpg 1217w, https:\/\/project.inria.fr\/emergences\/files\/2020\/12\/Inria-0310-315-300x169.jpg 300w, https:\/\/project.inria.fr\/emergences\/files\/2020\/12\/Inria-0310-315-768x432.jpg 768w, https:\/\/project.inria.fr\/emergences\/files\/2020\/12\/Inria-0310-315-1024x576.jpg 1024w, https:\/\/project.inria.fr\/emergences\/files\/2020\/12\/Inria-0310-315-150x84.jpg 150w\" sizes=\"auto, (max-width: 1217px) 100vw, 1217px\" \/><\/a><p id=\"caption-attachment-347\" class=\"wp-caption-text\">\u00a9 Inria \/ Photo S. Er\u00f4me &#8211; Signatures<\/p><\/div>\n<div class=\"field__item\">\n<div class=\"paragraph paragraph--type--text-rich-block paragraph--view-mode--default\">\n<div class=\"field field--name-field-description field--type-text-long field--label-hidden field__items\">\n<div class=\"field__item\">\n<p>Toujours plus de calculs et toujours plus vite. Pour les processeurs, la course ne s&rsquo;arr\u00eate jamais. Les derniers mod\u00e8les sont dits \u201c<em>h\u00e9t\u00e9rog\u00e8nes<\/em>\u201d. Ils embarquent deux familles de circuits. D&rsquo;une part, un processeur CPU multic\u0153ur scalaire qui effectue des op\u00e9rations de fa\u00e7on s\u00e9quentielle, donc les unes apr\u00e8s les autres. Et d&rsquo;autre part, un GPU. Con\u00e7u au d\u00e9part pour acc\u00e9l\u00e9rer l&rsquo;affichage, ce processeur graphique affectionne les op\u00e9rations massivement parall\u00e8les. De fil en aiguille, il est devenu aussi tr\u00e8s pratique pour effectuer du calcul g\u00e9n\u00e9raliste. On appelle cela du \u00ab\u00a0GPGPU\u00a0\u00bb. Selon la nature des t\u00e2ches \u00e0 r\u00e9aliser, les calculs sont orient\u00e9s vers l&rsquo;une ou l&rsquo;autre de ces deux zones. Voil\u00e0 pour le paysage actuel.<\/p>\n<p>Petit b\u00e9mol : on ne programme pas un GPU comme on programme un CPU scalaire. Les industriels doivent donc faire cohabiter cahin caha deux univers logiciels pour g\u00e9rer deux architectures de jeux d&rsquo;instructions (ce que l&rsquo;on appelle les ISA). Difficile dans ces conditions d&rsquo;optimiser la r\u00e9partition des t\u00e2ches et la performance sans que la programmation ne tourne au cauchemar.<\/p>\n<div class=\"field__item\">\n<div class=\"paragraph paragraph--type--text-rich-block paragraph--view-mode--default\">\n<div class=\"field field--name-field-title field--type-string field--label-hidden field__items\">\n<h2 id=\"a0\" class=\"field__item\"><span style=\"font-size: 18pt; color: #ff0000;\">Garder un seul mod\u00e8le de programmation<\/span><\/h2>\n<\/div>\n<div class=\"field field--name-field-description field--type-text-long field--label-hidden field__items\">\n<div class=\"field__item\">\n<p>Comment sortir de l&rsquo;orni\u00e8re ? \u00ab\u00a0<em>En gardant un seul mod\u00e8le de programmation, un seul jeu d&rsquo;instructions sur un mat\u00e9riel o\u00f9 l&rsquo;on pourra choisir d&rsquo;utiliser des c\u0153urs tourn\u00e9s soit vers la performance s\u00e9quentielle soit vers la performance parall\u00e8le\u00a0\u00bb,<\/em>\u00a0explique <strong>Caroline Collange<\/strong>. La premi\u00e8re d\u00e9livre de faibles temps de latence. La deuxi\u00e8me permet de traiter de gros volumes. La chercheuse pr\u00e9voit en l&rsquo;occurrence de conserver<em> \u00ab\u00a0le jeu d&rsquo;instructions du CPU mais avec le mod\u00e8le d&rsquo;ex\u00e9cution du GPU.\u00a0\u00bb<\/em><\/p>\n<p>En pratique, la programmation pourra se faire par le biais de tout environnement de programmation parall\u00e8le pour CPU, par exemple <em>OpenMP<\/em>. On gagne ainsi en souplesse et en compatibilit\u00e9.<\/p>\n<\/div>\n<\/div>\n<\/div>\n<\/div>\n<div class=\"field__item\">\n<div class=\"paragraph paragraph--type--text-rich-block paragraph--view-mode--default\">\n<div class=\"field field--name-field-title field--type-string field--label-hidden field__items\">\n<h2 id=\"a1\" class=\"field__item\"><span style=\"font-size: 18pt; color: #ff0000;\">Regrouper les op\u00e9rations identiques<\/span><\/h2>\n<\/div>\n<div class=\"field field--name-field-description field--type-text-long field--label-hidden field__items\">\n<div class=\"field__item\">\n<p>Pierre angulaire de cette nouvelle approche : la vectorisation dynamique \u00e0 l&rsquo;ex\u00e9cution des <em>threads <\/em>au niveau de la microarchitecture. \u00ab\u00a0<em>La vectorisation consiste \u00e0 regrouper des <\/em>threads <em>effectuant des op\u00e9rations de type similaire, par exemple des additions. L&rsquo;avantage, c&rsquo;est qu&rsquo;ainsi, on ne lit l&rsquo;instruction qu&rsquo;une seule fois. Tout ce qui est traitement et contr\u00f4le n&rsquo;a lieu qu&rsquo;une seule fois. En factorisant ainsi des op\u00e9rations tr\u00e8s redondantes, on fait dispara\u00eetre le co\u00fbt de gestion scalaire.\u00a0\u00bb<\/em>\u00a0La vectorisation s&rsquo;effectuera d\u00e9sormais de mani\u00e8re transparente, sans intervention du compilateur.<\/p>\n<blockquote><p>L&rsquo;id\u00e9e de regrouper les op\u00e9rations identiques effectu\u00e9es sur des donn\u00e9es diff\u00e9rentes n&rsquo;est pas nouvelle : Ada Lovelace l&rsquo;avait d\u00e9j\u00e0 eue d\u00e8s 1842 ! Et c&rsquo;est un principe cl\u00e9 des GPU actuels. Mais avec nos travaux, on pourra appliquer pour la premi\u00e8re fois la vectorisation entre <em>threads <\/em>\u00e0 des jeux d&rsquo;instructions g\u00e9n\u00e9ralistes.<\/p><\/blockquote>\n<p>Ainsi, les <em>threads <\/em>pourront migrer en toute souplesse d&rsquo;un type de c\u0153ur \u00e0 un autre.<\/p>\n<p>L&rsquo;innovation portera aussi sur l&rsquo;acc\u00e8s m\u00e9moire. \u00ab\u00a0<em>Les programmes optimis\u00e9s pour les GPU font en sorte que les <\/em>threads <em>acc\u00e8dent \u00e0 des donn\u00e9es cons\u00e9cutives dans la m\u00e9moire. Mais sur les CPU, actuellement, cela ne fonctionne pas comme cela : chaque <\/em>thread <em>travaille dans son coin. Donc, quand on va centraliser les <\/em>threads <em>on va se retrouver avec des\u00a0 emplacements qui sont physiquement \u00e9loign\u00e9s les uns des autres. Ce n&rsquo;est pas efficace. Par cons\u00e9quent, il faut introduire une couche d&rsquo;abstraction pour rapprocher physiquement en m\u00e9moire les donn\u00e9es qui sont logiquement \u00e9loign\u00e9es.\u00a0\u00bb<\/em><\/p>\n<\/div>\n<\/div>\n<\/div>\n<\/div>\n<div class=\"field__item\">\n<div class=\"paragraph paragraph--type--text-rich-block paragraph--view-mode--default\">\n<div class=\"field field--name-field-title field--type-string field--label-hidden field__items\">\n<h2 id=\"a2\" class=\"field__item\"><span style=\"font-size: 18pt; color: #ff0000;\">Facteur 10<\/span><\/h2>\n<\/div>\n<div class=\"field field--name-field-description field--type-text-long field--label-hidden field__items\">\n<div class=\"field__item\">\n<p>Quels gains esp\u00e9rer ?\u00a0\u00ab\u00a0<em>Cela va d\u00e9pendre du contexte, des applications, etc. Nous serons quelque part entre la performance du CPU et celle du GPU, si possible plus proche du GPU. Actuellement, entre les deux, il y a un facteur 10. Nous pourrions nous situer dans ces ordres de grandeur, mais sans avoir \u00e0 r\u00e9\u00e9crire le code, sans avoir un surco\u00fbt \u00e0 payer.\u00a0\u00bb<\/em><\/p>\n<p>Et c&rsquo;est l\u00e0 l&rsquo;une des forces du projet.<\/p>\n<blockquote><p>Actuellement, les industriels d\u00e9pensent beaucoup d&rsquo;argent pour ces multiples programmations. G\u00e9n\u00e9raliser le mod\u00e8le d&rsquo;ex\u00e9cution permettrait de r\u00e9duire ces frais<em>.<\/em><\/p><\/blockquote>\n<p>Un fabricant de t\u00e9l\u00e9phones pourrait aussi, par exemple, acc\u00e9l\u00e9rer la mise sur le march\u00e9 des nouveaux produits. Cerise sur le g\u00e2teau : ces t\u00e9l\u00e9phones b\u00e9n\u00e9ficieraient indirectement d&rsquo;une meilleure autonomie car, en regroupant les <em>threads<\/em>, la vectorisation dynamique engendre une baisse de la d\u00e9pense \u00e9nerg\u00e9tique.<\/p>\n<p>Ces travaux pourraient donner lieu \u00e0 d\u00e9p\u00f4t de brevet sur l&rsquo;architecture mat\u00e9rielle. \u00ab\u00a0<em>Par ailleurs, nous souhaitons aussi nous int\u00e9resser \u00e0 la compilation. Nous pourrions proposer des optimisations sp\u00e9cifiques \u00e0 la vectorisation dynamique entre <\/em>threads<em>. Par exemple restructurer les boucles pour permettre davantage d&rsquo;op\u00e9rations identiques entre diff\u00e9rents <\/em>threads<em>. La difficult\u00e9 est de savoir quand appliquer ces transformations. Parfois c&rsquo;est b\u00e9n\u00e9fique. Parfois non. Il nous faudra d\u00e9velopper des analyses statiques pour permettre au compilateur de prendre la bonne d\u00e9cision au cas par cas.\u00a0\u00bb<\/em><\/p>\n<p>Des tests sur simulateurs permettront d&rsquo;\u00e9valuer plus pr\u00e9cis\u00e9ment l&rsquo;ensemble de ces pistes. Le projet qui vient de d\u00e9buter va s&rsquo;\u00e9tendre sur 42 mois. \u00ab\u00a0<em>L&rsquo;ANR va financer deux ans de postdoctorat et une th\u00e8se. Nous sommes d&rsquo;ailleurs \u00e0 la recherche d&rsquo;un \u00e9tudiant de th\u00e8se pour la rentr\u00e9e 2020.\u00a0\u00bb<\/em><\/p>\n<table style=\"border-collapse: collapse; width: 100%;\" border=\"1\">\n<tbody>\n<tr>\n<td style=\"width: 800px; background-color: #384257; border-color: #384257;\">\n<ul>\n<li><span style=\"font-size: 10pt; color: #ffffff;\"><em><a class=\"ext\" href=\"https:\/\/team.inria.fr\/pacap\/members\/collange\/\" target=\"_blank\" rel=\"noopener noreferrer\"><strong>Caroline Collange<\/strong><\/a> est membre de <a class=\"ext\" href=\"https:\/\/team.inria.fr\/pacap\/\" target=\"_blank\" rel=\"noopener noreferrer\"><strong>Pacap<\/strong><\/a>, une \u00e9quipe rennaise Inria (commune \u00e0 l&rsquo;UMR IRISA), sp\u00e9cialis\u00e9e dans les processeurs et les compilateurs. Le projet de recherche s&rsquo;appelle <strong>DYVE<\/strong>, un acronyme anglais pour : vectorisation dynamique pour des processeurs multi-c\u0153urs h\u00e9t\u00e9rog\u00e8nes \u00e0 jeu d&rsquo;instructions unique.<\/em><\/span><\/li>\n<\/ul>\n<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<\/div>\n<\/div>\n<\/div>\n<\/div>\n<\/div>\n<\/div>\n<\/div>\n<\/div>\n","protected":false},"excerpt":{"rendered":"<p>Pour satisfaire des exigences toujours plus fortes en rapidit\u00e9 et en puissance, l&rsquo;industrie adopte des processeurs h\u00e9t\u00e9rog\u00e8nes o\u00f9 voisinent maintenant deux types de circuits optimis\u00e9s pour des t\u00e2ches diff\u00e9rentes. Probl\u00e8me : chacun utilise un mod\u00e8le de programmation sp\u00e9cifique non compatible avec l&rsquo;autre. Scientifique au centre Inria Rennes \u2013 Bretagne Atlantique\u2026<\/p>\n<p> <a class=\"continue-reading-link\" href=\"https:\/\/project.inria.fr\/emergences\/unifier-la-programmation-sur-les-processeurs-multicoeurs-heterogenes-le-defi-de-caroline-collange\/\"><span>En savoir plus<\/span><i class=\"crycon-right-dir\"><\/i><\/a> <\/p>\n","protected":false},"author":1891,"featured_media":347,"comment_status":"closed","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[7],"tags":[21],"class_list":["post-346","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-recherche","tag-21"],"_links":{"self":[{"href":"https:\/\/project.inria.fr\/emergences\/wp-json\/wp\/v2\/posts\/346","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/project.inria.fr\/emergences\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/project.inria.fr\/emergences\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/project.inria.fr\/emergences\/wp-json\/wp\/v2\/users\/1891"}],"replies":[{"embeddable":true,"href":"https:\/\/project.inria.fr\/emergences\/wp-json\/wp\/v2\/comments?post=346"}],"version-history":[{"count":1,"href":"https:\/\/project.inria.fr\/emergences\/wp-json\/wp\/v2\/posts\/346\/revisions"}],"predecessor-version":[{"id":348,"href":"https:\/\/project.inria.fr\/emergences\/wp-json\/wp\/v2\/posts\/346\/revisions\/348"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/project.inria.fr\/emergences\/wp-json\/wp\/v2\/media\/347"}],"wp:attachment":[{"href":"https:\/\/project.inria.fr\/emergences\/wp-json\/wp\/v2\/media?parent=346"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/project.inria.fr\/emergences\/wp-json\/wp\/v2\/categories?post=346"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/project.inria.fr\/emergences\/wp-json\/wp\/v2\/tags?post=346"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}