Was ist Prefetching?

killuah

Semiprofi
Thread Starter
Mitglied seit
27.02.2007
Beiträge
5.879
Ort
NRW
Hm, ja die Frage sagt wohl alles.

Habe mir den kurzen Wikipedia Artikel mehrmals durchgelesen.

Daraus verstehe ich, dass Speicherinhalte in der Speicherhierarchie aufwärts geschickt werden, da sie von dort aus schneller bearbeitet werden können.

Ich schätze das wäre die Grundaussage.

Jedoch verstehe ich den Artikel kaum, da vorallem das Wort heuristik mir probleme bereitet.

Kennt ihr Seiten, wo das Prefetching genauer erklärt ist? Oder bedarf es keiner genaueren erklärung? Ich verstehe den Artikel so, dass man es einfach so macht, um Geschwindkeit zu erhöhen - es ist einfach so, dass es so schneller ist.

Verwirrt mich irgendwie, und ich würde gerne mal wissen, WAS da nun genau passiert.

Mein Kopf :wall:

Heute 6 Stunden ohne wirkliche Pause am Referat geackert :fresse:
 
Wenn Du diese Anzeige nicht sehen willst, registriere Dich und/oder logge Dich ein.
Im englischen Wikipedia ist das m.E. gut erklärt:
http://en.wikipedia.org/wiki/Instruction_prefetch

Prinzipiell sollte dir bewusst sein das die CPU schneller arbeitet als der Speicher.
Außerdem bekommt die CPU Daten zu Abarbeitung "geschickt". Werden erst neue Daten angefordert/nachgeladen wenn die aktuelle Abarbeitung abgeschlossen ist muss die CPU in der "Nachladezeit" für die neuen Daten Däumchendrehen.

Um solche Wartezeiten zu vermeiden werden proaktiv schon mal Daten in den Cache der CPU geladen, damit diese immer mit genug Arbeit versorgt ist und nicht, bedingt durch das Nachladen von neuen Daten, zum stillstand kommt.
Nun wiederum stellt sich die Frage welche Daten wird die CPU in der Zukunft benötigen?
Denn lade ich Daten in den Cache die nachher nicht benötigt werden, treten wieder oben beschriebene Wartezyklen auf - unschön.
Genau hier setzt die Heuristik an, sie versucht mathematisch zu bestimmen welche Daten als nächstes benötigt werden und stellt diese der CPU zur Verfügung. Je besser der Heuristik-Algorithmus funktioniert desto weniger Wartezeiten treten auf und die CPU wird effektiv besser ausgelastet und somit "schneller".
 
Zuletzt bearbeitet:
BiosTauBaer hat's schon recht gut umrissen.

Die Heuristik kommt hauptsächlich dann ins Spiel, wenn der Prozessor Bedingungen abprüft, z.B. in einer Schleife. Der Rechner hat schließlich keine Ahnung vom größeren Ganzen rund um das Programm und wenn dann etwas kommt wie:

Code:
for(int i = 0; i < abbruchBedingung; i++) {
// abbruchBedingung ist hier eine irgendwo vorher initialisierte Variable
  tueSachen();
}

tueAndereSachen();

stellt sich für den Prozessor jedes Mal beim Überprüfen ob die Abbruchbedingung erfüllt ist von neuem die Frage: Soll er die Instruktionen für tueSachen() im Cache behalten oder soll er die für für tueAndereSachen() laden?
Der Prozessor benutzt sog. Branch Prediction um abzuschätzen, welche Daten in den Cache sollen.
Schätzt er falsch ab, müssten z.B. die Instruktionen für tueAndereSachen() aus dem RAM geholt werden, was einige Hundert Taktzyklen dauert und der Prozessor verharrt solange untätig.
 
Hardwareluxx setzt keine externen Werbe- und Tracking-Cookies ein. Auf unserer Webseite finden Sie nur noch Cookies nach berechtigtem Interesse (Art. 6 Abs. 1 Satz 1 lit. f DSGVO) oder eigene funktionelle Cookies. Durch die Nutzung unserer Webseite erklären Sie sich damit einverstanden, dass wir diese Cookies setzen. Mehr Informationen und Möglichkeiten zur Einstellung unserer Cookies finden Sie in unserer Datenschutzerklärung.


Zurück
Oben Unten refresh