heim - Daten
Der Einfluss des Cache-Speichers auf die Computerleistung. Was ist Festplatten-Cache-Speicher und warum wird er benötigt? Wofür ist die Cache-Größe verantwortlich?

Es geht nicht um Bargeld, sondern um Zwischenspeicher-Prozessorspeicher und mehr. Von der Lautstärke Zwischenspeicher-Speicherhändler haben einen weiteren kommerziellen Fetisch geschaffen, insbesondere mit dem Cache von Zentralprozessoren und Festplatten (Grafikkarten haben ihn auch – aber sie sind noch nicht dazu gekommen). Es gibt also einen XXX-Prozessor mit 1 MB L2-Cache und genau den gleichen XYZ-Prozessor mit 2 MB Cache. Ratet mal, welches besser ist? Ah – tu es nicht gleich!

Zwischenspeicher-Speicher ist ein Puffer, der speichert, was für später beiseite gelegt werden kann und/oder muss. Der Prozessor verrichtet Arbeit und es entstehen Situationen, in denen Zwischendaten irgendwo gespeichert werden müssen. Na ja, natürlich im Cache! - schließlich ist es um Größenordnungen schneller als RAM, weil... Es befindet sich im Prozessorchip selbst und läuft normalerweise mit der gleichen Frequenz. Und dann, nach einiger Zeit, wird er diese Daten zurückfischen und erneut verarbeiten. Grob gesagt ist es wie ein Kartoffelsortierer am Fließband, der jedes Mal, wenn er etwas anderes als Kartoffeln (Karotten) findet, es in eine Kiste wirft. Und wenn es voll ist, steht er auf und holt es heraus sein zum nächsten Raum. In diesem Moment steht das Förderband still und es ist eine Stillstandszeit zu beobachten. Das Volumen der Box beträgt Zwischenspeicher in dieser Analogie. UND Wie viele sein Benötigen Sie 1 MB oder 12? Es ist klar, dass wenn sein Das Volumen ist klein, Sie müssen zu viel Zeit mit dem Entfernen verbringen und es wird einfach sein, aber ab einem bestimmten Volumen sein Eine weitere Erhöhung bringt nichts. Nun, der Sortierer wird eine Kiste für 1000 kg Karotten haben – aber so viel wird er während seiner gesamten Schicht nicht haben und das wird ihn nicht ZWEIMAL SCHNELLER machen! Es gibt noch eine weitere Feinheit – groß Zwischenspeicher Erstens kann es zu einer Zunahme der Verzögerungen beim Zugriff kommen, und gleichzeitig steigt die Wahrscheinlichkeit von Fehlern, beispielsweise beim Übertakten, und zweitens. (darüber, WIE man in diesem Fall die Stabilität/Instabilität des Prozessors ermittelt und herausfindet, dass der Fehler konkret auftritt sein Cache, Test L1 und L2 - Sie können hier lesen.) Drittens - Zwischenspeicher frisst eine ordentliche Menge an Chipfläche und das Transistorbudget der Prozessorschaltung. Das gleiche gilt für Zwischenspeicher Festplattenspeicher. Und wenn die Prozessorarchitektur stark ist, wird in vielen Anwendungen ein Cache von 1024 KB oder mehr benötigt. Wenn Sie über eine schnelle Festplatte verfügen, sind 16 MB oder sogar 32 MB angemessen. Aber keine 64 MB Cache reichen aus sein schneller, wenn es sich um eine Trimmversion namens grüne Version (Green WD) mit einer Geschwindigkeit von 5900 statt der erforderlichen 7200 handelt, auch wenn letztere 8 MB hat. Dann nutzen Intel- und AMD-Prozessoren dies unterschiedlich Zwischenspeicher(Im Allgemeinen ist AMD effizienter und ihre Prozessoren sind oft mit niedrigeren Werten zufrieden.) Darüber hinaus Intel Zwischenspeicher allgemein, aber für AMD ist es für jeden Kern persönlich. Der schnellste Zwischenspeicher L1 für AMD-Prozessoren beträgt 64 KB für Daten und Anweisungen, was doppelt so viel ist wie für Intel. Zwischenspeicher Die dritte Ebene L3 ist normalerweise in Top-Prozessoren vorhanden AMD Phenom II 1055T X6 Sockel AM3 2,8GHz oder ein Mitbewerber Intel Core i7-980X. Erstens lieben Spiele große Cache-Volumina. UND Zwischenspeicher Viele professionelle Anwendungen mögen es NICHT (siehe Computer für Rendering, Videobearbeitung und professionelle Anwendungen). Genauer gesagt sind ihm diejenigen, die die höchsten Ansprüche stellen, im Allgemeinen gleichgültig. Was Sie jedoch auf keinen Fall tun sollten, ist, einen Prozessor basierend auf der Cache-Größe auszuwählen. Der alte Pentium 4 verfügte in seinen neuesten Versionen auch über 2 MB Cache bei Betriebsfrequenzen deutlich über 3 GHz – vergleichen Sie sein Leistung mit einem günstigen Dual-Core-Celeron E1***, der mit Frequenzen von etwa 2 GHz arbeitet. Er wird nichts unversucht lassen, um dem alten Mann gegenüberzutreten. Ein relevanteres Beispiel ist der Hochfrequenz-Dual-Core-Prozessor E8600, der fast 200 US-Dollar kostet (anscheinend aufgrund des 6 MB Cache) und der Athlon II X4-620 2,6 GHz, der nur 2 MB hat. Dies hindert Athlone nicht daran, seinen Konkurrenten abzuschlachten.

Wie Sie den Grafiken entnehmen können, ist dies nicht der Fall Zwischenspeicher ersetzt keine zusätzlichen Kerne. Athlon mit 2 MB Cache (rot) schlägt Cor2Duo mit 6 MB Cache deutlich, selbst bei niedrigerer Frequenz und fast der Hälfte der Kosten. Das vergessen auch viele Zwischenspeicher ist in Grafikkarten vorhanden, da diese im Allgemeinen auch über Prozessoren verfügen. Ein aktuelles Beispiel ist die GTX460-Grafikkarte, bei der es gelingt, nicht nur den Bus und die Speicherkapazität zu reduzieren (was der Käufer vermuten wird), sondern auch ZWISCHENSPEICHER Shader jeweils von 512 KB auf 384 KB (was der Käufer NICHT erraten wird). Und dies wird auch einen negativen Beitrag zur Produktivität leisten. Es wird auch interessant sein, die Abhängigkeit der Leistung von der Cache-Größe herauszufinden. Lassen Sie uns am Beispiel desselben Prozessors untersuchen, wie schnell es mit zunehmender Cache-Größe wächst. Wie Sie wissen, unterscheiden sich Prozessoren der Serien E6***, E4*** und E2*** nur in der Cache-Größe (jeweils 4, 2 und 1 MB). Beim Betrieb mit der gleichen Frequenz von 2400 MHz zeigen sie die folgenden Ergebnisse.

Wie Sie sehen, sind die Ergebnisse nicht allzu unterschiedlich. Ich sage noch mehr: Wenn ein Prozessor mit einer Kapazität von 6 MB beteiligt gewesen wäre, wäre das Ergebnis noch etwas höher ausgefallen, denn Prozessoren erreichen die Sättigung. Bei Modellen mit 512 KB wäre der Rückgang jedoch spürbar. Mit anderen Worten: 2 MB reichen sogar für Spiele. Zusammenfassend können wir folgendes Fazit ziehen: Zwischenspeicher Es ist gut, wenn es von allem anderen BEREITS viel gibt. Es ist naiv und dumm, bei gleichen Kosten die Geschwindigkeit der Festplatte oder die Anzahl der Prozessorkerne für die Cache-Größe zu ändern, denn selbst die geräumigste Sortierbox ersetzt keinen anderen Sortierer. Aber es gibt auch gute Beispiele.. Z Beispielsweise verfügte der Pentium Dual-Core in einer frühen Revision des 65-nm-Prozesses über 1 MB Cache für zwei Kerne (E2160-Serie und ähnliche), und die spätere 45-nm-Revision der E5200-Serie verfügt immer noch über 2 MB, wenn alle anderen Dinge gleich bleiben ( und vor allem - PREIS). Natürlich sollten Sie sich für Letzteres entscheiden.

Ein Cache ist ein Zwischenpuffer mit schnellem Zugriff, der Informationen enthält, die am wahrscheinlichsten angefordert werden. Der Zugriff auf Daten im Cache erfolgt schneller als das Abrufen der Originaldaten aus dem Betriebsspeicher (RAM) und schneller als als externer Speicher (Festplatte oder Solid-State-Laufwerk), wodurch die durchschnittliche Zugriffszeit verkürzt und die Gesamtleistung des Computersystems erhöht wird.

