2016-07-29 20 views
0

Ich lese "Computer-Organisation und Design der Hardware/Software-Schnittstelle" in der spanischen Ausgabe, und ich habe in eine Übung geraten, die ich nicht lösen kann. Die Übung befasst sich mit der Speicherhierarchie, speziell mit Caches.CPU-Cache-Trefferzeit

Die Übung sagt:

Wenn 2,5 ns erforderlich sind Etiketten für den Zugriff auf in einem N-Wege-Assoziativ-Cache, 4 ns für Zugriffsdaten, 1 ns für die Treffer-/Ausfall Vergleichs- und 1 ns die Daten zurückzugeben, im Erfolgsfall vom Prozessor ausgewählt.

  1. Der kritische Pfad in einem Cache-Treffer ist durch die Zeit gegeben, um zu bestimmen, ob es Erfolg oder Zeitdatenzugriff gab?

  2. Wie hoch ist die Trefferlatenz des Cache? (erfolgreicher Fall).

  3. Was wäre die Latenz des Erfolgs im Cache, wenn sowohl die Zugriffszeit auf Labels als auch die Datenmatrix 3 ns beträgt?

Ich werde versuchen, die Fragen mit allen über Erinnerungen, die ich weiß, zu beantworten.

Um auf eine im Cache gespeicherte Daten zugreifen zu können, muss ich als Erstes die Zeile mit dem Indexfeld einer Adresse suchen. Sobald das Speichersystem die Zeile gefunden hat, muss ich das Label-Feld meiner Adresse mit dem Label-Feld des Caches vergleichen. Wenn sie übereinstimmen, dann ist es ein Treffer, und ich muss die Daten zurückgeben und eine Datenmenge in der durch das Offset-Feld der Adresse bestimmten Zeile verschieben und dann die Daten an den Prozessor zurückgeben.

Das bedeutet, dass der Cache 8.5 ns dauert. Aber ich habe auf eine andere Art gedacht, dass Chaches es tun können: Wenn ich die gewünschte Zeile (2,5 ns) bekomme, kann ich nun auf die Daten zugreifen, und parallel dazu kann ich die Bedingung von iquality auswerten. Also, die Zeit wird 4.5 ns sein. Eines davon ist das Ergebnis der zweiten Frage. Welches dieser Ergebnisse ist richtig?

Für die erste Frage wird der kritische Pfad der Vorgang sein, der die größere Zeit benötigt; Wenn der Cache 4.5 benötigt, um die Daten zu erhalten, greift der kritische Pfad auf die Etiketten im Cache zu - Vergleich - gibt die Daten zurück. Ansonsten wird es der gesamte Prozess sein.

Für die letzte Frage, wenn der kritische Pfad der gesamte Prozess ist, dann dauert es 8ns. Sonst dauert es 5ns (Etikettenzugriff im Cache, Vergleich, Rückgabe der Daten).

Dies ist wahr? Und was ist mit einem voll assoziativen Cache ?, und einem direkten Mapping-Cache?

Das Problem ist, dass ich nicht weiß, welche Dinge der Cache zuerst und was als nächstes oder parallel tun.

Antwort

1

Wenn der Text nichts darüber aussagt, ob es sich um einen Cache in einem Uniprozessorsystem/Multiprozessorsystem handelt oder was der Cache parallel macht, kann man davon ausgehen, dass er den gesamten Prozess im Falle eines Cachetreffers durchführt. Instinktiv denke ich, dass es keinen Sinn macht, auf die Daten zuzugreifen und Treffer/Miss parallel zu vergleichen, was ist, wenn es ein Miss ist? Dann ist der Datenzugriff unnötig und Sie erhöhen die Latenz des Cache-Fehltreffers.

So dann Sie die folgende Sequenz im Fall eines Cache-Treffer erhalten:

  1. Access-Label (2,5 ns)
  2. Vergleich Hit/Miss (1 ns)
  3. Zugriff auf die Daten (4 ns)
  4. kehren die Daten an das Programm, um es (1 ns) anfordernden

Total: 2,5 + 1 + 4 +1 = 8. 5 ns

Mit dieser Sequenz erhalten wir (wie Sie bereits jetzt) ​​die folgenden Antworten auf die Fragen:

  1. Antwort: Der kritische Pfad in einem Cache-Treffer ist auf die Daten zugreifen und sendet es 4 + 1 = 5 (ns), verglichen, ob die Cache-Suche um zu bestimmen, war ein voller Erfolg: 2,5 + 1 = 3,5 (ns)

  2. Antwort: 8.5ns

  3. Antwort: + 3 + 1 3 + 1 = 8 ns

Wenn ich die gewünschte Linie (2,5 ns) erhalten dann jetzt ich de Daten zugreifen können, und parallel, kann ich beurteilen die Zustand der Qualität. Also, die Zeit wird 4,5 ns sein

Ich sehe nicht, wie Sie 4.5ns bekommen? Wenn Sie annehmen, dass der Zugriff von Daten und der Treffer/Fehler-Vergleich parallel ausgeführt wird, erhalten Sie: 2.5 + 4 + 1 = 7ns im Falle eines Cache-Treffers. Sie würden auch 7ns im Falle eines Cache-Miss erhalten, verglichen mit dem, wenn Sie nicht auf Speicher zugreifen, bis Sie wissen, ob es ein Cache-Miss ist, dann erhalten Sie eine Fehllatenz von 2.5 +1 = 3.5ns, was es sehr unwirksam macht zu versuchen, den Treffer/Miss-Vergleich mit dem Datenzugriff zu parallelisieren.

Wenn Sie davon ausgehen, dass der Zugriff des Labels und der Hit/Miss-Vergleich parallel zum Datenzugriff erfolgt, erhalten Sie: 4 + 1 = 5ns im Falle eines Cache-Treffers.

Natürlich kann man nicht die Daten parallel Rückkehr mit den Daten zu holen, aber wenn man das möglich vorstellen kann und Zugriff auf das Etikett und Vergleich tun und die Daten parallel Rückkehr mit Zugriff auf die Daten dann Sie bekommen : 2,5 + 1 + 1 = 4,5 ns.

Was ist mit einem vollständig zugeordneten Cache ?, und einem direkten Mapping-Cache?

Ein N-Wege-Assoziativ-Cache-Speicher (wie die Frage bezieht) ist ein vollständig assoziativer Cache. Dies bedeutet, dass Cache-Blöcke irgendwo im Cache platziert werden können. Daher ist es sehr flexibel, aber es bedeutet auch, dass wir, wenn wir eine Speicheradresse im Cache suchen wollen, das Tag mit jedem Block im Cache vergleichen müssen, um zu wissen, ob die Speicheradresse, nach der wir suchen, zwischengespeichert ist. Folglich erhalten wir eine langsamere Nachschlagezeit.

In einem direkt zugeordneten Cache kann jeder Cache-Block nur an einer Stelle im Cache abgelegt werden. Dieser Punkt wird berechnet, indem die Speicheradresse betrachtet und der Indexteil der Adresse berechnet wird. Daher kann ein direkt abgebildeter Cache sehr schnelle Suchvorgänge ermöglichen, ist jedoch nicht sehr flexibel. Abhängig von der Cache-Größe können Cache-Blöcke sehr oft ersetzt werden.

Die Terminologie in der Frage ist ein wenig verwirrend, "Label" wird normalerweise "Tag" genannt, wenn man von CPU-Caches spricht.

+1

Ausgezeichnete Antwort!, Danke –