Du bist nicht angemeldet.

Stilllegung des Forums
Das Forum wurde am 05.06.2023 nach über 20 Jahren stillgelegt (weitere Informationen und ein kleiner Rückblick).
Registrierungen, Anmeldungen und Postings sind nicht mehr möglich. Öffentliche Inhalte sind weiterhin zugänglich.
Das Team von spieleprogrammierer.de bedankt sich bei der Community für die vielen schönen Jahre.
Wenn du eine deutschsprachige Spieleentwickler-Community suchst, schau doch mal im Discord und auf ZFX vorbei!

Werbeanzeige

David Scherfgen

Administrator

Beiträge: 10 382

Wohnort: Hildesheim

Beruf: Wissenschaftlicher Mitarbeiter

  • Private Nachricht senden

11

12.06.2007, 22:03

Jo, man sollte virtuelle Methoden nur nicht für sowas wie Vektoren benutzen ;)

Faule Socke

Community-Fossil

Beiträge: 1 915

Wohnort: Schreibtischstuhl

  • Private Nachricht senden

12

19.06.2007, 21:01

Zitat von »"David Scherfgen"«

Hier muss die Sprungvorhersage gut funktionieren, damit die Pipeline nicht leerläuft.


Was würde denn passieren, wenn die pipeline leer läuft? hab das schon öfter gelesen. aber warum muss man den sprung denn überhaupt vorhersagen? Es muss doch nur die Adresse der Funktion aus der vtb/pl(David_pb benutzt irgendwie beide schreibweisen^^; warscheinlich steht das eine für table und das andere für pointer oder es ist ein tippfehler) gelesen werden und dann muss die funktion angesprungen werden. kling für mich nach 2 cpu takten(adresse laden; springen;). Ich blick das ganze irgendwie net...


Socke

David Scherfgen

Administrator

Beiträge: 10 382

Wohnort: Hildesheim

Beruf: Wissenschaftlicher Mitarbeiter

  • Private Nachricht senden

13

19.06.2007, 21:08

Ein Prozessor verarbeitet Befehle schrittweise, und zwar immer mehrere gleichzeitig. Jeder Befehl wandert durch die Pipeline durch. Im Optimalfall ist jede Pipeline-Stufe immer ausgelastet. Bei modernen Prozessoren ist die Pipeline ganz schön lang.
Wenn jetzt ein bedingter Sprung kommt oder ein Sprung auf eine Adresse, die noch nicht feststeht, weil sie erst berechnet werden muss (wie bei einer virtuellen Methode), dann muss der Prozessor "ahnen", welche Instruktionen er als Nächstes schonmal in die Pipeline schicken soll. Das macht die Sprungvorhersageeinheit (Branch Prediction). Wenn er richtig schätzt, ist alles gut, und die Pipeline bleibt ausgelastet. Aber wenn er sich vertut und die falschen Instruktionen anfängt zu bearbeiten, dann läuft die Pipeline zwangsweise leer, da sie von der neuen - korrekten - Adresse an wieder gefüllt werden muss ... und das kostet viele Taktzyklen! Je länger die Pipeline, desto teurer ist das.

Faule Socke

Community-Fossil

Beiträge: 1 915

Wohnort: Schreibtischstuhl

  • Private Nachricht senden

14

19.06.2007, 21:12

Und was passiert, wenns den instructions cache zusammenhaut?(klingt nach bluescreen, kann ich mir aber net vorstellen) wird der dann auch einfach wieder gefüllt?

Steven77

Alter Hase

Beiträge: 515

Wohnort: Münster - Gievenbeach

Beruf: Wissenschaftlicher Mitarbeiter

  • Private Nachricht senden

15

20.06.2007, 11:39

Zitat von »"Faule Socke"«

Und was passiert, wenns den instructions cache zusammenhaut?(klingt nach bluescreen, kann ich mir aber net vorstellen) wird der dann auch einfach wieder gefüllt?

Ich weiß zwar nicht, was Du damit meinst, dass der Instructions-Cache "zusammengehauen" werden soll, aber so, wie ich es verstehe, hat doch genau das David beschrieben: Der Cache wird soweit gefüllt, wie es geht. Wenn unvorhersagbarer Code an den Start geht, kann es halt zu "Verschwendungen" der Pipeline kommen.

Zitat von »"Faule Socke"«

kling für mich nach 2 cpu takten(adresse laden; springen;)

Das ist übrigens eine absolut falsche Annahme, dass eine (ASM-) Anweisung genau einen Takt beansprucht. Das ist in den seltensten Fällen gegeben.

Aber nicht, dass das jemand falsch versteht: Das soll keinesfalls eine Argumentation gegen die Verwendung von virtuellen Methoden darstellen. Vielleicht lediglich ein Hinweis darauf, drüber nachzudenken, ob sie denn wirklich gebraucht werden.
Kommen Sie nie mit einem Schwert zu einer Schießerei.

Werbeanzeige