Eine Reihe von Zentraleinheitsmodellen (CPU) verfügen über einen eigenen Cache, um den Zugriff auf den Arbeitsspeicher (RAM) zu minimieren, der langsamer als Register ist. Der Cache-Speicher kann erhebliche Leistungsvorteile bieten, wenn die RAM-Taktfrequenz deutlich niedriger ist als die CPU-Taktfrequenz. Die Taktrate des Cache-Speichers ist in der Regel nicht viel geringer als die CPU-Geschwindigkeit.

Cache-Ebenen

Der CPU-Cache ist in mehrere Ebenen unterteilt. In einem Allzweckprozessor kann die Anzahl der Ebenen heutzutage bis zu 3 betragen. Der Level-N+1-Cache ist typischerweise größer und in der Zugriffsgeschwindigkeit und Datenübertragung langsamer als der Level-N-Cache.

Der schnellste Speicher ist der Cache der ersten Ebene – L1-Cache. Tatsächlich ist es ein integraler Bestandteil des Prozessors, da es sich auf demselben Chip befindet und Teil der Funktionsblöcke ist. Bei modernen Prozessoren ist der L1-Cache üblicherweise in zwei Caches unterteilt, den Befehlscache und den Datencache (Harvard-Architektur). Die meisten Prozessoren ohne L1-Cache können nicht funktionieren. Der L1-Cache arbeitet mit der Prozessorfrequenz und kann im Allgemeinen bei jedem Taktzyklus abgerufen werden. Oft ist es möglich, mehrere Lese-/Schreibvorgänge gleichzeitig durchzuführen. Die Zugriffslatenz beträgt normalerweise 2–4 Kerntaktzyklen. Das Volumen ist normalerweise klein – nicht mehr als 384 KB.

Der zweitschnellste ist der L2-Cache – ein Cache der zweiten Ebene, der sich normalerweise wie L1 auf dem Chip befindet. Bei älteren Prozessoren ein Satz Chips auf der Hauptplatine. L2-Cache-Volumen von 128 KB auf 1–12 MB. Bei modernen Mehrkernprozessoren ist der Cache der zweiten Ebene, der sich auf demselben Chip befindet, ein separater Speicher – bei einer Gesamtcachegröße von nM MB verfügt jeder Kern über nM/nC MB, wobei nC die Anzahl der Prozessorkerne ist. Typischerweise beträgt die Latenz des L2-Cache auf dem Kernchip 8 bis 20 Kerntaktzyklen.

Der Cache der dritten Ebene ist am wenigsten schnell, kann aber eine sehr beeindruckende Größe haben – mehr als 24 MB. Der L3-Cache ist langsamer als frühere Caches, aber immer noch deutlich schneller als RAM. In Multiprozessorsystemen wird es häufig verwendet und dient der Synchronisierung von Daten aus verschiedenen L2s.

Manchmal gibt es auch einen Cache der 4. Ebene, normalerweise befindet er sich in einem separaten Chip. Der Einsatz von Level-4-Cache ist nur für Hochleistungsserver und Mainframes gerechtfertigt.

Das Problem der Synchronisation zwischen verschiedenen Caches (sowohl einem als auch mehreren Prozessoren) wird durch Cache-Kohärenz gelöst. Es gibt drei Möglichkeiten, Informationen zwischen Caches unterschiedlicher Ebene oder, wie man sagt, Cache-Architekturen auszutauschen: inklusiv, exklusiv und nicht exklusiv.

Wie wichtig ist L3-Cache für AMD-Prozessoren?

Tatsächlich ist es sinnvoll, Multicore-Prozessoren mit dediziertem Speicher auszustatten, der von allen verfügbaren Kernen gemeinsam genutzt wird. In dieser Rolle kann ein schneller Cache der dritten Ebene (L3) den Zugriff auf die am häufigsten angeforderten Daten erheblich beschleunigen. Dann müssen die Kerne möglichst nicht auf den langsamen Hauptspeicher (RAM) zugreifen.

Zumindest in der Theorie. Kürzlich AMD kündigte den Athlon II X4-Prozessor an, bei dem es sich um ein Phenom II X4-Modell ohne L3-Cache handelt, was darauf hindeutet, dass dies nicht unbedingt erforderlich ist. Wir haben uns entschieden, zwei Prozessoren (mit und ohne L3-Cache) direkt zu vergleichen, um zu testen, wie sich der Cache auf die Leistung auswirkt.

Klicken Sie auf das Bild, um es zu vergrößern.

Wie funktioniert der Cache?

Bevor wir uns mit den Tests befassen, ist es wichtig, einige Grundlagen zu verstehen. Das Funktionsprinzip des Caches ist recht einfach. Der Cache puffert Daten so nah wie möglich an den Prozessorkernen des Prozessors, um CPU-Anfragen an weiter entfernte und langsamere Speicher zu reduzieren. Auf modernen Desktop-Plattformen umfasst die Cache-Hierarchie bis zu drei Ebenen, die dem Zugriff auf den Arbeitsspeicher vorangehen. Darüber hinaus dienen Caches der zweiten und insbesondere dritten Ebene nicht nur der Pufferung von Daten. Ihr Zweck besteht darin, eine Überlastung des Prozessorbusses zu verhindern, wenn die Kerne Informationen austauschen müssen.

Treffer und Fehlschläge

Die Wirksamkeit von Cache-Architekturen wird an der Trefferquote gemessen. Datenanfragen, die vom Cache erfüllt werden können, gelten als Treffer. Wenn dieser Cache nicht die erforderlichen Daten enthält, wird die Anforderung weiter entlang der Speicherpipeline weitergeleitet und ein Fehlschlag gezählt. Natürlich führen Fehler dazu, dass die Informationsbeschaffung länger dauert. Dadurch entstehen „Blasen“ (Leerlauf) und Verzögerungen in der Rechenpipeline. Treffer hingegen ermöglichen es Ihnen, die maximale Leistung aufrechtzuerhalten.

Cache-Eintrag, Exklusivität, Kohärenz

Ersetzungsrichtlinien legen fest, wie Speicherplatz im Cache für neue Einträge freigegeben wird. Da in den Cache geschriebene Daten irgendwann im Hauptspeicher erscheinen müssen, kann es sein, dass Systeme dies gleichzeitig mit dem Schreiben in den Cache tun (Write-Through) oder die Datenbereiche als „verschmutzt“ markieren (Write-Back) und in sie schreiben Speicher. wenn es aus dem Cache entfernt wird.

Daten in mehreren Cache-Ebenen können exklusiv, also ohne Redundanz, gespeichert werden. Dann finden Sie nicht die gleichen Datenzeilen in zwei unterschiedlichen Cache-Hierarchien. Oder Caches können inklusiv arbeiten, d. h. die unteren Cache-Ebenen enthalten garantiert Daten, die in den oberen Cache-Ebenen (näher am Prozessorkern) vorhanden sind. AMD Phenom verwendet einen exklusiven L3-Cache, während Intel eine inklusive Cache-Strategie verfolgt. Kohärenzprotokolle stellen die Integrität und Aktualität der Daten über verschiedene Kerne, Cache-Ebenen und sogar Prozessoren hinweg sicher.

Cachegröße

Ein größerer Cache kann mehr Daten speichern, erhöht jedoch tendenziell die Latenz. Darüber hinaus verbraucht ein großer Cache eine beträchtliche Anzahl an Prozessortransistoren. Daher ist es wichtig, ein Gleichgewicht zwischen Transistorbudget, Chipgröße, Stromverbrauch und Leistung/Latenz zu finden.

Assoziativität

Einträge im RAM können direkt dem Cache zugeordnet werden, d. h. es gibt nur eine Cache-Position für eine Kopie von Daten aus dem RAM, oder sie können n-fach assoziativ sein, d. h. es gibt n mögliche Speicherorte im Cache, an denen sich diese befinden Daten können gespeichert werden. Höhere Assoziativitätsgrade (bis hin zu vollständig assoziativen Caches) bieten eine größere Caching-Flexibilität, da vorhandene Daten im Cache nicht neu geschrieben werden müssen. Mit anderen Worten: Ein hoher n-Grad an Assoziativität garantiert eine höhere Trefferquote, erhöht aber auch die Latenz, da die Überprüfung aller Assoziationen auf einen Treffer mehr Zeit in Anspruch nimmt. Typischerweise ist der höchste Grad der Zuordnung für die letzte Caching-Ebene sinnvoll, da dort die maximale Kapazität verfügbar ist und die Suche nach Daten außerhalb dieses Caches dazu führt, dass der Prozessor auf langsamen RAM zugreift.

