« Les cartes graphiques/Les processeurs de shaders » : différence entre les versions

Contenu supprimé Contenu ajouté
Ligne 83 :
L'unité de texture peut fonctionner en parallèle des unités de calcul, comme toute unité d'accès mémoire. Ainsi, on peut poursuivre l’exécution d'un ''shader'' en parallèle de l'accès mémoire, à condition que les calculs du ''shader'' n'aient pas besoin de la donnée lue. La méthode consiste simplement à continuer l’exécution du ''shader'' en cours, celui qui a lancé la lecture de texture. Les instructions qui suivent la lecture sont donc exécutées, tant qu'elles sont indépendante de la lecture.
 
Évidemment, les ''shaders'' doivent être conçus pour que cette technique marche, en séparant au plus les lectures des instructions qui utilisent le résultat de la lecture, et en ayant assez d’instructions indépendantes. Ces deux conditions sont rarement réunies, mais elles permettent de gagner en performance. Si le ''shader'' est bien conçu, à savoir si les instructions qui suivent la lecture de texture sont bien indépendante de celle-ci, alors le processeur de ''shader'' peut masquer totalement ou partiellement la latence de l’accès mémoire. Idéalement, si un accès mémoire dure 200 cycles d'horloge, il faut que le ''shader'' exécute des instructions indépendantes de la lecture durant 200 cycles d'horloge. Dans la réalité, les résultats seront moins bons. On réussira peut-être à exécuter une dizaine d'instruction pendant la lecture, mais ce gain est bon à prendre.
 
Outre le manque d'instructions indépendantes de la lecture, un autre problème réduit les performances de cette technique. Un ''shader'' effectue souvent plusieurs accès mémoire assez rapprochés. Si l'unité de texture ne peut pas gérer plusieurs lectures en parallèle, la lecture la plus récente est mise en attente pendant que al lecture précédente se termine. Ce faisant, elle bloque toutes les instructions qui la suivent. C'était un problème sur les cartes graphiques anciennes, mais ce n'est plus tellement le cas de nos jours. Les unités de texture actuelles peuvent effectuer plusieurs accès mémoire en parallèle, mais elles ont un nombre limite d'accès mémoire simultannés. Il arrive qu'un ''shader'' dépasse ce nombre, mais cette situation est assez rare.