Test • Intel Core i9-12900K/12900F / i7-12700K / i5-12600K/12600/12400F & Z690/B660 |
————— 04 Novembre 2021
Test • Intel Core i9-12900K/12900F / i7-12700K / i5-12600K/12600/12400F & Z690/B660 |
————— 04 Novembre 2021
Les Bleus nous avaient déjà fait le coup pour le précédent Ice Lake (ou plutôt Rocket Lake, son rétroportage en 14 nm pour PC de bureau) : sur ce qui est de la structure interne d’Alder Lake, tout ou presque était déjà connu, car dévoilé lors de l’Architecture Day. Un moyen comme un autre de combler le vide laissé par la pénurie, mais qui ne manque pas de gâcher la surprise des nouveautés architecturales puisque, depuis la fin août, les informations concernant cette douzième génération de processeurs ont eu le temps d’être digérées.
Pour la première fois sur le segment grand public x86, Intel se lance dans une architecture hétérogène : deux types de cœurs différents sont intégrés sur le die, nommés P-Core et E-Core, pour Performance et Efficiency (Efficacité). Bien connu sur les SoC de téléphone portable et de tablettes, ce type de design permet une meilleure utilisation de l’enveloppe énergétique allouée au processeur en séparant d’un côté les cœurs les plus gourmands, réservés aux tâches critiques et, de l’autre, les cœurs moins véloces. Ces derniers permettent d’éviter aux premiers cités de devoir basculer sur des tâches auxiliaires, typiquement des programmes en arrière-plan ou d’encodage vidéo pour les amateurs de diffusion en direct sur Twitch. Enfin, notez que ce beau monde supportera la « nouvelle » extension Intel CET, améliorant la protection de certains programmes ; mais les extensions vectorielles sont, elles, bridées à l’AVX2 faute de compatibilité AVX-512 des E-Cores.
Pour briller dans les benchmarks, Intel n’a guère le choix : reprendre le précédent design et aller augmenter par-ci par-là les ressources qui se retrouvaient limitantes. C’est bien ce qu’annonce la firme, avec des gains moyens mesurés en interne de 19 %, soit le même écart qu’entre Skylake et Ice Lake (ou Rocket Lake en ce qui nous concerne)... Sauf que cette fois-ci, la gravure employée est le Intel 7 — anciennement 10 nm++ ou Enhanced SuperFin — qui monte bien mieux en fréquence, (spoiler) notre exemplaire dépassant vaillamment la barre des 5 GHz. De quoi augurer des performances de premier rang... pour un dégagement thermique tout aussi conséquent : quelle que soit la finesse de gravure, les maigres gains en fréquences se payent rubis sur l’ongle en matière de dégagement thermique.
Longtemps un goulot d’étranglement majeur des architectures bleues, le décodeur évolue enfin avec Alder Lake : d’une fourchette de 4 à 6 micro-opérations par cycle, le nouveau venu passe à entre 6 et 8 micro-opérations (ou µOPs) maximum en fonctionnant par tranche de 32 octets : de quoi goinfrer bien davantage le back-end ! Cependant, le code en entrée ne se limite pas qu’à celui transcrit : pour des tâches répétitives comme des corps de boucle, le CPU est muni d’un µop Cache, dont la taille passe de 2,25 kilo-entrées à 4 kilo-entrées. La µops queue n’est pas en reste avec un passage à 72 entrées, combinables en 144 si l’Hyper-Threading est désactivé. Coté prédiction de branchement, c’est également la fête avec des augmentations dans tous les sens : l’algorithme est soi-disant plus intelligent, le nombre de cibles de branchement traquées passe de 5 kilo-entrées à 12 kilo-entrées, et l’I-TBL (buffer de conversion des adresses virtuelles aux adresses physiques pour les instructions) double de taille pour atteindre 256 entrées pour des pages de 4 kio, et 32 pour les hugepages de 2 ou 4 Mio.
« Sans maîtrise, la puissance n’est rien » dit l’adage, c’est d’autant plus vrai sur un CPU : rien ne sert d’avoir un front-end large, si le back-end ne suit pas. Chez Alder Lake, l’augmentation de 50 % des décodeurs est donc logiquement suivie d’un élargissement du pipeline, c’est-à-dire de la capacité du processeur à exécuter en parallèle les instructions qui le peuvent — en single-thread ou entre hyperthreads seulement. Cela est obtenu en augmentant drastiquement le nombre de ports (les composants contrôlant ces unités de calcul), qui passent de 10 à 12. La performance vectorielle n’étant pas vraiment une priorité sur le segment grand public (et surtout, son amélioration s’effectue davantage par une augmentation de la taille des vecteurs avec l’AVX-512 qu’avec une amélioration de l’ILP), ces deux ports concernent des opérations utilisées dans tous les programmes : le premier traitera du calcul logique entier généraliste, portant à 5 le nombre de ports dotés de cette fonctionnalité, et le second se place côté chargement mémoire. Ainsi, les 3 ports de chargement supporteront au choix soit 3 vecteurs de 256 bits ou 2 de 512 bits par cycle. Les deux ports de rangement mémoire sont toujours là, et 2 ports sont chargés de générer les requêtes d’accès à la mémoire. Notez que la partie vectorielle abandonne l’AVX-512 sur le segment grand public, mais bénéficie tout de même d’un enrichissement sauce « addition rapide » permettant de réaliser des additions en un cycle de latence seulement.
Entre le front et le back se situe une mémoire tampon, le ReOrder Buffer, ou ROB. Lui aussi suit un régime Mc Do' et prend un embonpoint certain en passant à 512 µOPs (contre 352 sur Cypress Cove). Au maximum, 6 de ces µOPs peuvent être envoyées à des ports par cycle : de quoi être en phase avec les 6 décodeurs de l’étage du dessus.
Pour la partie mémoire, rebelote : le D-TLB, analogue de l’I-TLB pour les données, passe à 96 entrées, une bonne raison de majorer de 2 les page walkers pour atteindre la quantité respectable de 4. Le L1 ne change pas de quantité, mais son unité de prefetch est améliorée, sans plus de détail. Au passage, le nombre de buffers de remplissage du L1, dont la fonction est de garder la trace des requêtes lui chargeant des données, passe de 12 à 16 (logique, une ligne de cache faisant 64 octets, et la quantité maximale de requêtes étant de 1024 octets — 2 x 512 — soit... 16 lignes).
Le L2 explose également : 1,25 Mio privé par P-Core, contre 512 Kio auparavant. De la même manière que le L1, le nombre maximal de demandes en cours possible suit la même tendance et passe de 32 à 48. Encore une fois, le prefetcher est amélioré pour tirer parti de ses erreurs et écrire en mémoire de manière plus efficace. À voir ce qu’il en est en pratique.
Avec de tels P-Cores, les Bleus ne pouvaient pas raisonnablement concurrencer AMD sur le terrain du multicœur tout en conservant à la fois des performances monothread élevées et un TDP raisonnable. La solution a été toute trouvée : rajouter des cœurs moins performants mais assez puissants pour s’occuper de tâches tel l’encodage vidéo en arrière-plan, et seconder vaillamment le gros cluster dans les charges de travail correctement multithreadées. Partant de ce constat, deux choix étaient possibles : soit reprendre un design antérieur et travailler sur sa consommation, ou repartir sur les bases Atom avec Tremont, ce qui impliquait « simplement » d’améliorer ses performances tout en restant sous un budget de watts raisonnable.
Si vous ne l’avez pas deviné à la lecture de nos titres, la seconde option a été retenue. Partant ainsi d’un design basse consommation, mais déjà implémenté sur du 10 nm, les architectes ont dû intégrer les extensions vectorielles AVX2 et grossir assez largement le pipeline d’exécution afin de parvenir à un résultat égalant — officiellement — Skylake en matière de performances.
Sur le front-end, les changements sont légers : si le L1-I passe à 64 Kio et le prédicteur de branchement est désormais « profond » sans plus de précisions que l’utilisation de « larges structures de données », en revanche le décodage ne change pas significativement. Ainsi, le double décodeur est toujours de la partie pour un maximum de 6 µOPs par cycle — voilà qui n’est pas sans rappeler son confrère !
Vous pensiez que les 12 ports des P-Cores étaient suffisants ? Erreur ! Les E-Cores en intègrent la bagatelle de 17 ! En effet, pour économiser de l’énergie, mieux vaut multiplier ces interfaces, peu coûteuses en silicium, afin de limiter la consommation en jus d’électrons des unités logiques situées en aval lorsque ces dernières ne sont pas utilisées. Nous retrouvons ainsi 2 ports de branchement, 4 ports de calcul arithmétique et logique simple, 3 ports pour les opérations concernant des nombres flottants et des vecteurs, 2+2 ports de stockage (entiers + flottants/vecteur séparés), et enfin, 2+2 ports de calcul d’adresses (chargement + rangement). Au niveau de l’accès L1, tous les ports concernés peuvent fonctionner en même temps, offrant ainsi 2 loads et 2 stores par cycle. Puisque le nombre de ports grimpe en flèche, le nombre d’instructions traitables en parallèle augmente également avec la capacité d’assigner 5 µOPs par cycle et terminer le traitement de 8, toujours en un cycle (la non-égalité s’expliquant par les latences hétérogènes des µOPs). Quant au ROB, ce dernier passe à 256 entrées histoire d’extirper suffisamment de parallélismes des instructions de deux hyperthreads pour goinfrer le pipeline.
Notez que ces E-Cores sont intégrés par cluster de 4 cœurs dont les interfaces de gestion de fréquence sont communes ; il faut dire que le L2 de 4 Mio maximum est partagé par cluster (supportant 64 requêtes en parallèle, un débit de 64 octets par cycle et une latence de 17 cycles, ainsi qu’un prefetcher toujours plus puissant, vous connaissez la chanson). Avis aux overclockeurs : mieux vaudra viser les P-Cores pour aller battre des records de surcadençage d’horloge !
|