Hier einige Beispiele: Core i5 und i7 verwenden 32 KB L1-Cache mit 8-Wege-Assoziativität für Daten und 32 KB L1-Cache mit 4-Wege-Assoziativität für Anweisungen. Verständlicherweise möchte Intel, dass Anweisungen schneller verfügbar sind und der L1-Datencache eine maximale Trefferquote aufweist. Der L2-Cache auf Intel-Prozessoren verfügt über 8-Wege-Assoziativität, und der Intel L3-Cache ist sogar noch intelligenter, da er 16-Wege-Assoziativität implementiert, um Treffer zu maximieren.

AMD verfolgt bei den Phenom II Um mögliche Fehler auszugleichen, wurde die Cache-Kapazität verdoppelt: 64 KB für Daten und 64 KB für Anweisungen. Der L2-Cache verfügt wie das Intel-Design über eine 8-Wege-Assoziativität, der L3-Cache von AMD arbeitet jedoch mit einer 48-Wege-Assoziativität. Die Entscheidung, eine Cache-Architektur einer anderen vorzuziehen, kann jedoch nicht ohne Berücksichtigung der gesamten CPU-Architektur beurteilt werden. Es ist ganz natürlich, dass Testergebnisse praktische Bedeutung haben, und unser Ziel war genau ein praktischer Test dieser gesamten komplexen mehrstufigen Caching-Struktur.

Jeder moderne Prozessor verfügt über einen dedizierten Cache, der Prozessoranweisungen und Daten speichert und fast sofort einsatzbereit ist. Diese Ebene wird allgemein als Level 1- oder L1-Cache bezeichnet und wurde erstmals in den 486DX-Prozessoren eingeführt. Seit kurzem sind AMD-Prozessoren standardmäßig mit 64 KB L1-Cache pro Kern (für Daten und Anweisungen) ausgestattet, und Intel-Prozessoren verwenden 32 KB L1-Cache pro Kern (auch für Daten und Anweisungen).

Der L1-Cache erschien erstmals auf den 486DX-Prozessoren und wurde danach zu einem integralen Bestandteil aller modernen CPUs.

Second-Level-Cache (L2) erschien nach der Veröffentlichung des Pentium III auf allen Prozessoren, obwohl die ersten Implementierungen davon auf der Verpackung im Pentium Pro-Prozessor (jedoch nicht auf dem Chip) erfolgten. Moderne Prozessoren sind mit bis zu 6 MB On-Chip-L2-Cache ausgestattet. In der Regel wird dieses Volumen beispielsweise bei einem Intel Core 2 Duo Prozessor auf zwei Kerne aufgeteilt. Typische L2-Konfigurationen bieten 512 KB oder 1 MB Cache pro Kern. Prozessoren mit kleinerem L2-Cache liegen tendenziell im unteren Preisniveau. Unten finden Sie ein Diagramm früher L2-Cache-Implementierungen.

Beim Pentium Pro war der L2-Cache in der Prozessorverpackung enthalten. In den nachfolgenden Generationen des Pentium III und des Athlon wurde der L2-Cache über separate SRAM-Chips implementiert, was damals (1998, 1999) weit verbreitet war.

Die anschließende Ankündigung einer Prozesstechnologie bis 180 nm ermöglichte es den Herstellern endlich, L2-Cache auf dem Prozessorchip zu integrieren.


Die ersten Dual-Core-Prozessoren nutzten einfach bestehende Designs, die zwei Dies pro Paket enthielten. AMD stellte einen Dual-Core-Prozessor auf einem monolithischen Chip vor, fügte einen Speichercontroller und einen Schalter hinzu, und Intel baute für seinen ersten Dual-Core-Prozessor einfach zwei Single-Core-Chips in einem Gehäuse zusammen.


Zum ersten Mal wurde der L2-Cache von zwei Rechenkernen auf Core 2 Duo-Prozessoren gemeinsam genutzt. AMD ging noch einen Schritt weiter und entwickelte seinen ersten Quad-Core-Phenom von Grund auf, und Intel verwendete für seinen ersten Quad-Core-Prozessor erneut zwei Chips, dieses Mal zwei Dual-Core-Core-2-Chips, um die Kosten zu senken.

Den Third-Level-Cache gibt es seit den Anfängen des Alpha 21165-Prozessors (96 KB, 1995 eingeführte Prozessoren) oder des IBM Power 4 (256 KB, 2001). In x86-basierten Architekturen tauchte der L3-Cache jedoch erstmals bei den Modellen Intel Itanium 2, Pentium 4 Extreme (Gallatin, beide Prozessoren im Jahr 2003) und Xeon MP (2006) auf.

Frühe Implementierungen stellten lediglich eine weitere Ebene in der Cache-Hierarchie dar, obwohl moderne Architekturen den L3-Cache als großen, gemeinsam genutzten Puffer für die Datenübertragung zwischen Kernen in Mehrkernprozessoren verwenden. Dies wird durch den hohen n-Grad der Assoziativität unterstrichen. Es ist besser, etwas länger im Cache nach Daten zu suchen, als am Ende in eine Situation zu geraten, in der mehrere Kerne sehr langsam auf den Haupt-RAM zugreifen. Mit der bereits erwähnten Phenom-Reihe führte AMD den L3-Cache erstmals auf einem Desktop-Prozessor ein. Der 65-nm-Phenom X4 enthielt 2 MB gemeinsam genutzten L3-Cache, und der moderne 45-nm-Phenom II Intel Core i7- und i5-Prozessoren nutzen 8 MB L3-Cache.

Moderne Quad-Core-Prozessoren verfügen über dedizierte L1- und L2-Caches für jeden Kern sowie einen großen L3-Cache, der von allen Kernen gemeinsam genutzt wird. Der gemeinsam genutzte L3-Cache ermöglicht zudem den Austausch von Daten, die die Kerne parallel bearbeiten können.


Hallo Leute, reden wir über den Prozessor, genauer gesagt über seinen Cache. Der Cache des Prozessors kann unterschiedlich sein, zum Beispiel habe ich jetzt einen Pentium G3220 (Sockel 1150), das ist ein moderner Prozessor und hat 3 MB Cache. Gleichzeitig verfügt das alte Modell Pentium D965 (Sockel 775) über 4 MB Cache. Aber gleichzeitig ist der G3220 um ein Vielfaches schneller als der D965, ich meine damit, dass der Cache gut ist, aber Hauptsache, der Cache ist modern. Bedenken Sie, dass der Cache-Speicher älterer Prozessoren viel langsamer ist als der neuerer.

Lassen Sie uns über einige Geräte sprechen, die sich auf die Leistung auswirken. Schauen wir mal, nehmen wir eine Festplatte, hat sie einen Cache? Ja, das gibt es, aber es ist klein, obwohl es einen leichten Einfluss auf die Leistung hat. Was passiert dann? Dann kommt der RAM, alles, womit das Programm oder der Prozessor arbeitet, alles wird im RAM untergebracht. Befinden sich keine Daten im RAM, werden diese von der Festplatte gelesen, und das ist sehr langsam. Aber der Arbeitsspeicher ist schon sehr schnell, da kann es ganz schön viel sein. Aber der Arbeitsspeicher ist im Vergleich zu einer Festplatte schnell; für einen Prozessor ist er immer noch nicht sehr schnell, und daher verfügt dieser auch über einen eigenen Cache, der schon superschnell ist!

Welchen Einfluss hat der Prozessor-Cache? In diesem Cache speichert der Prozessor, was er häufig verwendet, also alle möglichen Befehle und Anweisungen. Dementsprechend gilt: Je mehr, desto besser, aber das ist nicht ganz richtig. Wie viel Cache hast du? Wenn Sie es nicht wissen, zeige ich Ihnen, wie Sie es herausfinden können. Es ist ganz einfach. Schauen Sie, was für eine interessante Situation. Kehren wir noch einmal zu den alten Prozessen zurück. Es scheint, dass es gut ist, wenn viel Cache vorhanden ist. Dafür gibt es einen Q9650-Prozessor (775-Sockel), der über 12 MB Cache verfügt, aber nicht einmal annähernd an moderne Core-i5- oder gar Core-i3-Modelle herankommt. Der i5 hat viel weniger Cache, nämlich nur 6 MB, und der i3 hat noch weniger Cache – nur 3 MB.

