Technologie Pentium 4 : Questions & réponses
Tuan le 07 janvier 2002 (12 558 lectures)
Les unités de calcul ALU et FPU ainsi que les prédictions de branchement et le trace cache.
Que sont les ALU et les FPU ?
Ce sont des unités de calcul qui sont chargées respectivement de traiter les instructions générales et sur les entiers ainsi que sur les opérations à virgules flottantes.
Parles moi donc un peu plus de ces unités de traitement ?
Commençons par préciser que les temps d'exécution de ces deux unités ne sont pas tout à fait du même ordre. En effet pour l'ALU le temps est environ de 1 à 2 cycles alors que pour les opérations sur les "flottants" on peut raisonnablement l'estimer entre 3 et 7 cycles. Grâce au pipeline, précédemment déjà abordé, on peut estimer que les opérations d'addition (ALU) se font au rythme de 1 par cycle, tandis que les multiplications se font en plus de temps (sur les processeurs Intel P4 et PIII). Les opérations en virgule flottante double précision ne prennent, quant à elles, pas moins de 38 cycles pour une division sur le Pentium 4. Mais heureusement ce type d'opération ont tendance à ne pas être dépendantes d'autres résultats ce qui permet au processeur de faire autre chose en attendant le calcul. L'exécution "out of order" est aussi une aide précieuse dans ce cas. Mais là reviens toujours le problème de la prédiction.
Y a-t-il une interaction avec les mémoires cache dont on a parlé précédemment ?
Oui car le P4 et le PIII chargent les instructions en virgules flottantes depuis le cache L2. On se doute donc bien que les performances sont tributaires du débit et du temps d'accès au L2. On peut donc s'attendre à ce que les opérations en virgules flottantes soient plus sensibles au paramètre bande passante et accès mémoire que leurs comparses génériques…Mais comme je l'ai déjà dit tout cela dépend en partie (voire grandement) des performances du prédicateur de branchement. Un pipeline long ça se paye au prix fort… D'autant plus que le P4 ne fait que 3% de mieux que le P3 dans ce domaine ! C'est donc logiquement que les performances du P4 chutent vertigineusement quand les applications demandent des calculs avec beaucoup de prédictions. On voit là un des défauts du Pentium 4…Remarquons que des mauvaises langues prétendent que certaines étapes du pipeline ne sont là que pour "transférer" les données d'une partie vers l'autre du microprocesseur car le P4 est un "gros CPU", l'information a donc besoins de se propager.
Est-ce possible de mieux prédire les branchements ou alors Intel a atteint la limite ?
Oui c'est possible, Intel peut faire mieux car le K 6-2 de AMD faisait 95% de bonnes prédictions (contre 93% pour le P4 et 90 pour le PIII)
Est-ce que ce problème est dramatique pour le P4 ?
Oui si les choses restent en l'état. Mais Intel possède une arme pour remédier à ce problème. C'est le compilateur. Ils ont mis au point un compilateur qui utilise le principe du HWNT (Hint Weakly Not Taken). En gros cela permet de compiler le code et de lui donner une orientation plus sympathique pour que les prédictions du processeur ne soient pas trop erronées (trop souvent). Alors pourquoi les programmeurs n'utilisent pas ce compilateur ? Et bien je n'en sais rien. Mais si Intel et les développeurs ne l'utilisent pas c'est qu'il y a bien une bonne raison ! Certains disent que c'est parce que ce compilateur permet aussi une optimisation des processeurs concurrents, qui serait à peu près du même ordre et que cela ne change rien au fond. Intel n'y gagnerait pas. Imaginez : Intel permet enfin aux programmeurs d'optimiser pour le P, ce qui permet au processeur de délivrer toute sa puissance. Mais pour autant les processeurs concurrents n'en sont pas K.O. Mauvais pour l'image… Cependant cela prête évidemment à caution. Et tout est à prendre au conditionnel.
Mais, est-ce que les performances "étonnantes" du Pentium IV ne sont dues qu'à ce procédé et pas à un problème de structure interne indépendant des mémoires cache et des prédicateurs de branchement?
Problème de structure, non je ne dirais pas cela. Intel a fait certains choix technologiques, qui étaient semble t-il justifiés par l'orientation qu'ils avaient prévu que les choses prendraient. Quelles sont ces choix et en quoi influent ils sur le résultat qu'est le P4 ? C'est le choix (sur les unités de calcul en virgule flottante, domaine critique s'il en est de la guerre entre fondeur) de mettre une unité dédiée aux divisions sur les nombres à virgule et une autre pour les additions et les multiplications. Alors que le Tbird possède deux unités une pour les additions et soustractions et une pour les multiplications et divisions en virgules flottantes bien entendu.
En quoi cela privilégie le Tbird ?
Et bien cela ne le privilégie pas toujours, ça dépend de ce que demande le logiciel. Je m'explique :
Tout est plus ou moins basé sur le taux de divisions à faire. Le temps que met le P4 à faire une division est énorme (près de 38 cycles), pendant ce temps le processeur doit continuer son travail. Il fait donc des addition, des soustractions et des multiplications avec son autre unité en attendant que la division soit finie. Cela pénalise moyennement le Pentium IV car il doit alterner les multiplications et les additions avec sa seule unité disponible mais il peut faire les deux. Alors que le Tbird ne peut faire que des additions et soustractions si une division occupe la deuxième unité. Les multiplications sont "bloquées". Mais le temps demandé est plus court : 17 cycles environ. Quand il n'y a pas de division le Tbird peut donner en même temps une addition et une multiplication. Alors cela ne privilégie pas plus l'un que l'autre simplement la répartition du nombre relatif de divisions et multiplications joue sur les résultats. On constate que tout de même les divisions sont rares dans un software courant… En gros s'il y a trop de divisions le P4 se traîne. Et si la répartition tend vers 50% d'additions et 50% de multiplications le Tbird s'en sort haut la main. Pour le reste à vous de faire un petit effort d'abstraction.
Que sont les ALU et les FPU ?
Ce sont des unités de calcul qui sont chargées respectivement de traiter les instructions générales et sur les entiers ainsi que sur les opérations à virgules flottantes.
Parles moi donc un peu plus de ces unités de traitement ?
Commençons par préciser que les temps d'exécution de ces deux unités ne sont pas tout à fait du même ordre. En effet pour l'ALU le temps est environ de 1 à 2 cycles alors que pour les opérations sur les "flottants" on peut raisonnablement l'estimer entre 3 et 7 cycles. Grâce au pipeline, précédemment déjà abordé, on peut estimer que les opérations d'addition (ALU) se font au rythme de 1 par cycle, tandis que les multiplications se font en plus de temps (sur les processeurs Intel P4 et PIII). Les opérations en virgule flottante double précision ne prennent, quant à elles, pas moins de 38 cycles pour une division sur le Pentium 4. Mais heureusement ce type d'opération ont tendance à ne pas être dépendantes d'autres résultats ce qui permet au processeur de faire autre chose en attendant le calcul. L'exécution "out of order" est aussi une aide précieuse dans ce cas. Mais là reviens toujours le problème de la prédiction.
Y a-t-il une interaction avec les mémoires cache dont on a parlé précédemment ?
Oui car le P4 et le PIII chargent les instructions en virgules flottantes depuis le cache L2. On se doute donc bien que les performances sont tributaires du débit et du temps d'accès au L2. On peut donc s'attendre à ce que les opérations en virgules flottantes soient plus sensibles au paramètre bande passante et accès mémoire que leurs comparses génériques…Mais comme je l'ai déjà dit tout cela dépend en partie (voire grandement) des performances du prédicateur de branchement. Un pipeline long ça se paye au prix fort… D'autant plus que le P4 ne fait que 3% de mieux que le P3 dans ce domaine ! C'est donc logiquement que les performances du P4 chutent vertigineusement quand les applications demandent des calculs avec beaucoup de prédictions. On voit là un des défauts du Pentium 4…Remarquons que des mauvaises langues prétendent que certaines étapes du pipeline ne sont là que pour "transférer" les données d'une partie vers l'autre du microprocesseur car le P4 est un "gros CPU", l'information a donc besoins de se propager.
Est-ce possible de mieux prédire les branchements ou alors Intel a atteint la limite ?
Oui c'est possible, Intel peut faire mieux car le K 6-2 de AMD faisait 95% de bonnes prédictions (contre 93% pour le P4 et 90 pour le PIII)
Est-ce que ce problème est dramatique pour le P4 ?
Oui si les choses restent en l'état. Mais Intel possède une arme pour remédier à ce problème. C'est le compilateur. Ils ont mis au point un compilateur qui utilise le principe du HWNT (Hint Weakly Not Taken). En gros cela permet de compiler le code et de lui donner une orientation plus sympathique pour que les prédictions du processeur ne soient pas trop erronées (trop souvent). Alors pourquoi les programmeurs n'utilisent pas ce compilateur ? Et bien je n'en sais rien. Mais si Intel et les développeurs ne l'utilisent pas c'est qu'il y a bien une bonne raison ! Certains disent que c'est parce que ce compilateur permet aussi une optimisation des processeurs concurrents, qui serait à peu près du même ordre et que cela ne change rien au fond. Intel n'y gagnerait pas. Imaginez : Intel permet enfin aux programmeurs d'optimiser pour le P, ce qui permet au processeur de délivrer toute sa puissance. Mais pour autant les processeurs concurrents n'en sont pas K.O. Mauvais pour l'image… Cependant cela prête évidemment à caution. Et tout est à prendre au conditionnel.
Mais, est-ce que les performances "étonnantes" du Pentium IV ne sont dues qu'à ce procédé et pas à un problème de structure interne indépendant des mémoires cache et des prédicateurs de branchement?
Problème de structure, non je ne dirais pas cela. Intel a fait certains choix technologiques, qui étaient semble t-il justifiés par l'orientation qu'ils avaient prévu que les choses prendraient. Quelles sont ces choix et en quoi influent ils sur le résultat qu'est le P4 ? C'est le choix (sur les unités de calcul en virgule flottante, domaine critique s'il en est de la guerre entre fondeur) de mettre une unité dédiée aux divisions sur les nombres à virgule et une autre pour les additions et les multiplications. Alors que le Tbird possède deux unités une pour les additions et soustractions et une pour les multiplications et divisions en virgules flottantes bien entendu.
En quoi cela privilégie le Tbird ?
Et bien cela ne le privilégie pas toujours, ça dépend de ce que demande le logiciel. Je m'explique :
Tout est plus ou moins basé sur le taux de divisions à faire. Le temps que met le P4 à faire une division est énorme (près de 38 cycles), pendant ce temps le processeur doit continuer son travail. Il fait donc des addition, des soustractions et des multiplications avec son autre unité en attendant que la division soit finie. Cela pénalise moyennement le Pentium IV car il doit alterner les multiplications et les additions avec sa seule unité disponible mais il peut faire les deux. Alors que le Tbird ne peut faire que des additions et soustractions si une division occupe la deuxième unité. Les multiplications sont "bloquées". Mais le temps demandé est plus court : 17 cycles environ. Quand il n'y a pas de division le Tbird peut donner en même temps une addition et une multiplication. Alors cela ne privilégie pas plus l'un que l'autre simplement la répartition du nombre relatif de divisions et multiplications joue sur les résultats. On constate que tout de même les divisions sont rares dans un software courant… En gros s'il y a trop de divisions le P4 se traîne. Et si la répartition tend vers 50% d'additions et 50% de multiplications le Tbird s'en sort haut la main. Pour le reste à vous de faire un petit effort d'abstraction.





