03.07.2013 Views

Les cartes mères

Les cartes mères

Les cartes mères

SHOW MORE
SHOW LESS

Create successful ePaper yourself

Turn your PDF publications into a flip-book with our unique Google optimized e-Paper software.

Pratique<br />

DUAL CORE, 64 BITS<br />

LA LOI D’AMDAHL<br />

Le gain de performance engendré par la parallélisation d’un programme en vue de lui faire exploiter<br />

plusieurs processeurs peut être évalué grâce à la loi d’Amdahl. Cette loi se base sur le fait qu’une partie<br />

seulement du traitement peut être parallélisée, le reste devant s’effectuer de façon séquentielle. La loi<br />

s’énonce ainsi :<br />

• « Temps parallèle » est le temps d’exécution avec parallélisation.<br />

• « Temps série » est le temps d’exécution sans parallélisation.<br />

• « %s » est la portion du programme qui s’exécute en série, (1-%s) la portion qui s’exécute en parallèle.<br />

• N est le nombre de processeurs.<br />

L’accélération induite par la parallélisation est donc :<br />

Considérons par exemple que 70% du moteur de jeu peut être parallélisé (%s = 30/100). L’accélération<br />

avec deux processeurs vaut alors 1,54, soit un gain théorique de 54%. Le graphe suivant nous montre<br />

l’évolution du gain de performance en fonction du nombre de processeurs présents, et ce pour un code<br />

parallélisé à 70% et un code parallélisé à 80%.<br />

Performance (en %)<br />

500<br />

450<br />

400<br />

350<br />

300<br />

250<br />

200<br />

150<br />

Loi d'Amdahl - Evolution de la performance en fonction du nombre de processeurs<br />

100<br />

1 2 4 8 16 32 64<br />

Evolution de la performance en fonction du nombre de processeurs<br />

Il apparaît un phénomène intéressant : avec deux et quatre processeurs, une parallélisation de 70% du<br />

code offre des gains proches de ceux obtenus avec un code parallélisé à 80%. A partir de 8 processeurs<br />

en revanche, il devient nécessaire d’augmenter la quantité de code parallélisé afin de conserver un gain<br />

notable. Ainsi, les configurations actuelles à deux cores (voire celles à quatre cores qui arriveront bientôt)<br />

peuvent se contenter d’une parallélisation partielle tout en fournissant un bon gain de performance.<br />

le moteur physique, le moteur de collisions,<br />

la gestion des particules, le<br />

moteur d ‘intelligence artificielle. La<br />

parallélisation « intra-frame » consiste<br />

alors à s’efforcer de traiter simultanément<br />

ces sous-systèmes, mais là encore<br />

ce n’est pas chose facile.<br />

En effet, ces sous-systèmes possèdent<br />

de fortes interactions, et cela se conçoit<br />

aisément : le résultat de l’IA reposition-<br />

PC Update mars / avril 06<br />

70% du code parallélisé 80% du code parallélisé<br />

Nombre de processeurs<br />

ne les objets, qui seront soumis à<br />

d’éventuelles collisions, créant donc de<br />

nouvelles composantes dans le moteur<br />

physique, qui va ainsi modifier les positions,<br />

utilisées par l’étape d’IA du calcul<br />

de l’image suivante … et ainsi de suite.<br />

Dépendance temporelle donc, mais<br />

également de données, certaines pouvant<br />

être partagées par plusieurs sous-<br />

systèmes. Difficile dans ce contexte de<br />

concevoir un fonctionnement simultané<br />

des sous-systèmes.<br />

A ce stade, deux choix s’offrent aux<br />

développeurs du moteur de jeu. Le<br />

choix facile, rapide, consiste à utiliser la<br />

puissance de calcul disponible du<br />

second core à d’autres fins, en ajoutant<br />

par exemple des effets spéciaux<br />

(visuels et sonores). Le noyau même du<br />

moteur reste affecté à un seul processeur,<br />

et donc le nombre d’image par<br />

secondes ne change pas par rapport à<br />

la version mono-processeur. Le jeu est<br />

plus joli, mais pas plus fluide.<br />

L’avantage de cette méthode est de ne<br />

presque pas toucher au noyau monothread<br />

du moteur existant, et permet<br />

ainsi de créer une version dual-core<br />

rapidement, et pour un coût modeste.<br />

En revanche, si le jeu peine à tourner de<br />

façon fluide sur un processeur monocore,<br />

l’ajout du second core n’y changera<br />

rien. Pire encore, le jeu sera bien<br />

souvent moins fluide, car les processeurs<br />

dual-core sont en général cadencés<br />

à des fréquences inférieures à<br />

celles de leur pendant mono-core. Le<br />

joueur se retrouve donc avec un jeu<br />

plus joli, mais moins fluide.<br />

L’autre solution consiste à refondre le<br />

moteur de jeu afin de lui faire bénéficier<br />

des cores présents. Refondre est un<br />

terme optimiste, et revient en pratique à<br />

refaire complètement le moteur de jeu,<br />

ce qui demande du temps et engendre<br />

un coût non négligeable. Le jeu en vaut<br />

la chandelle cependant, car le gain de<br />

performance peut s’avérer plus qu’intéressant.<br />

Si 70% des routines du moteur<br />

profitent d’une exécution en parallèle, le<br />

gain de performance dépasse 50%<br />

avec deux processeurs (voir encadré «<br />

Loi d’Amdahl »). La politique actuelle<br />

des constructeurs de microprocesseurs<br />

tend à multiplier les core d’exécution,<br />

ce qui ne pourra que bénéficier à des<br />

moteurs de jeu multi-threadés.<br />

Gageons que les processeurs quadcore<br />

arriveront avant longtemps sur nos<br />

PC, et la loi d’Amdahl nous permet de<br />

prédire un gain de performance de<br />

110%, soit un frame rate multiplié par<br />

deux environ.<br />

PARALLÉLISER<br />

L’IMPARALLÉLISABLE<br />

Concevoir un moteur de jeu multithreadé<br />

n’est cependant pas chose<br />

facile, du fait des dépendances entre<br />

les sous-systèmes.<br />

Une voie possible de parallélisme<br />

consiste à se dire que l’on ne va pas<br />

attendre qu’un sous-système ait fini

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

Saved successfully!

Ooh no, something went wrong!