21.07.2015 Views

THESE de DOCTORAT Lyu ABE Imagerie à Haute Dynamique ...

THESE de DOCTORAT Lyu ABE Imagerie à Haute Dynamique ...

THESE de DOCTORAT Lyu ABE Imagerie à Haute Dynamique ...

SHOW MORE
SHOW LESS

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).

Hooray! Your file is uploaded and ready to be published.

Saved successfully!

Ooh no, something went wrong!