• Aucun résultat trouvé

CHAPITRE 2 Revue de littérature

2.1 Processeurs à usage spécifique

2.1.3 Génération du jeu d’instructions spécialisées

Dans un premier temps, certains chercheurs [27-29] se sont surtout attardés à proposer des méthodologies de recherche des coprocesseurs ou des unités fonctionnelles qui accéléreraient une application spécifique. Ces études ont montré que l’ajout d’unités spécifiques de calcul comme un MAC ou un coprocesseur de calcul en virgule flottante, pouvait être très efficace pour accélérer une application. Il est cependant notable que ces premiers travaux ne prenaient pas en compte les contraintes d’espace. C’est dans ce cadre que Imai et al. [75] ont proposé une méthodologie de partitionnement logiciel-matériel qui vise la génération d’unités fonctionnelles (FU) et qui tient compte des coûts des FU. D’autres chercheurs, tels que Cheung et al. [33], ont combiné les approches de [75] et [67] et ont ajouté une passe d’analyse de surface de silicium durant le processus de conception du jeu d’instructions spécialisées. L’approche de Cheung et al. [33] commence par la sélection d’unités fonctionnelles prédéfinies, suivie de la sélection de possibles instructions spécialisées. Ensuite, ils estiment les performances et les coûts associés à chacun des éléments sélectionnés. Enfin, la sélection définitive est effectuée en tenant compte des contraintes d’espace spécifiées. La méthodologie de Cheung et al. [33] vise la conception de processeurs configurables dont le jeu d’instructions peut être étendu comme on peut le faire avec la technologie de Tensilica.

La recherche sur l’extraction d’un jeu d’instructions spécialisées a beaucoup évolué récemment. Plusieurs solutions ont été proposées [40, 63, 146] pour la sélection d’un jeu d’instructions spécialisées (IS). La plupart des travaux de recherche se basent sur l’analyse du graphe de flot de données de l’application à accélérer. En effet, dans la

majorité des cas, le graphe est analysé et des sous-graphes qui constituent des segments potentiellement intéressants à accélérer en sont extraits. Comme l’ont mentionné Galuzzi et al. [60], la recherche d’IS par analyse de graphe comporte trois problèmes : la complexité de l’exploration du graphe, la forme du graphe et l’imbrication (« overlap ») des patrons de sous-graphes. En effet, pour un nombre n de noeuds dans le graphe, il y aura 2n sous-graphes possibles à analyser. C’est la raison pour laquelle on retrouve de nombreuses heuristiques qui réduisent l’espace d’exploration [140]. D’un autre coté, des algorithmes exacts sont aussi proposés, mais ils doivent parcourir tous les espaces possibles de recherche. Bien sûr, les heuristiques ne fournissent pas nécessairement des résultats optimaux, mais leurs résultats sont disponibles en moins de temps par rapport à ceux des algorithmes exacts. D’un autre côté, la forme du graphe étudié a un impact sur la qualité de la génération. En effet, selon qu’on traite un graphe acyclique ou cyclique, cela pourrait avoir un impact sur l’ordre d’exécution des noeuds et la détection du parallélisme. Le problème de l’imbrication apparaît lorsque l’algorithme de génération repose sur des patrons prédéfinis et que certains patrons, détectés durant l’analyse de graphe, se chevauchent.

Dans l’ensemble, les algorithmes de génération d’IS génèrent deux types d’instructions : les MISO (« multiple input and single output ») et les MIMO (« multiple input and multiple output »). Ces deux types se différencient par le nombre de sorties que l’instruction peut avoir; dans le cas des MISO [40, 61], l’instruction n’a qu’une seule sortie, alors que dans le cas des MIMO [9, 216], l’instruction pourra avoir plusieurs sorties. Bien sûr, cette différence a un impact considérable sur le nombre d’instructions trouvées et leur efficacité en terme de performance.

Bonzini et al. [19] ont très bien présenté les différentes approches employées pour l’extraction d’instructions spécialisées. Ils catégorisent les approches existantes en quatre types. Le premier type est itératif et il se compose de deux phases : une première phase trouve un sous-graphe qui offrirait des possibilités d’accélération et la seconde phase extrait les instructions spécialisées potentielles qui accéléreraient le sous-graphe résultant

de la première phase. Cette approche n’offre pas une couverture optimale du graphe de l’application, puisqu’elle vise les sous-graphes associés aux blocs de base de l’application. Un second type d’approche s’attaque aux inconvénients causés par la limite de deux entrées et une sortie des IS simples, en sachant que cette limite est souvent imposée par certains générateurs de processeurs spécialisés. Cette approche insère un ordonnanceur d’entrée/sortie qui réajuste les gains d’un sous-graphe selon la limite sur la bande passante de la banque de registres qui est, en fait, une contrainte de la technologie.

Le troisième type d’approche, inspirée de la solution de Clark et al. [35], se compose d’une première phase durant laquelle une liste des sous-graphes est extraite puis une analyse des sous-graphes isomorphes est effectuée, pour ensuite générer les IS. En effet, certaines recherches comme celles de Clark [35] et de Wolinski [187] ont employé la détection de sous-graphes isomorphes, afin d’exploiter les possibilités de réutilisation de matériel. Il ne faut pas oublier que l’ajout d’IS a un prix en termes de portes logiques, donc la réutilisation de matériel peut être un critère de sélection des IS. L’analyse individuelle des sous-graphes de l’application ne permet pas de profiter des similitudes qui pourraient exister entre ces derniers. Ce troisième type d’approche effectue une couverture optimale des branches de l’application mais elle ne prend pas en compte les contraintes technologiques.

Le dernier type d’approche proposée par [19] est inspirée du troisième type d’approche. Bonzoni et Pozzi suggèrent l’énumération des sous-graphes selon les contraintes architecturales de l’application (par exemple, l’élimination des sous-graphes trop longs ou dont la complexité de mise en œuvre matérielle serait trop élevée), ce qui permet d’éviter une recherche et une analyse complètes de tous les sous-graphes de l’application. Bonzoni et al. [19] proposent la détection de sous-graphes isomorphes, ce qui augmenterait les possibilités de réutilisation de matériel. Ensuite, la sélection et la génération des IS associées aux sous-graphes sont effectuées en fonction des contraintes technologiques. En effet, en fonction de la technologie visée FPGA ou ASIC, les IS sélectionnées seront sûrement différentes. Par exemple, la Figure 2 illustre un cas dans

lequel on retrouve trois blocs de base (BB) : BB1, BB2 et BB3. À chacun de ces BB est associé un sous-graphe.

Figure 2. Exemple d’extraction de sous-graphes

Dans le cas d’une recherche exhaustive des sous-graphes, on aurait obtenu beaucoup plus de sous-graphes. On remarque aussi les deux sous-graphes isomorphes SG1 et SG2. Si une seule instruction spécialisée est conçue pour exécuter la fonctionnalité de SG1 et SG2, l’économie en termes de complexité d’une mise en œuvre matérielle est évidente.

Soulignons que plusieurs des algorithmes de génération d’instructions spécialisées reposent sur une fonction de coûts et une fonction d’objectifs. En effet, la conception d’un processeur spécialisé a un coût mais elle permet aussi d’atteindre un ou des objectifs en termes de performance. Ainsi, généralement, la génération pourrait être guidée par les performances à atteindre en respectant des coûts en termes de portes logiques ou d’énergie consommée.