Les processeurs modernes sont très rapides par rapport à tout ce qui est externe, y compris la mémoire (RAM).
Cela est compréhensible, car la fréquence d'horloge de la CPU a atteint un point où il faut plusieurs ticks d'horloge pour qu'un signal électrique puisse simplement circuler de la CPU à l'arrière du bus en passant par le bus.
Cela complique également la vie à plusieurs niveaux: les hiérarchies de cache multiniveaux sont conçues pour fournir des données plus proches du processeur, ce qui nécessite une logique de synchronisation complexe dans la puce. Les programmes doivent être écrits en respectant le cache pour éviter les cycles d'attente pendant l'extraction des données.
Un grand nombre de ces problèmes pourraient être évités si une quantité importante de RAM était située directement sur la puce du processeur. Cela ne nécessite pas un arrangement exclusif: mettez peut-être 1 à 4 Go sur la puce, en fonction de sa classe, et autorisez de la mémoire supplémentaire installée séparément.
Je suis sûr qu'il y a de bonnes raisons pour lesquelles Intel, AMD, etc., ne le font pas. Quelles sont ces raisons? Est-ce qu'il n'y a pas de place libre sur la puce?
Réponses:
Haswell d'Intel (ou au moins les produits intégrant le processeur graphique Iris Pro 5200) et les POWER7 et POWER8 d'IBM incluent tous des DRAM intégrés, "eDRAM".
Un problème important qui empêchait eDRAM de devenir monnaie courante jusqu’à récemment est que le processus de fabrication de DRAM n’est pas intrinsèquement compatible avec les processus logiques, de sorte que des étapes supplémentaires doivent être incluses (ce qui augmente le coût et diminue le rendement) lorsque eDRAM est souhaité. Il doit donc y avoir une raison impérieuse de vouloir l’intégrer pour compenser ce désavantage économique. La mémoire DRAM peut également être placée sur une puce distincte fabriquée indépendamment de la CPU, mais intégrée dans celle-ci, dans le même boîtier. Ceci fournit la plupart des avantages de la localité sans les difficultés de fabrication des deux de manière vraiment intégrée.
Un autre problème est que la mémoire DRAM n’est pas semblable à la mémoire SRAM en ce sens qu’elle ne stocke pas son contenu indéfiniment tant que le système est sous tension, et sa lecture détruit également les données stockées, qui doivent ensuite être réécrites. Par conséquent, il doit être actualisé périodiquement et après chaque lecture. Et, comme une cellule DRAM est basée sur un condensateur, chargez ou déchargez-la suffisamment pour que les fuites ne corrompent pas sa valeur avant que le prochain rafraîchissement ne prenne un temps fini. Ce temps de charge n’est pas nécessaire avec la mémoire SRAM, qui n’est qu’un verrou; par conséquent, elle peut être cadencée au même rythme que le processeur, alors que la mémoire DRAM est limitée à environ 1 GHz tout en maintenant une consommation électrique raisonnable. Cela donne à la mémoire DRAM une latence inhérente supérieure à celle de la mémoire SRAM, ce qui rend inutile son utilisation pour tous les caches, sauf les plus grands, pour lesquels le taux de perte réduit sera rentable.
En outre, en ce qui concerne la latence, une grande partie de la difficulté réside dans la distance physique que les signaux doivent parcourir. La lumière ne peut voyager que 10 cm dans la période d'horloge d'un processeur de 3 GHz. Bien entendu, les signaux ne traversent pas la matrice en ligne droite et ne se propagent pas à une vitesse proche de la vitesse de la lumière en raison de la nécessité de la mise en tampon et du déploiement, ce qui entraîne des délais de propagation. Ainsi, la distance maximale qu'une mémoire peut être éloignée d'une unité centrale afin de maintenir un cycle d'horloge de latence est de quelques centimètres au maximum, ce qui limite la quantité de mémoire pouvant être hébergée dans la zone disponible. Le processeur Nehalem d’Intel a en fait réduit la capacité du cache L2 par rapport à Penryn, en partie pour améliorer sa latence, ce qui a permis d'améliorer les performances.
Il convient également de noter que le taux d'accès au cache est très élevé pour la plupart des charges de travail: bien supérieur à 90% dans presque tous les cas pratiques et assez rarement même au-dessus de 99%. Ainsi, l’avantage d’inclure des mémoires plus volumineuses à la mémoire est intrinsèquement limité à la réduction de l’impact de ces quelques pour cent de ratés. Les processeurs destinés au marché des serveurs d'entreprise (tels que POWER) disposent généralement d'énormes caches et peuvent inclure rentablement l'eDRAM car il est utile de prendre en charge les grands ensembles de travail de nombreuses charges de travail d'entreprise. Haswell a prévu de prendre en charge le GPU, car les textures sont volumineuses et ne peuvent pas être hébergées en cache. Ce sont les cas d'utilisation de l'eDRAM aujourd'hui, pas les charges de travail de bureau ou HPC classiques, qui sont très bien servies par les hiérarchies de cache typiques.
Pour résoudre certains problèmes soulevés dans les commentaires:
Ces caches eDRAM ne peuvent pas être utilisés à la place de la mémoire principale car ils sont conçus comme caches de victime L4. Cela signifie qu'elles sont volatiles et que leur contenu est adressable de manière à ce que les données qui y sont stockées ne soient pas traitées comme résidant dans un emplacement spécifique et puissent être supprimées à tout moment. Il est difficile de concilier ces propriétés avec l’obligation pour la RAM d’être directement mappée et persistante, mais leur modification rendrait les caches inutiles pour l’objectif recherché. Il est bien sûr possible d’incorporer des mémoires de conception plus conventionnelle, comme dans les microcontrôleurs, mais cela n’est pas justifiable pour les systèmes à mémoire importante, car une faible latence n’est pas aussi bénéfique dans la mémoire principale que dans une mémoire cache. ou ajouter un cache est une proposition plus intéressante.
En ce qui concerne la possibilité de caches très volumineux avec une capacité de l'ordre de gigaoctets, un cache doit uniquement être au plus de la taille de l'ensemble de travail de l'application. Les applications HPC peuvent traiter des jeux de données en téraoctets, mais ils ont une bonne localisation temporelle et spatiale et leurs jeux de travail ne sont généralement pas très grands. Les applications avec de grands ensembles de travail sont, par exemple, des bases de données et des logiciels ERP, mais le marché des processeurs optimisés pour ce type de charge de travail est limité. À moins que le logiciel n'en ait vraiment besoin, l'ajout de plus de cache permet d'obtenir des rendements en diminution très rapide. Récemment, nous avons vu des processeurs obtenir des instructions de prélecture, de sorte que les caches peuvent être utilisés plus efficacement: vous pouvez utiliser ces instructions pour éviter les erreurs causées par l'imprévisibilité des modèles d'accès en mémoire, plutôt que par la taille absolue de l'ensemble de travail,
* L'amélioration de la latence n'était pas uniquement due à la taille physique réduite du cache, mais également à la réduction de l'associativité. Des changements importants ont été apportés à l’ensemble de la hiérarchie du cache dans Nehalem pour plusieurs raisons différentes, qui ne sont pas toutes axées sur l’amélioration des performances. Donc, si cela suffit à titre d'exemple, ce n'est pas un compte rendu complet.
la source
La principale raison pour laquelle une mémoire plus importante (Go de mémoire DRAM) n'est pas incluse dans la puce du processeur lui-même est principalement liée au coût. L'espace mémoire des processeurs est nettement plus coûteux en raison du processus de fabrication nécessaire pour rendre les fonctionnalités très petites. Il n’est peut-être pas possible non plus de fabriquer les deux sur la même matrice, bien que je n’en connaisse pas suffisamment les détails pour donner une réponse définitive ici.
Évaluons la faisabilité de placer une grande quantité de DRAM directement sur la puce du processeur.
Cependant, l'idée de coller la mémoire plus près du processeur n'est pas une cause complètement perdue. C'est probablement là que la mémoire se déplacera dans le futur car le fait est que la vitesse de la lumière est finie et qu'il est seulement possible de communiquer si vite sur une certaine distance.
Techniques réalistes pour rapprocher la mémoire de la CPU (notez que celles-ci ont aussi des compromis avec les techniques traditionnelles):
Empilez-les sur le processeur lui-même. Cela est déjà fait sur le Raspberry Pi et fait partie de la norme de mémoire Wide I / O. La mémoire est toujours un dé séparé fabriqué sur un processus séparé. Cependant, le problème est que toute chaleur dissipée dans la CPU doit traverser la mémoire avant d’atteindre un dissipateur thermique. Cela signifie que cela ne fonctionnera pas pour les processeurs haute puissance, et explique pourquoi les applications principales de cette technologie sont les processeurs mobiles / autres applications intégrées dans lesquelles votre processeur ne consomme pas plusieurs dizaines ou centaines de watts.
Collez-les très proches sur un substrat moins coûteux. C’est ainsi que HBM est conçu pour fonctionner, avec un très grand bus fabriqué sur une puce "interposeur" à moindre coût, et la direction que prend la mémoire du processeur graphique haut de gamme car la bande passante est considérablement plus élevée. Les puces de mémoire et l'interposeur sont tous encore fabriqués sur des matrices différentes du processeur réel.
la source
Il y a plusieurs raisons pour lesquelles l'ajout de grandes quantités de DRAM à un processeur peut être irréalisable.
Le processus et la fabrication ne peuvent pas être configurés pour la DRAM. La DRAM nécessite des éléments de circuit spéciaux nécessitant des étapes de fabrication supplémentaires. Cela augmente le coût de fabrication.
Toute cette mémoire doit être testée. Les tests de mémoire augmentent votre temps de test. C'est une autre augmentation de coût.
L'agrandissement de la matrice est en soi une augmentation de coût, car cela signifie moins de matrice par tranche. Cela affecte également le rendement - un défaut supprime une plus grande fraction de votre wafer. Pour un exemple extrême, examinez le coût des capteurs d'image plein cadre (35 mm) dans les appareils photo.
Le développement d'un processus capable de gérer des types de mémoire particuliers prend plus de temps, d'argent et de travail, et présente un risque d'échec plus élevé. Tout problème avec la DRAM retarderait la publication de la CPU. Les processeurs de bureau étant à la pointe de la fabrication de semi-conducteurs, un retard peut être un désavantage concurrentiel considérable. (Voir: AMD vs Intel ces dernières années.)
La DRAM nécessite une détection analogique pour les lectures, ainsi qu'un rafraîchissement périodique. Je ne suis pas un expert en DRAM, mais je doute qu'il soit un jour aussi rapide qu'un processeur haut de gamme, qu'il s'agisse d'un processeur externe ou d'un processeur intégré. Vous serez donc probablement toujours bloqué par la mise en cache SRAM.
Même si vous pouvez surmonter les problèmes ci-dessus et accumuler quelques gigaoctets de DRAM sur une puce de processeur, cela ne suffira pas pour faire fonctionner un ordinateur de bureau, un ordinateur portable ou un serveur, vous aurez donc toujours besoin d'une mémoire hors puce. .
la source
En plus des autres réponses, on peut en dire plus sur un tel système. Déplacer la mémoire vers la matrice principale inclurait une foule d'autres problèmes d'ingénierie. Il vous faudrait rediriger les bus, créer un contrôleur DMA dans le processeur principal, restructurer le bus IRQ et déterminer comment éliminer toute la chaleur supplémentaire générée dans une zone concentrée. Cela signifie que le fabricant de la carte mère devrait également être impliqué pour supporter un changement aussi important. Alors que les systèmes bas de gamme bénéficieraient probablement d'un tel changement, les systèmes haut de gamme nécessiteraient probablement un refroidissement substantiel. Je doute qu'un ordinateur portable moyen puisse gérer une telle puce, par exemple.
Une telle puce serait beaucoup plus chère, même si le prix de la carte mère principale baisserait (bien que probablement pas sensiblement). Si vous avez vu les packages d'un contrôleur DMA, ainsi que les packages de RAM, vous auriez bien du mal à croire que toute cette logique puisse être comprimée dans une seule matrice qui ne serait pas considérablement plus grande. Rappelez-vous également que les processeurs sont découpés dans de grandes plaquettes d'une taille donnée. Cela signifie que le fabricant aurait également beaucoup moins de processeurs par tranche, ce qui augmenterait également le coût global.
Gardez à l’esprit que nous ne parlons pas d’utilisation de puissance en watts sur l’ensemble du système, ce qui diminuerait, mais plutôt qu’il y aurait encore plus de concentration de puissance en watts (et donc de chaleur) dans une seule zone, ce qui augmenterait probablement la probabilité de échec.
Enfin, il existe un autre inconvénient, à savoir la possibilité de fournir des systèmes personnalisés. À l'heure actuelle, les fabricants peuvent choisir de mettre en place des systèmes avec des processeurs identiques mais des quantités de mémoire différentes, ou des processeurs différents, mais la même quantité de mémoire, en fonction des préférences du client. Pour offrir la multitude de configurations différentes, ils devraient créer différentes matrices, chacune sur une chaîne de montage différente.
AMD utilise activement une technologie qui fonctionne réellement de la sorte: chaque partie du processeur est une unité logique discrète qui peut être remplacée par différentes configurations. À l'avenir, si une telle conception est viable, nous pourrions très bien voir les processeurs qui offrent de la mémoire intégrée à la puce comme une mise à niveau de module coûteuse, échangeant peut-être une partie de la puissance de traitement ou d'autres ajustements. Par exemple, un jour, nous aurons peut-être le choix entre 256 cœurs sans mémoire intégrée ou 128 cœurs avec mémoire intégrée, voire d'autres configurations telles qu'une partie GPU, une partie processeur, une partie RAM.
la source
Presque tout ce qui précède + un autre problème supplémentaire: la chaleur.
Les cellules DRAM sont essentiellement des condensateurs qui fuient. Et le diélectrique ici est la couche de SiO2 elle-même. À mesure que la température augmente, les courants de fuite augmentent proportionnellement. Celles-ci déchargent les cellules DRAM beaucoup plus rapidement, ce qui nécessiterait des vitesses de rafraîchissement beaucoup plus rapides, ce qui augmenterait la complexité, le courant requis et, bien sûr, ajouterait un peu plus de chaleur.
la source
Outre les réponses déjà données, il existe un aspect supplémentaire: les déchets dus à des défauts de production:
Supposons que 1/100 de tous les processeurs d'un certain modèle produit soient défectueux (en réalité, il est moins, bien sûr; 1/100 est plus facile à calculer) et 1/100 de toutes les mémoires RAM produites sont défectueux.
Si les deux composants sont combinés sur une seule puce, 1/100 de toutes les puces auront un processeur défectueux et 1/100 de toutes les puces auront une RAM défectueuse.
Cela voudrait dire:
Produisant des puces séparées le calcul est le suivant:
Notez qu'un Go de RAM est généralement constitué d'une banque composée de huit puces. Vous ne devez donc pas combiner deux mais neuf composants en une seule si vous souhaitez placer de la RAM et du CPU sur la même puce. Cela donnerait environ 865 pièces défectueuses sur 10 000 produites dans l'exemple simple ci-dessus.
Les CPU "IBM Cell" avaient exactement ce problème. La console "Playstation" utilisait des puces partiellement défectueuses; le logiciel Playstation a été écrit de manière à ce que les cœurs et les SRAM défectueux ne soient pas utilisés.
la source
Il existe en réalité deux types de RAM. Ils sont RAM statique et RAM dynamique. La mémoire statique est très rapide, mais son coût est plus élevé. Pendant ce temps, la RAM dynamique est lente comparée à la RAM statique, mais son coût est bon marché comparé à la RAM statique.
La mémoire cache tombe dans la RAM statique. vous pouvez voir qu'ils viennent en Ko ou en MB. Ils sont rapides. Mais coût élevé.
la source
En plus des autres raisons mentionnées, de nombreux systèmes ont plusieurs cœurs de processeur. Parfois, lorsque les informations stockées dans la DRAM principale sont cohérentes avec toutes les copies mises en cache, tous les processeurs ne les disposant pas ont également le même accès. Certaines architectures sont conçues sur l’hypothèse que chaque cœur de processeur dispose d’un espace d’adresse, et même si un processeur est capable d’accéder à une mémoire appartenant à d’autres processeurs, de tels accès seront beaucoup plus lents que ceux de sa propre mémoire. , mais x86 n’est généralement pas implémenté de cette manière.
Si un système est conçu autour de l'hypothèse selon laquelle les cœurs de processeur possèdent certaines plages d'adresses et que le code tente de minimiser l'utilisation des plages d'adresses d'autres processeurs, il serait alors logique d'inclure dans chaque code de processeur une quantité généreuse de mémoire sur puce. Une telle conception pourrait réduire le temps nécessaire à un cœur de processeur pour accéder à sa propre mémoire, mais augmenterait probablement le temps nécessaire pour accéder à la mémoire d'un autre processeur. Cependant, à moins que le système ne soit conçu autour d'une telle hypothèse, il est probable que les données soient distribuées entre les processeurs sans se soucier de qui en a besoin quand. Même si le temps supplémentaire nécessaire pour accéder aux données depuis une autre CPU (par rapport à un système de mémoire externe) était deux fois moins rapide que le temps gagné sur un accès interne,
Si l’on concevait un système de toutes pièces pour s’adapter aux technologies actuelles, une architecture de mémoire non uniforme permettrait plus d’exploitation que celle qui doit permettre à tous les processeurs d’accéder efficacement à toute la mémoire. Cependant, compte tenu des conceptions logicielles actuelles, disposer d'un système de mémoire externe partagé entre les processeurs est probablement plus efficace que d'essayer de stocker des données en bloc dans les processeurs eux-mêmes.
la source
Bien que toutes les réponses précédentes indiquent correctement pourquoi il est si difficile d'ajouter plus de mémoire au processeur, il est également vrai qu'il y a beaucoup de mémoire dans les processeurs modernes.
Dans les opérations en temps réel, lorsque les retards déterministes sont importants, il n’est pas rare d’utiliser le cache sur puce en tant que mémoire adressable, pour le code et / ou les données. L'avantage est un temps d'accès rapide et constant et l'inconvénient est que la mémoire sur puce est assez limitée.
la source
Les problèmes que vous décrivez dans votre question initiale ne pourraient être évités que si TOUTE la mémoire de la machine était incluse dans la CPU. Toute mémoire supplémentaire ajoutée à la machine via les logements de la carte principale serait soumise aux mêmes délais que ceux décrits ci-dessus et nécessiterait des dispositifs de marshaling et de contrôle logique entre la CPU / RAM et la RAM intégrée.
La RAM est bon marché et est généralement étendue par les utilisateurs un ou même deux fois entre les mises à niveau de leurs processeurs.
N'oubliez pas non plus qu'un appel "Fetch" typique, même si la RAM fonctionne à la vitesse d'horloge de la CPU, entraîne un nombre de ticks inactifs sur la CPU.
L'organisation traditionnelle de la mémoire sur une machine est une pyramide avec les registres de la CPU en haut, puis en cache, puis en RAM, puis en disque. En règle générale, les machines performantes combinent une vitesse d'horloge décente, une quantité raisonnable de mémoire cache, une bonne quantité de mémoire vive et un disque dur à haute vitesse. Ces dernières années, les performances des disques offrent généralement la meilleure performance possible pour la plupart des disques PC et les disques à régime élevé, les disques avec cache et les disques SSD améliorant de manière significative les performances.
Oui, une machine avec toute sa mémoire vive sur puce fonctionnerait bien dans les applications modernes, mais une machine avec une partie de sa mémoire vive sur puce exécutant un système d'exploitation standard ne fournirait probablement pas l'augmentation de performances que vous pourriez penser.
la source