Le cas de la mémoire cache des Mac Pro : Apple n’utilise pas des CPU custom

Vu que j’ai eu la discussion avec quelques personnes qui pensaient, en ayant vu cette page chez Apple, que le Mac Pro possédait des processeurs un peu particuliers avec plus de mémoire cache. Ce n’est pas le cas, Apple a juste une façon particulière (et pas nécessairement fausse) de compter la mémoire en question.

Un peu d’explications, je vais essayer d’être clair. Dans un processeur, vous avez différents niveaux de mémoire cache, le niveau 1 (L1), le niveau 2 (L2) et le niveau 3 (L3). Ces trois mémoires se placent entre le processeur et la mémoire vive, pour accélérer les transferts. Si on peut considérer la mémoire vive (RAM) comme rapide face à un disque dur ou un SSD, elle est lente par rapport au processeur. La mémoire cache est rapide, mais sa capacité assez limitée. J’omets volontairement ici le cache µOP (une sorte de L0) et la mémoire eDRAM de certaines puces qui fait office de cache L4.

Dans les architectures Intel classiques (on va prendre comme exemple un Core Skylake comme celui d’un MacBook Pro), l’architecture est la suivante. D’abord, deux L1 de 32 ko (un pour les données, un pour les instructions) par coeur. Ensuite, 256 ko de L2 par coeur. Enfin, jusqu’à 2 Mo de L3 par coeur. La gestion des niveau 2 et 3 est inclusive : le contenu du L2 est automatiquement présent dans le L3. De plus, le cache de niveau 3 est partagé entre les différents coeurs, donc sa capacité totale varie en fonction des puces. La valeur de 2 Mo par coeur est un maximum : Intel réduit parfois ce nombre pour segmenter sa gamme. Par exemple mon MacBook Pro 2017 dispose d’un processeur avec 4 coeur, mais seulement 6 Mo de cache, il faut passer sur un modèle plus rapide (et plus cher) pour disposer de 8 Mo.

N3 partagé

On résume : 2×32 ko par coeur, 256 ko par coeur, un L3 partagé qui contient automatiquement le L2 de chaque coeur. La valeur pratique, celle qu’Apple indique dans la page des MacBook Pro, va être celle du cache de niveau 3.

Le cas Mac Pro

Le Mac Pro 2019 utilise des puces Cascade Lake, avec des Xeon W. Techniquement, ce sont des Skylake X avec quelques corrections de bugs et quelques lignes PCI-Express de plus. Le point intéressant, qui a fait douter pas mal de gens, c’est qu’Apple indique une grosse quantité de mémoire cache sur la page du Mac Pro. Jusqu’à 66,5 Mo de mémoire cache sur le modèle vingt-huit coeurs, alors qu’Intel annonce seulement 38,5 Mo de cache de niveau 3. Une erreur ? Un processeur avec plus de mémoire cache pour Apple ? Non. Une autre façon de compter. Par ailleurs, Apple indique bien « Mémoire cache » et pas « Mémoire cache de niveau 3 ».

Les valeurs Apple

L’architecture expliquée juste avant n’est pas la seule possible. AMD utilise une autre façon de faire, et Intel – avec les Skylake X – utilise la même. Dans un Xeon W de Mac Pro, donc, on retrouve deux caches de niveau 1 de 32 ko (données et instructions) et 1 Mo de cache de niveau 2 par coeur (une valeur nettement plus élevée qu’auparavant). Les deux premiers niveaux sont inclusifs (le contenu du L1 est dans le L2). Ensuite, et contrairement aux autres puces Intel, le cache de niveau 3 est exclusif. Sa capacité est de 1,375 Mo par coeur. Vu la taille du L2, c’est assez logique, d’ailleurs. En clair, le contenu du L2 et du L3 n’est pas le même. Sur une puce avec vingt-huit coeurs, on a donc 38,5 Mo de L3 (28*1,375) et 28 Mo de L2 (28*1)… soit les 66,5 Mo d’Apple. Ce n’est pas très orthodoxe comme façon de compter, mais c’est techniquement valable : il y a 66,5 Mo de cache accessibles.

Pourquoi 24,5 ?

Maintenant, vous allez peut-être demander pourquoi le processeur avec huit coeurs dispose de 24,5 Mo de cache, ce qui ne colle pas avec le calcul (8*1 + 8*1,375, ça fait 19 Mo). En fait, Intel intègre bien 1,375 Mo par coeur, mais les processeurs n’ont pas nécessairement tous les coeurs actifs. Je ne connais pas la raison exacte, mais Intel utilise des CPU avec une partie des coeurs désactivés, en fonction des références. Les versions quatre et six coeurs (qu’Apple n’utilise pas) ont 8,25 Mo de L3 (la valeur des six coeurs). Les huit coeurs ont 16,5 Mo de L3 (la valeur de douze coeurs). Les dix, douze et quatorze coeurs ont 19,25 Mo (la valeur des quatorze coeurs). Les seize, dix-huit, vingt-quatre et vingt-huit coeurs ont la valeur attendue. A priori ça vient du type de die utilisé, en fonction des contrôleurs mémoire, de la gestion de la liaison entre les coeurs, etc. En clair, la valeur théorique est 1,375 Mo par coeur, mais ça peut varier selon l’architecture interne.

On résume : 2×32 ko par coeur, 1024 ko par coeur, un L3 partagé (1,375 Mo par coeur) qui ne contient pas le L2. La valeur pratique, celle qu’Apple indique dans la page du Mac Pro, va donc être l’addition du L3 et des différents L2.

Mais donc Apple ne ment pas. Apple compte d’une façon avantageuse pour sa communication, mais avec une base technique valable, qui a l’avantage (pour eux) d’empêcher la comparaison directe et peut induire en erreur.

Les vrais CPU custom

Au passage, pour revenir à cette légende : Intel propose rarement des CPU custom, même pour un gros client comme Apple (qui ne l’est pas tant que ça, d’ailleurs). On peut considérer les modèles avec un gros IGP (et de la mémoire eDRAM) comme des commandes pour Apple, et la marque à la  a parfois reçu des modèles avec des fréquences spécifiques, mais les vrais custom restent assez rares. Un des premiers exemples reste le Core 2 Duo des MacBook Air (2008), qui utilisait un package plus compact, et les CPU des Mac Pro 2009 (4,1) qui n’avaient pas d’IHS. Enfin, des rumeurs indiquent que le CPU Kaby Lake G (une puce Intel qui intègre un GPU AMD) a été pensée pour Apple… mais Apple ne l’a jamais intégré. Reste que dans l’absolu, c’est donc plutôt rare qu’Intel propose des puces spécifiquement pour Apple, et il s’agit généralement d’arrangements physiques plus que des changements profonds.