Ich verstehe, dass moderne Prozessoren im Allgemeinen viel schneller sind als alte. Aber das ist nicht das, worüber ich rede. Cache und Cache sind unterschiedlich; der Top-End-Q9650 hat im Vergleich zu Prozessoren auf einem modernen Sockel einfach einen langsamen Cache. Daher sind diese 12 MB nutzlos. Das ist alles, was ich meine: Streben Sie nicht nach Quantität, sondern nach Qualität. Also so. Ich habe das alles als Notiz für Sie geschrieben und hoffe, dass Sie es nützlich finden

Hier ist ein einfaches Bild, wie der Cache funktioniert:

Und hier noch ein Bild, hier ist auch ein anderes Gerät angedeutet, das ist ein Controller, der einem nur sagt, ob sich Daten im Cache befinden oder nicht:

Der Cache-Speicher ist superschnell. Ich kenne mich mit Prozessoren nicht so gut aus, aber es wäre interessant zu wissen, ob der Prozessor schneller wäre, wenn dieser Cache ... 100 MB ... oder sogar 1 GB wäre? Das ist natürlich schon jetzt fantastisch, aber mittlerweile gibt es Prozessoren mit einer riesigen Menge an Cache ... etwa 30 MB oder mehr. Ich bin mir da nicht sicher, aber es scheint, dass dieser Cache-Speicher sehr teuer ist und Es ist im Allgemeinen schwierig, es in einen Prozessor zu stecken, ich meine ein großes Volumen

Nun möchte ich Ihnen zeigen, wie Sie herausfinden, wie viel Cache im Prozessor vorhanden ist. Wenn Sie Windows 10 haben, ist das großartig, denn es kann alle Caches anzeigen, es gibt dort drei Ebenen. Obwohl die dritte Ebene die wichtigste zu sein scheint, ist sie auch die größte. Schauen Sie also, öffnen Sie den Task-Manager und gehen Sie zur Registerkarte „Leistung“. Hier auf der Registerkarte „CPU“ können Sie Informationen zum Cache sehen. Hier sind sie:

Hier sieht man, dass ich einen Pentium G3220 habe, einen recht guten Prozessor, wenn auch günstig. Aber es ist tatsächlich schneller als viele Modelle auf Sockel 775, die man als Near-Top-Modelle bezeichnen kann und die viel mehr Cache haben ... Das sind die Dinge ...

Aber ich sage Ihnen ganz offen, dass dies keine eindeutige Möglichkeit ist, zu erkennen, wie viel Cache ein Prozessor hat. Ich empfehle Ihnen, das CPU-Z-Dienstprogramm zu verwenden, wenn Sie denken: Ja, das ist ein Programm, ich muss es installieren und so, aber komm schon ... Dann hör auf! Dieses Programm wird von coolen Overlockern verwendet, die ihre Prozessoren übertakten. Während der Installation erstellt das Dienstprogramm keine Unmengen an Dateien, sondern die Installation besteht lediglich darin, das Programm in die Programmdateien zu entpacken. Anschließend kann cpuz.exe irgendwohin kopiert und ausgeführt werden. Es wird funktionieren! Sie haben es gerade gestartet und das war's, sie hat die Informationen gesammelt und schaut! Sie können es ganz einfach im Internet herunterladen, da es an jeder Ecke erhältlich ist. Achten Sie nur darauf, dass Sie sich keine Viren einfangen. Laden Sie dazu zum Beispiel auf dem Soft-Portal herunter. Schreiben Sie einfach in die CPU-Z-Soft-Portal-Suche. CPU-Z funktioniert auf fast allen Windows-Versionen, mit Ausnahme der ältesten ...

Im Allgemeinen können Sie es auf dieser Website herunterladen: cpuid.com. Ich wusste ehrlich gesagt nichts davon und war es gewohnt, von anderen Websites herunterzuladen!

Nun, ich hoffe, dass Sie es ohne Probleme herunterladen können. Jetzt starten Sie es und alles rund um den Prozessor steht Ihnen zur Verfügung. Also habe ich CPU-Z gestartet und Folgendes wurde über meinen Pentium G3220 angezeigt:

Wo ich das Kästchen eingekreist habe, wird dort der Cache angezeigt. Was ist ein Weg, nun ja, da steht 8-Wege, 12-Wege, naja, ich weiß nicht, was das ist, tut mir leid. Aber wie Sie hier sehen können, können Sie nicht nur den Cache, sondern auch andere Informationen, Frequenz, Kerne und Threads deutlich erkennen. Interessant ist auch, was der eine oder andere Cache hier zeigt. Nun, ich habe hier nur 3 MByte geschrieben, das heißt, ich habe nur 3 MB Cache.

Aber zum Beispiel beim Q9650 der Spitzenklasse ist die Situation dort etwas anders, obwohl 12 MB Cache vorhanden sind, handelt es sich im Wesentlichen um zwei Blöcke zu je 6 MB, und CPU-Z bestimmt dies:

Übrigens gibt es, wie man sieht, eine Übertaktung auf 4 GHz, was nicht schlecht ist. Übrigens kann eine solche Übertaktung durchaus luftgekühlt sein. Aber das ist eine ganz andere Geschichte...

Interessant ist übrigens auch, dass Modelle auf Sockel 775 keinen L3-Cache der dritten Ebene haben... Das heißt, es gibt nur L1 und L2..., aber das wusste ich nicht...

Das sind also die Dinge. Ich hoffe, ich habe alles klar geschrieben. Ich wiederhole es noch einmal: Jagen Sie nicht der Menge hinterher. Ich bereue es also nicht wirklich, aber trotzdem... Kurz gesagt, ich habe es mir vorgenommen und mir einen Computer auf dem 1150-Sockel gebaut. Nun, ich denke, alles ist in Ordnung. Aber ich fühlte mich ein wenig beleidigt, als ich erfuhr, dass der Sockel 1151 veröffentlicht wurde und dass er genauso viel oder sogar etwas billiger kostet ... Aber die Prozessoren sind dort tatsächlich schneller ... Na ja, okay. Ich habe mir vor langer Zeit einen Computer gekauft, aber ich war froh, dass mein Board, und dieser Asus Gryphon Z87, Prozessoren unterstützt, die auf dem Devil’s Canyon-Kern basieren! Das war ein Geschenk, denn Intel hatte zuvor erklärt, dass diese Prozessoren nur vom Z97-Chipsatz unterstützt würden, aber ich habe den verdammten Z87 genommen!

Kurz gesagt, das sind die Dinge

Das ist alles, Leute. Ich hoffe, dass für Sie alles gut wird und diese Informationen für Sie nützlich waren. Viel Glück

Nach Hause! Cache-Prozessor 30.07.2016

virtmachine.ru

Der Einfluss des Cache-Speichers auf die Computerleistung

Alle Benutzer kennen Computerelemente wie den Prozessor, der für die Datenverarbeitung verantwortlich ist, sowie den Arbeitsspeicher (RAM oder RAM), der für deren Speicherung verantwortlich ist. Aber nicht jeder weiß wahrscheinlich, dass es auch einen Prozessor-Cache-Speicher (Cache CPU) gibt, also den Arbeitsspeicher des Prozessors selbst (das sogenannte Ultra-RAM).

Cache-Funktion

Was ist der Grund, der Computerdesigner dazu veranlasst hat, dedizierten Speicher für den Prozessor zu verwenden? Reicht die RAM-Kapazität des Computers nicht aus?

Tatsächlich kamen Personalcomputer lange Zeit ohne Cache-Speicher aus. Aber wie Sie wissen, ist der Prozessor das schnellste Gerät in einem Personalcomputer und seine Geschwindigkeit hat mit jeder neuen CPU-Generation zugenommen. Derzeit wird seine Geschwindigkeit in Milliarden Operationen pro Sekunde gemessen. Gleichzeitig hat der Standard-RAM im Laufe seiner Entwicklung seine Leistung nicht wesentlich gesteigert.

Im Allgemeinen gibt es zwei Hauptspeicherchiptechnologien – statischen Speicher und dynamischen Speicher. Ohne auf die Details ihres Designs einzugehen, können wir nur sagen, dass statischer Speicher im Gegensatz zu dynamischem Speicher keine Regeneration erfordert; Darüber hinaus verwendet der statische Speicher 4–8 Transistoren für ein Informationsbit, während der dynamische Speicher 1–2 Transistoren verwendet. Dementsprechend ist dynamischer Speicher deutlich günstiger als statischer Speicher, aber gleichzeitig auch deutlich langsamer. Derzeit werden RAM-Chips auf Basis dynamischer Speicher hergestellt.

