it-swarm-eu.dev

Warum gibt es separate L1-Caches für Daten und Anweisungen?

Ich habe gerade einige Folien durchgesehen und festgestellt, dass der L1-Cache (zumindest auf Intel-CPUs) zwischen Daten- und Anweisungscache unterscheidet. Ich würde gerne wissen, warum dies so ist.

23
Nils

Es gibt tatsächlich mehrere Gründe.

In erster Linie unterscheiden sich die im Anweisungscache gespeicherten Daten im Allgemeinen etwas von den im Datencache gespeicherten Daten. Neben den Anweisungen selbst gibt es Anmerkungen für Dinge wie den Beginn der nächsten Anweisung, um den Decodern zu helfen. Einige Prozessoren (z. B. Netburst, einige SPARCs) verwenden einen "Trace-Cache", der das Ergebnis der Decodierung eines Befehls speichert, anstatt den ursprünglichen Befehl in seiner codierten Form zu speichern.

Zweitens vereinfacht es die Schaltung ein wenig - der Datencache muss sich mit Lese- und Schreibvorgängen befassen, aber der Befehls-Cache befasst sich nur mit Lesevorgängen. (Dies ist ein Teil dessen, warum selbstmodifizierender Code so teuer ist - anstatt die Daten im Befehls-Cache direkt zu überschreiben, geht der Schreibvorgang durch den Daten-Cache in den L2-Cache, und dann wird die Zeile im Befehls-Cache ungültig und erneut -geladen von L2).

Drittens wird die Bandbreite erhöht: Die meisten modernen Prozessoren können gleichzeitig Daten aus dem Anweisungscache und dem Datencache lesen. Die meisten haben auch Warteschlangen am "Eingang" zum Cache, so dass sie tatsächlich zwei Lese- und einen Schreibvorgang in einem bestimmten Zyklus ausführen können.

Viertens kann es Strom sparen. Während Sie die Speicherzellen selbst mit Strom versorgen müssen, um ihren Inhalt zu erhalten, können einige Prozessoren einige der zugehörigen Schaltkreise (Decoder usw.) ausschalten, wenn sie nicht verwendet werden. Mit separaten Caches können sie diese Schaltkreise separat für Anweisungen und Daten einschalten, was die Wahrscheinlichkeit erhöht, dass ein Schaltkreis während eines bestimmten Zyklus nicht mit Strom versorgt wird (ich bin mir nicht sicher, ob x86-Prozessoren dies tun - AFAIK, es ist eher ein = ARM Sache).

28
Jerry Coffin

Genau wie bei Immobilien wird die Cache-Nutzung von drei Faktoren bestimmt: Standort, Standort, Standort. Der springende Punkt bei einem Cache ist, dass die meisten Programme Standortmuster aufweisen: Wenn sie auf das Byte 1111111 zugreifen, ist das nächste Byte, auf das sie zugreifen, wahrscheinlich 1111110 oder 1111112 und nicht so viel Byte 9999999. Die meisten Programme weisen jedoch sehr unterschiedliche Merkmale auf Standortmuster für ihre Anweisungen und ihre Daten. Dies bedeutet, dass es unwahrscheinlich ist, dass die Anweisungen und Daten den Cache effizient gemeinsam nutzen können. Weil Anweisungen und Daten im Speicher nicht unbedingt nahe beieinander liegen. Ein Datenzugriff würde Anweisungen aus dem Cache stoßen, und Ladeanweisungen würden Daten aus dem Cache stoßen.

5