Einzelnen Beitrag anzeigen

Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
44.184 Beiträge
 
Delphi 12 Athens
 
#21

AW: exakte Zeitmessungen auf Multiprozessoren

  Alt 18. Jul 2011, 10:24
Zitat:
wäre da nur nicht dieses lästige, zufällige hin- und herschalten zwischen den CPU's.
Es gibt nicht nur das Umgeschalte von threads zwischen den CPUs Kernen (MultiProzessor, also mehrere Prozessoren/CPUs/Chips auf einem Mainboard, hat ja kaum jemand), welches man ja abschalten kann (wie drüben shcon jemand sagte), sondern auch noch das zwischen den Threads insgesammt, welches man nicht so leicht beeinflussen kann.
Man kann höchstens seinen Thread an einen Kern binden und muß alle anderen Threads von diesem Kern bannen. (du wirst nur nicht auf alle Threads Zughrif haben und neuerstelle Threads gehen dir schnell mal durch die Lappen)

Da Windows (und bestimmt auch Linux, Mac und co.) überall Fensterorientiert arbeitet, kann man solche Zeiteinheiten nahezu vergessen.
Die Programme Threads werden in Zeitfenstern abgearbeit, also ein paar Millisekunden für diesen Thread, dann wieder ein paar für einen anderen Thread.
Wie diese Zeitfenster verteilt sind, verrät Windows nicht ... es wird nur gesagt, daß dieses sich dynamisch je nach Prozessorauslastung anders verhält. (wieviele Kerne, wer wo laufen darf und wieviel die Threads grade arbeiten und dann wird noch verteilt wer gerade auf welchem Kern arbeitet)

Zitat:
> ...
> Start der Messung
> bissl messen
> Ende des Zeitfensters


> andere Threads werden bearbeitet (das kann ja mehrere Millisekunden dauern)


> Start des nächsten Zeitfensters
> bissl messen
> Ende der Messung
> ...

Und schon kannst du deine Microsekunden vergessen


Das Einzige was geht, und das auch nur, wenn der Messvorgang kürzer ist als das verfügbare Zeitfenser.

Zitat:
> ...
> Threadverarbeitung abgeben (Zeitfenster vorzeitig beenden)


> andere Threads werden bearbeitet (das kann ja mehrere Millisekunden dauern)


> Start des neuen Zeitfensters (ab hier steht ja ein volles Zeitfenster für die nchfolgenden Befehle zur Verfügung)
> Start der Messung
> was sehr Kurzes machen
> Ende der Messung
> ...
Zur Messung externer Dinge ist sowas aber nicht geeignet.


Windows ist nunmal (standardmäßig) kein RealTimeSystem.

Was man machen kann, wenn man schnell auf etwas Reagieren muß/will ist, mit Interrupts zu arbeiten (also quasi auf Treiberebene)
$2B or not $2B

Geändert von himitsu (18. Jul 2011 um 10:30 Uhr)
  Mit Zitat antworten Zitat