Je soupçonne que les informations sur la Xbox 360 et la PS3 en particulier seront cachées derrière des murs réservés aux développeurs licenciés, comme la plupart des détails de bas niveau. Cependant, nous pouvons construire un programme x86 équivalent et le désassembler pour avoir une idée générale.
Voyons d’abord ce que l’élargissement des coûts non signés entraîne:
unsigned char x = 1;
unsigned int y = 1;
unsigned int z;
z = x;
z = y;
La partie pertinente se désassemble en (utilisant GCC 4.4.5):
z = x;
27: 0f b6 45 ff movzbl -0x1(%ebp),%eax
2b: 89 45 f4 mov %eax,-0xc(%ebp)
z = y;
2e: 8b 45 f8 mov -0x8(%ebp),%eax
31: 89 45 f4 mov %eax,-0xc(%ebp)
Donc, fondamentalement, la même chose - dans un cas, nous déplaçons un octet, dans l'autre, nous déplaçons un mot. Prochain:
signed char x = 1;
signed int y = 1;
signed int z;
z = x;
z = y;
Se transforme en:
z = x;
11: 0f be 45 ff movsbl -0x1(%ebp),%eax
15: 89 45 f4 mov %eax,-0xc(%ebp)
z = y;
18: 8b 45 f8 mov -0x8(%ebp),%eax
1b: 89 45 f4 mov %eax,-0xc(%ebp)
Ainsi, le coût de l’extension du panneau de signalisation est ce qu’il en coûte movsbl
plutôt que de le faire movzbl
- niveau de sous-instruction. C'est fondamentalement impossible à quantifier sur les processeurs modernes en raison de la façon dont les processeurs modernes fonctionnent. Tout le reste, qu'il s'agisse de la vitesse de la mémoire, de la mise en cache ou de ce qui était prévu dans le pipeline, va dominer l'exécution.
Après environ 10 minutes d'écriture de ces tests, j'aurais facilement pu trouver un véritable problème de performances. Dès que j'active l'optimisation du compilateur, le code devient méconnaissable pour des tâches aussi simples.
Ce n'est pas un débordement de pile, j'espère donc que personne ici ne dira que la microoptimisation n'a pas d'importance. Les jeux fonctionnent souvent avec des données très volumineuses et très numériques. Par conséquent, une attention particulière aux branches, aux diffusions, à la planification, à l'alignement de la structure, etc. peut donner lieu à des améliorations très critiques. Quiconque a passé beaucoup de temps à optimiser le code PPC a probablement au moins une histoire d'horreur à propos de load-hit-store. Mais dans ce cas, ce n'est pas grave. La taille de stockage de votre type entier n'affecte pas les performances, tant qu'elle est alignée et s'inscrit dans un registre.