Oh man Leute

Ich glaub da gibts nen paar Defizite was Caches angeht
Dann will ich mal für etwas Aufhellung sorgen.
Also allgemein, wurden hier einige falsche, einige halb falsche, halb richtigen und auch einige richtigen Aussagen getätigt. Daher fass ich mal einfach nen paar Punkte zusammen, die man so nicht wirklich stehen lassen kann.
1. Ne CPU wird in der Regel in EINER Fertigungstechnologie/Struckturgröße hergestellt. Wenn nicht, dann sind es halt unterschiedliche DIE´s die zusammengeschlossen werden, aber auf einem DIE wird man keine zwei Struckturgrößen vorfinden.
2. Nen Cache hat also auch keine feinere Strucktur als der Rest von der CPU
3. Nen schneller Cache ist nicht "teurer". Das ist so ne Halbwahrheit. Es kommt nämlich drauf an wie man teuer definiert. Die Kosten für nen einzelnen Transistor von nem schnellen oder langsamen Cache sind gleich groß. Is ja auch logisch eigentlich. Was sich allerdings ändert ist die Anzahl an Transistoren die du brauchst. Allgemein kann man sagen, ein schneller Cache benötigt mehr Logic, also mehr Transistoren für die gleiche Datengröße, und damit auch mehr DIE Fläche, die nunmal begrenzt ist. Daher ist nen schneller Cache auch "teurer" im Sinn von, er verbraucht mehr Ressourcen (DIE-Fläche) um die gleiche Datengröße zu erreichen wie ein langsamer.
4. Ja RAM ist im Vergleich zum Cache in den letzten Jahren schneller geworden, allerdings sind das auch ganz andere Welten was die Zugriffszeiten angeht. Der RAM ist wenn ichs richtig imKopf hab so ca 2-3 Größenordnungen langsamer als der Cache. Die Festplatten etwa nochmal so viel langsamer als der RAM. Daher tut nen Cachemiss auch RICHTIG weh, und nen RAMmiss ist ne mittlere Katastrophe.
5. Was auch noch ein sehr wichtige Aspekt ist, ist das Caches assoziativ sind. Kurz gesagt ohne tiefer einzugehen, je höher die assoziativität des Caches ist, umso mehr Register des Caches sind x-fach dem RAM geordnet. Das heist, wenn wir z.B. 2xassoziativen Cache haben, und wir schreiben was in nen Register (so heisen die speicherblöcke im Cache) und arbeiten damit, brauchen nun aber nach nen Cachemiss Daten aus dem RAM, die wir dann in den Cache schreiben, so überschreiben wir z.B. das Register 1, im nächsten Rechenschritt, brauchen wir aber eben diese Daten wieder, also wieder Daten aus dem RAM holen, die halt ungünstig liegen und WIEDER in Register 1 geschrieben werden müssen, und so geht das weiter und weiter. So kannst du Situationen schaffen, in denen du JEDE CPU auf die Rechenleistung von nem Taschenrechner ausbremst.
6. ein gemeinsamer Cache ist für das herunterfahren von einzelnen Cores sehr von Vorteil, da man dadurch die Konsistenz der Daten leicht gewährleisten kann. Man spart sich dann nämlich die Zeit zum umschreiben der Register. Ebenso hat man den Vorteil das alle Cores den Cache nutzen können, und somit der Cache effektiver genutzt wird. Man nehme nur das Beispiel eines Dualcores, Core 0 ist leicht ausgelastet, brauch kaum Cache, Core 1 ist voll ausgelastet und benötigt sehr viel Cache, hier ist ein gemeinsamer Cache SEHR von Vorteil. Es gibt allerdings auch Nachteile eines gemeinsamen Caches, da ein gewisser overhead entsteht, da man ja den Cache verwalten muss, was auch Probleme mit sicht bringt. Man muss ja die Datenkonsistenz gewährleisten.
7. Es kann sehr von Vorteil sein, lieber einen größeren als einen Schnellen Cache zu haben, denn wenn das Problem nicht mehr ganz in den Cache passt, dann ist man um größenordnungen langsamer durch den Ramzugriff. Der Unterschied zwischen L2 und L3 sollte da um einiges geringer sein.
Sodele ich glaub das wars im großen und ganzen. Solltet ihr noch nähere Infos wünschen, dann schreibt das bitte möglichst genau hin, was ihr wissen wollt, dann kann ich veruschen euch die Konzepte und Probleme verständlich zu machen.
Wenn ich ganz gut drauf bin such ich vielleicht sogar meine alten Unterlagen raus
EDIT:
8. Es sollte eigentlich kein Problem sein bei einer CPU die Cachegröße anzupassen. Allerdings nur verkleinernd. Man muss halt "nur" direkt in die Register Werte reinschreiben und sie sperren, was spätestens mit assembler möglich sein sollte/muss. So kann man den Cache einfach durch reservieren/belegen für das Programm verkleinern. Ich wüsste grad wirklich nicht, warum dies nicht möglich sein sollte auf irgendeine Art und Weise. Es könnte halt nur mehr oder weniger kompliziert werden, wenn man wirklich assembler nutzen muss.