THESE de DOCTORAT Lyu ABE Imagerie à Haute Dynamique ...
THESE de DOCTORAT Lyu ABE Imagerie à Haute Dynamique ...
THESE de DOCTORAT Lyu ABE Imagerie à Haute Dynamique ...
You also want an ePaper? Increase the reach of your titles
YUMPU automatically turns print PDFs into web optimized ePapers that Google loves.
228 Annexe B : Programmation en parallèleB.3 Instructions et cycles processeurLa programmation en parallèle peut se résumer à un jeu dans lequel il faut sans cesseanticiper le résultat <strong>de</strong> toutes les opérations en cours et ne jamais laisser <strong>de</strong> temps mort. L’instructionla plus redoutée du programmeur est sans aucun doute le NOP (abréviation pour NoOPeration), car il signifie que l’on est obligé d’attendre un cycle <strong>de</strong> processeur (ici 5 nanosecon<strong>de</strong>s)sans rien faire. Je n’envisage même pas le cas où l’on <strong>de</strong>vrait écrire NOP n, où nserait le nombre <strong>de</strong> cycles à ne rien faire. Autrement dit, on doit toujours chercher à occuper leprocesseur s’il est en mesure <strong>de</strong> faire quelque chose d’utile. La plupart <strong>de</strong>s opérations logiqueset <strong>de</strong> calcul entre les registres s’exécutent en un cycle d’horloge, mais certaines d’entre elles,et non <strong>de</strong>s moindres requièrent plusieurs cycles. C’est le cas par exemple <strong>de</strong>s instructions quichargent une adresse mémoire dans un registre (2 cycles) ou <strong>de</strong>s sauts (4 cycles), c’est-à-dire<strong>de</strong>s branchements d’un endroit du co<strong>de</strong> vers un autre. Ces instructions ont un cycle d’exécutionplus long car elles <strong>de</strong>man<strong>de</strong>nt en général le calcul d’une adresse d’une zone mémoire.Cependant, s’il faut compter 2 cycles d’horloge pour accé<strong>de</strong>r à une zone mémoire, l’accès subséquentaux mémoires consécutives ne <strong>de</strong>man<strong>de</strong>nt aucun cycle supplémentaire et on parlealors <strong>de</strong> mo<strong>de</strong> <strong>de</strong> transfert burst ("en rafale").Malgré une apparente complexité, il faut bien prendre conscience que tout ceci confère unetrès gran<strong>de</strong> souplesse pour la programmation. Bien que je ne sois pas spécialiste <strong>de</strong> DSP, plusieurspersonnes m’ont affirmé, et je peux le comprendre, que la facilité <strong>de</strong> programmation <strong>de</strong>tels processeurs est sans commune mesure avec <strong>de</strong>s versions antérieures, dont l’architectureet les restrictions ren<strong>de</strong>nt la tâche du programmeur bien plus complexe.B.4 Comparaison du co<strong>de</strong> optimisé/non optimiséJe présente ici le même co<strong>de</strong>, mais dans <strong>de</strong>ux versions différentes où l’une a été optimisée(la secon<strong>de</strong>). Dans ce second co<strong>de</strong>, les instructions qui sont exécutées dans un seul cycled’horloge (5 ns) figurent avec le symbol "||" qui signifie bien sûr, "parallèle". Ainsi on voit quecertaines lignes <strong>de</strong> co<strong>de</strong> peuvent être regroupées <strong>de</strong> manière assez efficace, en aboutissantà un gain d’un facteur 2. Le gain théorique <strong>de</strong> 8 n’est pas atteint ici en raison d’une part<strong>de</strong> la relative simplicité <strong>de</strong> la tâche à accomplir, et d’autre part que les opérations les plusutilisées (opération logiques par exemple) ne peuvent s’exécuter plus <strong>de</strong> 2 à la fois. On trouvedonc <strong>de</strong>s astuces, en utilisant <strong>de</strong>s unités qui peuvent aboutir au même résultat. La proportiond’opérations "élémentaires" n’est pas suffisamment élevée par rapport aux opération coûteusesen temps (e.g. branchement, lecture <strong>de</strong> la mémoire) pour atteindre donc ce facteur <strong>de</strong> 8. Onpeut tout <strong>de</strong> même mentionner que l’optimisation <strong>de</strong> ce co<strong>de</strong> s’est faite "à la main", sans l’ai<strong>de</strong>d’outils spécifiques qui ne se sont pas révélés très performants dans ce cas (que ce soit enlangage C ou en langage assembleur).