Ungefähre Entwicklung des Verhältnisses der Geschwindigkeit von Prozessoren und RAM:

Wenn der Prozessor also ständig Informationen aus dem RAM beziehen würde, müsste er auf langsamen dynamischen Speicher warten und wäre die ganze Zeit im Leerlauf. Im gleichen Fall würden sich die Kosten des Computers um ein Vielfaches erhöhen, wenn statischer Speicher als RAM verwendet würde.

Deshalb wurde ein vernünftiger Kompromiss entwickelt. Der Großteil des Arbeitsspeichers blieb dynamisch, während der Prozessor einen eigenen schnellen Cache-Speicher auf Basis statischer Speicherchips erhielt. Sein Volumen ist relativ klein – beispielsweise beträgt die Größe des Second-Level-Cache nur wenige Megabyte. Es ist jedoch zu bedenken, dass der gesamte Arbeitsspeicher der ersten IBM PC-Computer weniger als 1 MB groß war.

Darüber hinaus wird die Zweckmäßigkeit der Einführung der Caching-Technologie auch dadurch beeinflusst, dass verschiedene Anwendungen, die sich im RAM befinden, den Prozessor unterschiedlich belasten und es daher viele Daten gibt, die im Vergleich zu anderen eine Prioritätsverarbeitung erfordern.

Cache-Verlauf

Genau genommen wurde der Cache-Speicher bereits mehrere Jahrzehnte lang erfolgreich in Supercomputern eingesetzt, bevor er auf Personalcomputer übertragen wurde.

Erstmals erschien in einem PC auf Basis des i80386-Prozessors ein Cache-Speicher von nur 16 KB. Heutzutage verwenden moderne Prozessoren unterschiedliche Cache-Ebenen, von der ersten (der schnellste Cache mit der kleinsten Größe – normalerweise 128 KB) bis zur dritten (der langsamste Cache mit der größten Größe – bis zu mehreren zehn MB).

Der externe Cache des Prozessors befand sich zunächst auf einem separaten Chip. Dies führte jedoch mit der Zeit dazu, dass der Bus zwischen Cache und Prozessor zum Flaschenhals wurde und den Datenaustausch verlangsamte. In modernen Mikroprozessoren befinden sich sowohl die erste als auch die zweite Ebene des Cache-Speichers im Prozessorkern selbst.

Lange Zeit verfügten Prozessoren nur über zwei Cache-Ebenen, aber die Intel Itanium-CPU war die erste, die über einen Cache der dritten Ebene verfügte, der allen Prozessorkernen gemeinsam war. Es gibt auch Entwicklungen von Prozessoren mit vierstufigem Cache.

Cache-Architekturen und -Prinzipien

Heute sind zwei Haupttypen der Cache-Speicherorganisation bekannt, die aus den ersten theoretischen Entwicklungen auf dem Gebiet der Kybernetik stammen – Princeton- und Harvard-Architekturen. Die Princeton-Architektur impliziert einen einzigen Speicherraum zum Speichern von Daten und Befehlen, während die Harvard-Architektur separate Speicherräume impliziert. Die meisten x86-PC-Prozessoren verwenden einen separaten Typ von Cache-Speicher. Darüber hinaus ist in modernen Prozessoren auch eine dritte Art von Cache-Speicher aufgetaucht – der sogenannte assoziative Übersetzungspuffer, der die Umwandlung virtueller Speicheradressen des Betriebssystems in physische Speicheradressen beschleunigen soll.

Ein vereinfachtes Diagramm der Interaktion zwischen Cache-Speicher und Prozessor kann wie folgt beschrieben werden. Zuerst prüft der Prozessor, ob die vom Prozessor benötigten Informationen im schnellsten Cache der ersten Ebene, dann im Cache der zweiten Ebene usw. vorhanden sind. Wenn die erforderlichen Informationen in keinem Cache-Level gefunden werden, spricht man von einem Fehler oder einem Cache-Miss. Befinden sich überhaupt keine Informationen im Cache, muss der Prozessor diese aus dem RAM oder sogar aus dem externen Speicher (von der Festplatte) beziehen.

Die Reihenfolge, in der der Prozessor nach Informationen im Speicher sucht:

Auf diese Weise sucht der Prozessor nach Informationen

Um den Betrieb des Cache-Speichers und seine Interaktion mit den Recheneinheiten des Prozessors sowie des RAM zu steuern, gibt es einen speziellen Controller.

Schema zur Organisation des Zusammenspiels von Prozessorkern, Cache und RAM:


Der Cache-Controller ist die zentrale Verbindung zwischen Prozessor, RAM und Cache-Speicher

Es ist zu beachten, dass das Zwischenspeichern von Daten ein komplexer Prozess ist, der viele Technologien und mathematische Algorithmen verwendet. Zu den grundlegenden Konzepten, die beim Caching verwendet werden, gehören Cache-Schreibmethoden und Cache-Assoziativitätsarchitektur.

Cache-Schreibmethoden

Es gibt zwei Hauptmethoden zum Schreiben von Informationen in den Cache-Speicher:

  1. Rückschreibmethode – Daten werden zuerst in den Cache und dann, wenn bestimmte Bedingungen eintreten, in den RAM geschrieben.
  2. Durchschreibmethode – Daten werden gleichzeitig in RAM und Cache geschrieben.

Cache-Assoziativitätsarchitektur

Die Cache-Assoziativitätsarchitektur definiert die Art und Weise, wie Daten aus dem RAM dem Cache zugeordnet werden. Die Hauptoptionen für die Caching-Assoziativitätsarchitektur sind:

  1. Direkt zugeordneter Cache – ein bestimmter Abschnitt des Caches ist für einen bestimmten Abschnitt des RAM verantwortlich
  2. Vollständig assoziativer Cache – jeder Teil des Caches kann mit jedem Teil des RAM verknüpft werden
  3. Gemischter Cache (satzassoziativ)

Verschiedene Cache-Ebenen können typischerweise unterschiedliche Cache-Assoziativitätsarchitekturen verwenden. Direkt zugeordnetes RAM-Caching ist die schnellste Caching-Option, daher wird diese Architektur typischerweise für große Caches verwendet. Ein vollständig assoziativer Cache weist wiederum weniger Cache-Fehler (Misses) auf.

Abschluss

In diesem Artikel haben Sie das Konzept des Cache-Speichers, die Cache-Speicher-Architektur und die Caching-Methoden kennengelernt und erfahren, wie sich diese auf die Leistung eines modernen Computers auswirken. Das Vorhandensein eines Cache-Speichers kann den Betrieb des Prozessors erheblich optimieren, seine Leerlaufzeit reduzieren und somit die Leistung des gesamten Systems steigern.

biosgid.ru

Galerie der Prozessor-Cache-Effekte

Fast alle Entwickler wissen, dass der Prozessor-Cache ein kleiner, aber schneller Speicher ist, der Daten aus kürzlich besuchten Speicherbereichen speichert – die Definition ist kurz und ziemlich genau. Allerdings ist es notwendig, die langweiligen Details der Cache-Mechanismen zu kennen, um die Faktoren zu verstehen, die die Codeleistung beeinflussen.

In diesem Artikel sehen wir uns eine Reihe von Beispielen an, die verschiedene Funktionen von Caches und deren Auswirkungen auf die Leistung veranschaulichen. Die Beispiele werden in C# vorliegen; die Wahl der Sprache und Plattform hat keinen großen Einfluss auf die Leistungsbeurteilung und die endgültigen Schlussfolgerungen. Wenn Sie innerhalb angemessener Grenzen eine Sprache wählen, in der das Lesen eines Werts aus einem Array dem Zugriff auf eine Hash-Tabelle entspricht, erhalten Sie natürlich keine interpretierbaren Ergebnisse. Anmerkungen des Übersetzers sind kursiv gedruckt.

Habracut - - -

Beispiel 1: Speicherzugriff und Leistung
Wie viel schneller ist Ihrer Meinung nach der zweite Zyklus als der erste? int arr = neues int;

