• Aucun résultat trouvé

High Performance Fortran

2.3 Langages de programmation

2.3.1 High Performance Fortran

Le langage HPF [51] (High Performance Fortran) a ´et´e con¸cu dans les ann´ees 90 avec l’ambition de devenir un standard pour la programmation des machines parall`eles `a m´emoire distribu´ee. Construit au dessus du langage Fortran 95, HPF a ainsi pour objectif d’offrir une solution de choix `a la fois pour la parall´elisation incr´ementale des codes de calcul scientifique existants et pour l’´ecriture de nouvelles applications parall`eles. Bien que HPF soit un langage `a part enti`ere, on s’int´eresse `a sa partie directives, leur expressivit´e, leur compilation et leur impact sur les performances du code g´en´er´e.

Les directives HPF sont des indications au compilateur sur la fa¸con d’impl´ementer le programme sur une machine `a m´emoire distribu´ee et n’affectent pas sa s´emantique. Deux types d’indications sont notamment donn´ees au compilateur : la fa¸con de dis- tribuer les donn´ees et le parall´elisme potentiel des boucles r´ef´eren¸cant les donn´ees distribu´ees.

Le mod`ele global de distribution des donn´ees avec HPF est d´ecrit dans la figure 2.2. Les ´el´ements de tableaux peuvent ˆetre align´es les uns aux autres avec une directive

ALIGNet plusieurs tableaux peuvent ˆetre align´es au mˆeme tableau virtuel, appel´e tem- plate. Les tableaux, parfois via des templates, sont ensuite distribu´es avec la directive DISTRIBUTE sur un ensemble de processeurs d´eclar´es avec la directive PROCESSORS.

Figure 2.2 – Distribution des donn´ees avec HPF

HPF offre au programmeur le moyen d’indiquer au compilateur quelles it´erations de boucles peuvent ˆetre ex´ecut´ees en parall`ele. La directive INDEPENDENT indique que les instructions d’une boucle ne comportent pas de d´ependances entre les it´erations. Une clause de r´eduction, REDUCTION, peut ˆetre ajout´ee `a une boucle parall`ele pour d´eclarer une variable pour laquelle le compilateur doit impl´ementer une r´eduction parall`ele. La clause NEW permet d’indiquer des variables pouvant ˆetre privatis´ees, une op´eration utile notamment pour la gestion des tableaux temporaires aux nids de boucles. La construction de boucles FORALL, pass´ee dans le langage Fortran 95, permet de regrouper plusieurs indices de boucles. Coupl´ee avec la directive INDEPENDENT, plusieurs dimensions d’un nid de boucles peuvent ainsi ˆetre d´eclar´ees parall`eles. La construction FORALL ´evalue tous les membres droits des expressions d’affectation avant d’´ecrire les membres gauches.

Les compilateurs HPF interpr`etent les directives de distribution pour g´en´erer un programme parall`ele dans lequel chaque processeur est propri´etaire d’une partie des donn´ees distribu´ees, c’est-`a-dire que les donn´ees sont allou´es uniquement sur ce pro- cesseur. Cependant, aucune indication n’est donn´ee au compilateur sur la fa¸con de r´epartir les it´erations sur les diff´erents processeurs. La plupart des compilateurs HPF utilisent une heuristique connue sous le nom de owner-computes. Cette r`egle stipule que le calcul d’une expression est effectu´e par le propri´etaire de la donn´ee o`u le

r´esultat est stock´e. Des communications doivent ˆetre g´en´er´ees afin de r´ecup´erer tous les ´el´ements n´ecessaires au calcul et dont le processeur actif n’est pas propri´etaire. Cependant, cette r`egle n’est pas toujours suffisante pour r´epartir les it´erations. Un contre-exemple ´evident est la pr´esence pour une mˆeme it´eration de plusieurs instances d’instructions ´ecrivant des ´el´ements de diff´erents tableaux. Par exemple, dans le code suivant, il n’est pas ´evident de d´eterminer quel processeur doit ex´ecuter une it´eration i si les propri´etaires des ´el´ements A(i) et B(i-1) ne sont pas le mˆeme processeur. DO i=1, N

A(i) = f(i) B(i-1) = g(i) END DO

L’extension ON HOME de HPF permet de lever la contrainte owner-computes et de g´en´eraliser la d´efinition des processeurs devant ex´ecuter une instruction au propri´etaire d’une r´ef´erence quelconque. Dans l’exemple qui suit, le propri´etaire de l’´el´ement B(i) ex´ecute l’instruction. Si ce processeur n’est pas propri´etaire de l’´el´ement ´ecrit A(i-1), alors une communication doit ˆetre g´en´er´ee pour envoyer la nouvelle valeur de cet ´el´ement `a son propri´etaire.

!HPF$ ON HOME(B(i)) A(i-1) = B(i) + C(i)

Les distributions r´eguli`eres par blocs et bloc-cycliques propos´ees par HPF per- mettent de parall´eliser des programmes pour lesquels les dimensions parall`eles des diff´erents nids de boucles du programme co¨ıncident avec les dimensions distribu´ees des tableaux acc´ed´es. Des sch´emas d’acc`es tels que les balayages par lignes, ren- contr´es dans les applications impl´ementant des int´egrations ADI (Alternate Direct Implicit) pr´esentent un d´efi pour les distributions HPF de base. En effet, pour ces types d’acc`es, quelle que soit la dimension distribu´ee, elle sera a un moment acc´ed´ee de fa¸con s´equentielle par une boucle du programme, alors que l’acc`es aux autres dimen- sions est parall`ele. Pour pouvoir b´en´eficier du parall´elisme sur toutes les dimensions, HPF propose la directive REDISTRIBUTE qui permet de redistribuer dynamiquement les tableaux afin d’avoir, pour chaque nid de boucles, une correspondance entre les dimensions parall`eles et les dimensions distribu´ees des tableaux. La figure 2.3 montre un exemple illustrant ce probl`eme. Si le tableau est distribu´e par lignes (a), alors le calcul sur la premi`ere dimension est s´equentialis´e et prend quatre temps de calcul en plus des communications induites par les d´ependances de donn´ees entre les proces- seurs. Si le tableau est distribu´e par colonnes, alors le probl`eme sym´etrique se poserait pour les d´ependances sur la deuxi`eme dimension. Si le tableau est distribu´e sur les deux dimensions, alors il faudrait deux temps de calcul, avec la moiti´e des processeurs inactifs `a chaque temps (b). Enfin, si le tableau est redistribu´e dynamiquement afin d’exploiter le parall´elisme selon la deuxi`eme dimension, alors le calcul se fait en un seul temps (c). Si la derni`ere solution apporte un meilleur ´equilibrage de charge, le coˆut des communications n´ecessaires `a la redistribution peut ˆetre prohibitif pour les performances globales du programme. Les mesures de performances des benchmarks

NAS parall´elis´es avec HPF [43] montrent une perte de performance importante pour les programmes SP et BT `a cause du coˆut important de la redistribution.

Figure 2.3 – Le probl`eme des calculs en front-d’onde en HPF avec diff´erentes strat´egies de distribution