{"id":1161,"date":"2021-08-31T15:29:22","date_gmt":"2021-08-31T13:29:22","guid":{"rendered":"http:\/\/cdc.cyu.fr\/?page_id=1161"},"modified":"2025-07-01T16:03:10","modified_gmt":"2025-07-01T14:03:10","slug":"intro_hpc","status":"publish","type":"page","link":"https:\/\/cdc.cyu.fr\/index.php\/debuter-main\/intro_hpc\/","title":{"rendered":"Pourquoi utiliser un serveur de calcul ?"},"content":{"rendered":"\n<p>L&rsquo;objectif avou\u00e9 de l&rsquo;utilisation d&rsquo;un serveur de calcul est d&rsquo;obtenir des performances, ou plus exactement des acc\u00e9l\u00e9rations en terme de temps de calcul. Les n\u00e9ophytes dans le domaine &#8212; et il n&rsquo;y a aucune honte \u00e0 cel\u00e0 &#8212; s&rsquo;attendent souvent \u00e0 ce qu&rsquo;utiliser une\u00a0\u00bbgrosse machine\u00a0\u00bb suffise pour obtenir des performances. C&rsquo;est malheureusement plus compliqu\u00e9.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">D\u00e9porter ses calculs<\/h2>\n\n\n\n<p>Si l&rsquo;on d\u00e9sire simplement ex\u00e9cuter en m\u00eame temps de nombreuses instances d&rsquo;un m\u00eame code en faisant varier les param\u00e8tres, les nombreux noeuds de calcul d&rsquo;Osaka r\u00e9pondront parfaitement \u00e0 ce besoin. Le gain en temps de calcul sera \u00e9norme, puisqu&rsquo;au lieu de les ex\u00e9cuter un par un sur une machine personnelle, on les ex\u00e9cutera par centaines en m\u00eame temps. Voir les <a href=\"https:\/\/cdc.cyu.fr\/index.php\/supports-main\/job-script-array\/\">array jobs<\/a> pour ce type d\u2019utilisation.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Acc\u00e9l\u00e9rer ses calculs<\/h2>\n\n\n\n<p>Si l&rsquo;on d\u00e9sire <em>r\u00e9duire<\/em> le temps de calcul d&rsquo;un job (ou de plusieurs centaines), il sera n\u00e9cessaire de modifier le programme. Pour obtenir de meilleures performances, on se doit au minimum de modifier le processus de compilation. Et le plus souvent, il sera n\u00e9cessaire de modifier le code source. Ces modifications peuvent \u00eatre plus ou moins grandes &#8212; en terme de lignes de code &#8211;, et plus ou moins techniques&nbsp;:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>corrections de maladresses et\/ou d&rsquo;ambiguit\u00e9s syntaxiques,<\/li>\n\n\n\n<li>ajout de directives de compilation,<\/li>\n\n\n\n<li>modification de l&rsquo;algorithme afin de le parall\u00e9liser,<\/li>\n\n\n\n<li>changement d&rsquo;algorithme et\/ou de structure de donn\u00e9es.<\/li>\n<\/ul>\n\n\n\n<p>Toutes ces modifications sont ce que l&rsquo;on appelle des optimisations<sup data-fn=\"d0e5ca0a-db13-4071-bc2c-981c91d3cefa\" class=\"fn\"><a href=\"#d0e5ca0a-db13-4071-bc2c-981c91d3cefa\" id=\"d0e5ca0a-db13-4071-bc2c-981c91d3cefa-link\">1<\/a><\/sup>. Dans tous les cas, plus on d\u00e9sire obtenir de performances, plus les changements du code source seront radicaux. Et au bout du compte, on cherchera \u00e0 s&rsquo;adapter au plus pr\u00e8s des sp\u00e9cifications techniques de la machine sur laquelle on travaille.<\/p>\n\n\n\n<blockquote class=\"wp-block-quote is-layout-flow wp-block-quote-is-layout-flow\"><\/blockquote>\n\n\n\n<h2 class=\"wp-block-heading\">Limites de l&rsquo;optimisation<\/h2>\n\n\n\n<p>Lorsque les optimisations du code sont au plus pr\u00e8s des sp\u00e9cifications techniques de la machine, les performances sont maximales. Mais si l&rsquo;on doit changer de machine (pour une raison ou pour une autre), il faudra \u00e0 nouveau faire cet effort d&rsquo;adaptation. Il s&rsquo;agit donc de <em>pond\u00e9rer les efforts d\u00e9ploy\u00e9s<\/em> &#8212; qui peuvent \u00eatre consid\u00e9rables &#8212; avec l&rsquo;objectif \u00e0 long terme. <\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Si l&rsquo;objectif principal est la performance &#8212; en supposant que le code soit d\u00e9j\u00e0 test\u00e9 et \u00e9prouv\u00e9 &#8212; alors ces efforts valent le coup. On parlera dans ce cas de code en \u00e9tat de <em>production<\/em>. <\/li>\n\n\n\n<li>Si au contraire le code est un <em>prototype<\/em>, dont la m\u00e9thode peut \u00eatre abandonn\u00e9e au profit d&rsquo;une autre \u00e0 tout moment, le degr\u00e9 d&rsquo;optimisation et d&rsquo;efforts associ\u00e9s doivent \u00eatre soigneusement pes\u00e9s.<\/li>\n<\/ul>\n\n\n\n<p>Un autre param\u00e8tre fondamental \u00e0 consid\u00e9rer est la <em>lisibilit\u00e9<\/em> du code source. Des optimisations pouss\u00e9es vont tr\u00e8s souvent rendre un code incompr\u00e9hensible (bien que l&rsquo;inverse soit parfois vrai). Or un code de recherche a un devoir de transmission. Il est presque toujours amen\u00e9 \u00e0 \u00eatre repris&nbsp;: par le futur soit, par des \u00e9tudiants, par d&rsquo;autres chercheurs, etc&#8230; Il n&rsquo;est ainsi pas rare d&rsquo;abandonner des acc\u00e9l\u00e9rations potentielles suppl\u00e9mentaires pour conserver un code lisible et conceptuellement coh\u00e9rent. Placer la limite est tr\u00e8s subjectif, mais il faut au moins avoir en t\u00eate cette probl\u00e9matique.<\/p>\n\n\n<ol class=\"wp-block-footnotes\"><li id=\"d0e5ca0a-db13-4071-bc2c-981c91d3cefa\"><em>De fa\u00e7on g\u00e9n\u00e9rale, lorsque l&rsquo;on parle d&rsquo;optimisation, on se doit de pr\u00e9ciser le crit\u00e8re d&rsquo;optimisation. En effet, dans un domaine donn\u00e9 (informatique, fiscalit\u00e9, administration, &#8230;), il n&rsquo;y a rarement qu&rsquo;un seul crit\u00e8re pouvant \u00eatre am\u00e9lior\u00e9, et ces diff\u00e9rents crit\u00e8res peuvent \u00eatre incompatibles entre eux. Dans le cas d&rsquo;un code de calcul, on peut bien s\u00fbr optimiser le temps de calcul, mais aussi la taille m\u00e9moire de l&rsquo;ex\u00e9cutable, l&#8217;empreinte m\u00e9moire de l&rsquo;ex\u00e9cution, ou m\u00eame encore la consommation d&rsquo;\u00e9nergie. Dans le cadre du HPC (High Performance Computing), on s&rsquo;int\u00e9resse le plus souvent au temps de calcul (\u00e0 tel point qu&rsquo;on omet de le pr\u00e9ciser), et ce au d\u00e9triment (le plus souvent) des autres crit\u00e8res d&rsquo;optimisation.<\/em> <a href=\"#d0e5ca0a-db13-4071-bc2c-981c91d3cefa-link\" aria-label=\"Aller \u00e0 la note de bas de page 1\">\u21a9\ufe0e<\/a><\/li><\/ol>","protected":false},"excerpt":{"rendered":"<p>L&rsquo;objectif avou\u00e9 de l&rsquo;utilisation d&rsquo;un serveur de calcul est d&rsquo;obtenir des performances, ou plus exactement des acc\u00e9l\u00e9rations en terme de temps de calcul. Les n\u00e9ophytes dans le domaine &#8212; et il n&rsquo;y a aucune honte \u00e0 cel\u00e0 &#8212; s&rsquo;attendent souvent &hellip; <a href=\"https:\/\/cdc.cyu.fr\/index.php\/debuter-main\/intro_hpc\/\">Continuer la lecture <span class=\"meta-nav\">&rarr;<\/span><\/a><\/p>\n","protected":false},"author":1,"featured_media":0,"parent":117,"menu_order":0,"comment_status":"closed","ping_status":"closed","template":"","meta":{"footnotes":"[{\"content\":\"<em>De fa\u00e7on g\u00e9n\u00e9rale, lorsque l'on parle d'optimisation, on se doit de pr\u00e9ciser le crit\u00e8re d'optimisation. En effet, dans un domaine donn\u00e9 (informatique, fiscalit\u00e9, administration, ...), il n'y a rarement qu'un seul crit\u00e8re pouvant \u00eatre am\u00e9lior\u00e9, et ces diff\u00e9rents crit\u00e8res peuvent \u00eatre incompatibles entre eux. Dans le cas d'un code de calcul, on peut bien s\u00fbr optimiser le temps de calcul, mais aussi la taille m\u00e9moire de l'ex\u00e9cutable, l'empreinte m\u00e9moire de l'ex\u00e9cution, ou m\u00eame encore la consommation d'\u00e9nergie. Dans le cadre du HPC (High Performance Computing), on s'int\u00e9resse le plus souvent au temps de calcul (\u00e0 tel point qu'on omet de le pr\u00e9ciser), et ce au d\u00e9triment (le plus souvent) des autres crit\u00e8res d'optimisation.<\/em>\",\"id\":\"d0e5ca0a-db13-4071-bc2c-981c91d3cefa\"}]"},"class_list":["post-1161","page","type-page","status-publish","hentry"],"_links":{"self":[{"href":"https:\/\/cdc.cyu.fr\/index.php\/wp-json\/wp\/v2\/pages\/1161","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/cdc.cyu.fr\/index.php\/wp-json\/wp\/v2\/pages"}],"about":[{"href":"https:\/\/cdc.cyu.fr\/index.php\/wp-json\/wp\/v2\/types\/page"}],"author":[{"embeddable":true,"href":"https:\/\/cdc.cyu.fr\/index.php\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/cdc.cyu.fr\/index.php\/wp-json\/wp\/v2\/comments?post=1161"}],"version-history":[{"count":6,"href":"https:\/\/cdc.cyu.fr\/index.php\/wp-json\/wp\/v2\/pages\/1161\/revisions"}],"predecessor-version":[{"id":1920,"href":"https:\/\/cdc.cyu.fr\/index.php\/wp-json\/wp\/v2\/pages\/1161\/revisions\/1920"}],"up":[{"embeddable":true,"href":"https:\/\/cdc.cyu.fr\/index.php\/wp-json\/wp\/v2\/pages\/117"}],"wp:attachment":[{"href":"https:\/\/cdc.cyu.fr\/index.php\/wp-json\/wp\/v2\/media?parent=1161"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}