For (int i = 0; i // Sekunde for (int i = 0; i Beispiel 2: Einfluss von Cache-Zeilen Lassen Sie uns tiefer gehen – probieren Sie andere Schrittwerte aus, nicht nur 1 und 16: for (int i = 0; i

Bitte beachten Sie, dass bei Schrittwerten von 1 bis 16 die Betriebszeit nahezu unverändert bleibt. Aber bei Werten größer als 16 verringert sich die Laufzeit jedes Mal, wenn wir den Schritt verdoppeln, um etwa die Hälfte. Das bedeutet nicht, dass die Schleife irgendwie auf magische Weise schneller läuft, sondern nur, dass auch die Anzahl der Iterationen abnimmt. Der entscheidende Punkt ist die gleiche Betriebszeit mit Schrittwerten von 1 bis 16.

Der Grund dafür ist, dass moderne Prozessoren nicht byteweise auf den Speicher zugreifen, sondern in kleinen Blöcken, sogenannten Cache-Zeilen. Normalerweise beträgt die Zeichenfolgengröße 64 Byte. Wenn Sie einen beliebigen Wert aus dem Speicher lesen, gelangt mindestens eine Cache-Zeile in den Cache. Der spätere Zugriff auf einen beliebigen Wert aus dieser Zeile erfolgt sehr schnell. Da 16 int-Werte 64 Bytes belegen, greifen Schleifen mit Schritten von 1 bis 16 auf die gleiche Anzahl von Cache-Zeilen zu, genauer gesagt auf alle Cache-Zeilen des Arrays. Bei Schritt 32 erfolgt der Zugriff auf jede zweite Zeile, bei Schritt 64 auf jede vierte. Dies zu verstehen ist für einige Optimierungstechniken sehr wichtig. Die Anzahl der Zugriffe darauf hängt vom Speicherort der Daten ab. Beispielsweise können für nicht ausgerichtete Daten zwei Zugriffe auf den Hauptspeicher statt einem erforderlich sein. Wie wir oben herausgefunden haben, wird die Betriebsgeschwindigkeit doppelt so hoch sein.

Beispiel 3: Cache-Größen der Ebenen 1 und 2 (L1 und L2)
Moderne Prozessoren verfügen typischerweise über zwei oder drei Cache-Ebenen, die üblicherweise als L1, L2 und L3 bezeichnet werden. Um die Größe von Caches auf verschiedenen Ebenen herauszufinden, können Sie das Dienstprogramm CoreInfo oder die Windows-API-Funktion GetLogicalProcessorInfo verwenden. Beide Methoden liefern auch Informationen über die Cache-Zeilengröße für jede Ebene. Auf meinem Computer meldet CoreInfo 32 KB L1-Datencaches, 32 KB L1-Anweisungscaches und 4 MB L2-Datencaches. Jeder Kern verfügt über seine eigenen persönlichen L1-Caches, L2-Caches sind für jedes Kernpaar gemeinsam: Logische Prozessor-Cache-Zuordnung: *--- Datencache 0, Ebene 1, 32 KB, Zuordnung 8, Zeilengröße 64 *--- Befehlscache 0, Ebene 1, 32 KB, Assoc 8, LineSize 64 -*-- Datencache 1, Ebene 1, 32 KB, Assoc 8, LineSize 64 -*-- Befehlscache 1, Ebene 1, 32 KB, Assoc 8, LineSize 64 ** – Unified Cache 0, Level 2, 4 MB, Assoc 16, LineSize 64 –*- Data Cache 2, Level 1, 32 KB, Assoc 8, LineSize 64 –*- Instruction Cache 2, Level 1, 32 KB, Assoc 8, LineSize 64 ---* Datencache 3, Ebene 1, 32 KB, Assoc 8, LineSize 64 ---* Befehlscache 3, Ebene 1, 32 KB, Assoc 8, LineSize 64 --** Unified Cache 1, Level 2, 4 MB, Assoc 16, LineSize 64 Lassen Sie uns diese Informationen experimentell überprüfen. Gehen wir dazu unser Array durch und erhöhen jeden 16. Wert – eine einfache Möglichkeit, die Daten in jeder Cache-Zeile zu ändern. Wenn wir das Ende erreichen, kehren wir zum Anfang zurück. Schauen wir uns verschiedene Array-Größen an. Wir sollten einen Leistungsabfall feststellen, wenn das Array nicht mehr in Caches unterschiedlicher Ebenen passt. Der Code lautet: int Schritte = 64 * 1024 * 1024; // Anzahl der Iterationen int lengthMod = arr.Length - 1; // Arraygröße – Zweierpotenz

für (int i = 0; i (

// x & lengthMod = x % arr.Length, weil Zweierpotenzen

Arr[(i * 16) & lengthMod]++; ) Testergebnisse:

Auf meinem Rechner kommt es nach 32 KB und 4 MB – das sind die Größen der L1- und L2-Caches – zu spürbaren Leistungseinbußen.

Beispiel 4: Befehlsparallelität
Schauen wir uns nun etwas anderes an. Welche dieser beiden Schleifen wird Ihrer Meinung nach schneller ausgeführt? int Schritte = 256 * 1024 * 1024; int a = neues int;

For (int i = 0; i // second for (int i = 0; i Beispiel 5: Cache-Assoziativität Eine der wichtigsten Fragen, die beim Entwurf eines Caches beantwortet werden müssen, ist, ob Daten aus einem bestimmten Speicherbereich in jedem gespeichert werden können Cache-Zellen oder nur in einigen von ihnen. Drei mögliche Lösungen:

  1. Beim direkt zugeordneten Cache werden die Daten jeder Cache-Zeile im RAM nur an einem vordefinierten Cache-Speicherort gespeichert. Der einfachste Weg, die Zuordnung zu berechnen, ist: row_index_in_memory % number_of_cache_cells. Zwei Zeilen, die derselben Zelle zugeordnet sind, können sich nicht gleichzeitig im Cache befinden.
  2. Teilassoziativer Cache mit N Einträgen, jede Zeile kann an N verschiedenen Cache-Speicherorten gespeichert werden. Beispielsweise kann in einem Cache mit 16 Einträgen eine Zeile in einer der 16 Zellen gespeichert werden, aus denen die Gruppe besteht. Typischerweise teilen sich Zeilen mit gleichen niedrigstwertigen Indexbits eine Gruppe.
  3. Vollständig assoziativer Cache, jede Zeile kann an jedem Cache-Speicherort gespeichert werden. Die Lösung entspricht in ihrem Verhalten einer Hash-Tabelle.
Direkt zugeordnete Caches sind anfällig für Konflikte. Wenn beispielsweise zwei Zeilen um dieselbe Zelle konkurrieren und sich abwechselnd gegenseitig aus dem Cache verdrängen, ist die Effizienz sehr gering. Andererseits weisen vollständig assoziative Caches diesen Nachteil zwar nicht auf, sind aber sehr komplex und teuer in der Implementierung. Teilweise assoziative Caches sind ein typischer Kompromiss zwischen Implementierungskomplexität und Effizienz. Auf meinem Computer ist der 4 MB große L2-Cache beispielsweise ein teilweise assoziativer Cache mit 16 Einträgen. Der gesamte RAM ist entsprechend den niedrigstwertigen Bits ihrer Indizes in Zeilensätze unterteilt. Zeilen aus jedem Satz konkurrieren um eine Gruppe von 16 L2-Cache-Zellen.

Da der L2-Cache 65.536 Zellen (4 * 220/64) hat und jede Gruppe aus 16 Zellen besteht, haben wir insgesamt 4.096 Gruppen. Somit bestimmen die unteren 12 Bits des Zeilenindex, zu welcher Gruppe diese Zeile gehört (212 = 4.096). Infolgedessen teilen sich Zeilen mit Adressen, die ein Vielfaches von 262.144 (4.096 * 64) sind, dieselbe Gruppe von 16 Zellen und konkurrieren darin um Platz.

Damit die Effekte der Assoziativität wirksam werden, müssen wir ständig auf eine große Anzahl von Zeilen derselben Gruppe zugreifen, beispielsweise mithilfe des folgenden Codes: public static long UpdateEveryKthByte(byte arr, int K) (

const int rep = 1024 * 1024; // Anzahl der Iterationen

Stoppuhr sw = Stopwatch.StartNew();

For (int i = 0; i p += K; if (p >= arr.Length) p = 0; ) sw.Stop();

return sw.ElapsedMilliseconds;

) Die Methode inkrementiert jedes K-te Element des Arrays. Wenn wir am Ende angelangt sind, fangen wir wieder von vorne an. Nach einer ziemlich großen Anzahl von Iterationen (220) hören wir auf. Ich habe Läufe für verschiedene Array-Größen und K-Schrittwerte durchgeführt. Ergebnisse (blau – lange Laufzeit, weiß – kurz):

Blaue Bereiche entsprechen den Fällen, in denen der Cache bei ständigen Datenänderungen nicht in der Lage ist, alle erforderlichen Daten gleichzeitig aufzunehmen. Eine leuchtend blaue Farbe zeigt eine Betriebszeit von etwa 80 ms an, fast weiß - 10 ms.

Kommen wir zu den blauen Bereichen:

  1. Warum erscheinen vertikale Linien? Vertikale Linien entsprechen Schrittwerten, bei denen auf zu viele Zeilen (mehr als 16) aus einer Gruppe zugegriffen wird. Für diese Werte kann der 16-Einträge-Cache meines Computers nicht alle erforderlichen Daten aufnehmen.

    Einige der schlechten Schrittwerte sind Zweierpotenzen: 256 und 512. Betrachten Sie beispielsweise den Schritt 512 und ein 8-MB-Array. Mit diesem Schritt gibt es 32 Abschnitte im Array (8 * 220 / 262.144), die miteinander um Zellen in 512 Cache-Gruppen (262.144 / 512) konkurrieren. Es gibt 32 Abschnitte, aber für jede Gruppe gibt es nur 16 Zellen im Cache, sodass nicht genügend Platz für alle vorhanden ist.

    Andere Schrittwerte, die keine Zweierpotenzen sind, sind einfach unglücklich, was zu einer großen Anzahl von Treffern auf dieselben Cache-Gruppen führt und auch zum Erscheinen vertikaler blauer Linien in der Abbildung führt. An dieser Stelle sind Liebhaber der Zahlentheorie zum Nachdenken eingeladen.

  2. Warum brechen vertikale Linien an der 4-MB-Grenze? Wenn die Array-Größe 4 MB oder weniger beträgt, verhält sich der Cache mit 16 Einträgen wie ein vollständig assoziativer Cache, d. h. er kann alle Daten im Array ohne Konflikte aufnehmen. Es gibt nicht mehr als 16 Bereiche, die um eine Cache-Gruppe kämpfen (262.144 * 16 = 4 * 220 = 4 MB).
  3. Warum ist oben links ein großes blaues Dreieck zu sehen? Denn bei einem kleinen Schritt und einem großen Array ist der Cache nicht in der Lage, alle notwendigen Daten unterzubringen. Dabei spielt der Grad der Cache-Assoziativität eine untergeordnete Rolle; die Einschränkung hängt mit der Größe des L2-Caches zusammen. Bei einer Array-Größe von 16 MB und einem Schritt von 128 greifen wir beispielsweise auf jedes 128. Byte zu und ändern somit jede zweite Array-Cache-Zeile. Um jede zweite Zeile im Cache zu speichern, benötigen Sie 8 MB Cache, aber auf meinem Rechner habe ich nur 4 MB.

    Selbst wenn der Cache vollständig assoziativ wäre, könnten darin nicht 8 MB Daten gespeichert werden. Beachten Sie, dass wir im bereits besprochenen Beispiel mit einem Schritt von 512 und einer Array-Größe von 8 MB nur 1 MB Cache benötigen, um alle erforderlichen Daten zu speichern, dies ist jedoch aufgrund unzureichender Cache-Assoziativität nicht möglich.

  4. Warum nimmt die Intensität der linken Seite des Dreiecks allmählich zu? Die maximale Intensität tritt bei einem Schrittwert von 64 Byte auf, was der Größe der Cache-Zeile entspricht. Wie wir im ersten und zweiten Beispiel gesehen haben, kostet der sequentielle Zugriff auf dieselbe Zeile praktisch nichts. Nehmen wir an, mit einer Schrittweite von 16 Bytes haben wir vier Speicherzugriffe zum Preis von einem. Da die Anzahl der Iterationen in unserem Test für jeden Schrittwert gleich ist, führt ein billigerer Schritt zu einer kürzeren Laufzeit.
Die entdeckten Effekte bleiben bei großen Parameterwerten bestehen:

Cache-Assoziativität ist eine interessante Sache, die sich unter bestimmten Bedingungen manifestieren kann. Im Gegensatz zu den anderen in diesem Artikel behandelten Problemen ist es nicht so schwerwiegend. Es ist definitiv nicht etwas, das beim Schreiben von Programmen ständige Aufmerksamkeit erfordert.

Beispiel 6: Falsche Cache-Partitionierung
Auf Multi-Core-Rechnern kann ein weiteres Problem auftreten: die Cache-Kohärenz. Prozessorkerne verfügen über teilweise oder vollständig getrennte Caches. Auf meinem Rechner sind die L1-Caches getrennt (wie üblich), und es gibt auch zwei L2-Caches, die sich jedes Kernpaar teilt. Die Details können variieren, aber im Allgemeinen verfügen moderne Multi-Core-Prozessoren über mehrstufige hierarchische Caches. Darüber hinaus gehören die schnellsten, aber auch die kleinsten Caches zu einzelnen Kernen.

Wenn ein Kern einen Wert in seinem Cache ändert, können andere Kerne den alten Wert nicht mehr verwenden. Der Wert in den Caches anderer Kerne muss aktualisiert werden. Darüber hinaus muss die gesamte Cache-Zeile aktualisiert werden, da Caches mit Daten auf Zeilenebene arbeiten.

Lassen Sie uns dieses Problem mit dem folgenden Code demonstrieren: private static int s_counter = new int;

private void UpdateCounter(int position)

{

for (int j = 0; j ( s_counter = s_counter + 3; )

Wenn ich auf meiner Vierkernmaschine diese Methode mit den Parametern 0, 1, 2, 3 gleichzeitig von vier Threads aus aufrufe, beträgt die Laufzeit 4,3 Sekunden. Aber wenn ich die Methode mit den Parametern 16, 32, 48, 64 aufrufe, dann beträgt die Laufzeit nur 0,28 Sekunden. Warum? Im ersten Fall landen wahrscheinlich alle vier Werte, die zu einem bestimmten Zeitpunkt von Threads verarbeitet werden, in einer Cache-Zeile. Jedes Mal, wenn ein Kern einen Wert erhöht, markiert er Cache-Zellen, die diesen Wert in anderen Kernen enthalten, als ungültig. Nach diesem Vorgang müssen alle anderen Kernel die Zeile erneut zwischenspeichern. Dadurch wird der Caching-Mechanismus außer Betrieb gesetzt und die Leistung beeinträchtigt.

Beispiel 7: Hardwarekomplexität
Selbst jetzt, wo die Prinzipien des Cache-Betriebs für Sie kein Geheimnis mehr sind, wird die Hardware Sie immer noch überraschen. Prozessoren unterscheiden sich voneinander in Optimierungsmethoden, Heuristiken und anderen Feinheiten der Implementierung.

Der L1-Cache einiger Prozessoren kann auf zwei Zellen parallel zugreifen, wenn sie zu unterschiedlichen Gruppen gehören, aber wenn sie zur gleichen Gruppe gehören, nur sequentiell. Soweit ich weiß, können einige sogar parallel auf verschiedene Viertel derselben Zelle zugreifen.

Prozessoren können Sie mit cleveren Optimierungen überraschen. Beispielsweise funktioniert der Code aus dem vorherigen Beispiel zum falschen Cache-Sharing auf meinem Heimcomputer nicht wie vorgesehen – im einfachsten Fall kann der Prozessor die Arbeit optimieren und negative Auswirkungen reduzieren. Wenn Sie den Code ein wenig ändern, passt alles zusammen. Hier ist ein weiteres Beispiel für seltsame Hardware-Macken: private static int A, B, C, D, E, F, G;

private static void Weirdness()

{

for (int i = 0; i ( ) ) Wenn Sie drei verschiedene Optionen ersetzen, können Sie die folgenden Ergebnisse erhalten:

Das Erhöhen der Felder A, B, C, D dauert länger als das Erhöhen der Felder A, C, E, G. Was noch seltsamer ist, ist, dass das Erhöhen der Felder A und C länger dauert als das Erhöhen der Felder A, C und E, G. Ich weiß es nicht Klar, was sind die Gründe dafür, aber vielleicht hängen sie mit Speicherbänken zusammen (ja, mit gewöhnlichen Drei-Liter-Sparspeicherbänken und nicht mit dem, was Sie gedacht haben). Wenn Sie irgendwelche Gedanken zu diesem Thema haben, äußern Sie diese bitte in den Kommentaren.

Auf meinem Rechner wird das oben Gesagte nicht beobachtet, allerdings kommt es manchmal zu ungewöhnlich schlechten Ergebnissen – höchstwahrscheinlich nimmt der Taskplaner seine eigenen „Anpassungen“ vor.

Die Lehre aus diesem Beispiel ist, dass es sehr schwierig ist, das Verhalten von Hardware vollständig vorherzusagen. Ja, Sie können vieles vorhersagen, aber Sie müssen Ihre Vorhersagen kontinuierlich durch Messungen und Tests validieren.

Abschluss
Ich hoffe, dass alles, was oben besprochen wurde, Ihnen geholfen hat, das Design von Prozessor-Caches zu verstehen. Jetzt können Sie dieses Wissen in die Praxis umsetzen, um Ihren Code zu optimieren. * Der Quellcode wurde mit Source Code Highlighter hervorgehoben. Stichworte:

Einer der wichtigen Faktoren, die die Prozessorleistung steigern, ist das Vorhandensein von Cache-Speicher bzw. dessen Volumen, Zugriffsgeschwindigkeit und Verteilung auf die Ebenen.

Seit geraumer Zeit sind fast alle Prozessoren mit diesem Speichertyp ausgestattet, was einmal mehr die Nützlichkeit seines Vorhandenseins beweist. In diesem Artikel werden wir über die Struktur, die Ebenen und den praktischen Zweck des Cache-Speichers sprechen, was sehr wichtig ist. Prozessoreigenschaften.

Was ist Cache-Speicher und seine Struktur?

Cache-Speicher ist ein ultraschneller Speicher, der vom Prozessor zum vorübergehenden Speichern von Daten verwendet wird, auf die am häufigsten zugegriffen wird. So können wir diese Art von Erinnerung kurz beschreiben.

Der Cache-Speicher ist auf Flip-Flops aufgebaut, die wiederum aus Transistoren bestehen. Eine Gruppe von Transistoren nimmt viel mehr Platz ein als die gleichen Kondensatoren, aus denen sie besteht Rom. Dies bringt zahlreiche Produktionsschwierigkeiten sowie Mengenbeschränkungen mit sich. Aus diesem Grund ist Cache-Speicher ein sehr teurer Speicher, obwohl er über ein vernachlässigbares Volumen verfügt. Aber aus dieser Struktur ergibt sich der Hauptvorteil eines solchen Speichers – die Geschwindigkeit. Da Flip-Flops keine Regeneration benötigen und die Verzögerungszeit des Gates, auf dem sie montiert sind, gering ist, vergeht die Zeit zum Umschalten des Flip-Flops von einem Zustand in einen anderen sehr schnell. Dadurch kann der Cache-Speicher mit den gleichen Frequenzen wie moderne Prozessoren arbeiten.

Ein wichtiger Faktor ist auch die Platzierung des Cache-Speichers. Es befindet sich auf dem Prozessorchip selbst, was die Zugriffszeit erheblich verkürzt. Bisher befand sich der Cache-Speicher einiger Ebenen außerhalb des Prozessorchips, auf einem speziellen SRAM-Chip irgendwo auf der Hauptplatine. Mittlerweile verfügen fast alle Prozessoren über einen Cache-Speicher auf dem Prozessorchip.


Wofür wird der Prozessor-Cache verwendet?

Wie oben erwähnt, besteht der Hauptzweck des Cache-Speichers darin, Daten zu speichern, die häufig vom Prozessor verwendet werden. Der Cache ist ein Puffer, in den Daten geladen werden, und trotz seiner geringen Größe (ca. 4-16 MB) moderne Prozessoren Es sorgt für eine deutliche Leistungssteigerung in jeder Anwendung.

Um den Bedarf an Cache-Speicher besser zu verstehen, stellen wir uns vor, den Speicher eines Computers wie ein Büro zu organisieren. Beim RAM handelt es sich um einen Schrank mit Ordnern, auf den der Buchhalter regelmäßig zugreift, um große Datenblöcke (also Ordner) abzurufen. Und die Tabelle wird ein Cache-Speicher sein.

Auf dem Schreibtisch des Buchhalters liegen Elemente, auf die er im Laufe einer Stunde mehrmals Bezug nimmt. Dies können beispielsweise Telefonnummern oder einige Beispiele für Dokumente sein. Diese Art von Informationen befinden sich direkt auf dem Tisch, was wiederum den Zugriff darauf beschleunigt.

Auf die gleiche Weise können Daten aus diesen großen Datenblöcken (Ordnern) zur schnellen Verwendung, beispielsweise einem Dokument, zur Tabelle hinzugefügt werden. Wenn dieses Dokument nicht mehr benötigt wird, wird es zurück in den Schrank (in den RAM) gelegt, wodurch die Tabelle (Cache-Speicher) geleert und diese Tabelle für neue Dokumente freigegeben wird, die in der nächsten Zeit verwendet werden.

Auch beim Cache-Speicher gilt: Wenn es Daten gibt, auf die am wahrscheinlichsten erneut zugegriffen wird, werden diese Daten aus dem RAM in den Cache-Speicher geladen. Sehr oft geschieht dies durch das Mitladen der Daten, die am wahrscheinlichsten nach den aktuellen Daten verwendet werden. Das heißt, es gibt Annahmen darüber, was „danach“ verwendet wird. Das sind die komplexen Funktionsprinzipien.

Prozessor-Cache-Level

Moderne Prozessoren sind mit einem Cache ausgestattet, der häufig aus 2 oder 3 Ebenen besteht. Natürlich gibt es Ausnahmen, aber das ist oft der Fall.

Im Allgemeinen kann es folgende Ebenen geben: L1 (erste Ebene), L2 (zweite Ebene), L3 (dritte Ebene). Nun ein wenig mehr Details zu jedem von ihnen:

Cache der ersten Ebene (L1)– die schnellste Cache-Speicherebene, die direkt mit dem Prozessorkern zusammenarbeitet. Dank dieser engen Interaktion hat diese Ebene die kürzeste Zugriffszeit und arbeitet mit Frequenzen nahe dem Prozessor. Es handelt sich um einen Puffer zwischen dem Prozessor und dem Second-Level-Cache.

Wir werden Bände auf einem Hochleistungsprozessor Intel Core i7-3770K betrachten. Dieser Prozessor ist mit 4x32 KB L1-Cache ausgestattet, 4 x 32 KB = 128 KB. (32 KB pro Kern)

Cache der zweiten Ebene (L2)– Die zweite Ebene ist größer als die erste, weist jedoch dadurch geringere „Geschwindigkeitseigenschaften“ auf. Dementsprechend dient es als Puffer zwischen den Ebenen L1 und L3. Schauen wir uns noch einmal unseren Beispiel-Core i7-3770 K an, dann beträgt die L2-Cache-Speichergröße 4x256 KB = 1 MB.

Level-3-Cache (L3)– Die dritte Ebene ist wiederum langsamer als die beiden vorherigen. Aber es ist immer noch viel schneller als RAM. Die L3-Cache-Größe im i7-3770K beträgt 8 MB. Wenn die beiden vorherigen Ebenen von jedem Kern geteilt werden, gilt diese Ebene für den gesamten Prozessor. Der Indikator ist recht solide, aber nicht übertrieben. Denn beispielsweise bei Prozessoren der Extreme-Serie wie dem i7-3960X sind es 15 MB, bei einigen neuen Xeon-Prozessoren sogar mehr als 20.



 


Lesen:



Bewertung der besten kabellosen Kopfhörer

Bewertung der besten kabellosen Kopfhörer

Ist es möglich, universelle Ohren günstig zu kaufen? 3.000 Rubel – kann man für so viel Geld hochwertige Kopfhörer kaufen? Wie sich herausstellte, ja. Und Rede...

Die Hauptkamera eines Mobilgeräts befindet sich meist auf der Rückseite des Gehäuses und dient zum Aufnehmen von Fotos und Videos

Die Hauptkamera eines Mobilgeräts befindet sich meist auf der Rückseite des Gehäuses und dient zum Aufnehmen von Fotos und Videos

Eine aktualisierte Version des Tablets mit verbesserten Eigenschaften und hoher Autonomie. Acer-Smartphones werden selten besucht...

So wechseln Sie zu einem anderen Betreiber und behalten dabei Ihre Nummer

So wechseln Sie zu einem anderen Betreiber und behalten dabei Ihre Nummer

Das Gesetz zur Beibehaltung einer Telefonnummer beim Wechsel eines Teilnehmers zu einem anderen Mobilfunkanbieter ist in Russland am 1. Dezember in Kraft getreten. Es stellte sich jedoch heraus, dass...

Bewertung eines Phablets, teuer, aber sehr kompetent

Bewertung eines Phablets, teuer, aber sehr kompetent

Bewertung eines Phablets, teuer, aber sehr kompetent 20.03.2015 Ich bin der einzige Schuhmacher der Welt ohne Stiefel, ein Smartphone-Rezensent ohne eigenes Smartphone....

Feed-Bild RSS