• [^] # Re: cohérence de cache

    Posté par . En réponse à la dépêche Intel présente un prototype de processeur x86 octatétracontacœur. Évalué à 6.

    Dans une architecture multicœur traditionnelle, il y a un gros cache, avec une hiérarchie de niveaux. Plus c'est bas, plus c'est petit, rapide et privé (le L1 est pour un seul cœur, le L2 est généralement partagé entre deux cœurs, etc). Le processeur, globalement, a la charge de maintenir une cohérence globale dans tout ça. Ainsi, si un cœur A lit un mot de la mémoire vive qu'un autre cœur B vient d'écrire, il obtient bien la donnée que B a écrite, même si cette donnée est encore dans le cache et n'a pas été envoyée au contrôleur de RAM. Le maintien de la cohérence est très coûteux et ne passe pas bien à l'échelle : ça marche pour quatre cœurs (et aussi pour un peu plus que ça quand même), mais difficilement pour 48.

    Le principe, ici, est donc de laisser tomber la cohérence de cache. Chaque cœur a son propre cache et s'occupe lui-même de communiquer avec les autres cœurs et avec la mémoire. L'avantage est de se débarrasser d'un système qui coûtait cher, l'inconvénient est... l'absence de cohérence. Une telle puce n'est pas faite pour être programmée de façon parallèle (tout le monde tape en même temps dans la même mémoire partagée), mais plutôt de façon répartie : chacun est dans son petit espace, et quand on veut communiquer, on s'envoie des messages. Alors oui, bien évidemment, si on veut faire de la programmation parallèle avec, il y a un surcoût important. Ce n'est pas étonnant, parce que l'architecture n'est pas faite pour ça.