Forum: PC-Programmierung Wie kann man die Taktrate Intel-kompatibler Chips ermitteln?


von Alisa 1387 (Gast)


Lesenswert?

Ich möchte das Time Stamp Register nutzen, um (per Offset) zu messen, ob
ein bestimmter Zeitraum überschritten wurde. Dazu muß ich allerdings
erst einmal herausfinden, wie oft das Register pro Sekunde
weitergezählt wird (also die Taktrate des Prozessors, auf dem das
Programm gestartet wird).

Wie kann ich effektiv ermitteln, wie viele Cycles die CPU pro sekunde
reißt?

Was benutzt die timer.h, um das Time Stamp Register in Bezug zur
wirklichen Zeit zu setzen?

(Ich bin C-Anfänger und möchte für meinen Anwendungsfall lieber einen
Inline-Assembler Code erzeugen, anstatt die timer.h einzubinden. Im
schlimmsten Fall müsste ich die timer.h trotzdem einbinden und die
abgelaufenen cycles einer Sekunde ermitteln, doch elegant wäre das
sicher nicht)

von Alisa 1387 (Gast)


Lesenswert?

Ein programmierbarer Hardware-Timer würde übrigens auch helfen, doch im
"Intel Architecture Software Developer´s Manual Vol. 2" (über das
instruction set) konnte ich keinen solchen finden.

von Rufus Τ. F. (rufus) Benutzerseite


Lesenswert?

Wenn Du mit "intel-kompatibel" einen x86-Prozessor meinst, dann gibt
es immer noch den Standardtimer 8254 von Intel, der in eigentlich jedem
PC-kompatiblen Hardwaredesign seit den frühen 80er Jahren vorhanden ist
...

Im Befehlssatz des Prozessors hat die Beschreibung dieses Bausteines
nichts verloren, deshalb wirst Du sie darin auch nicht finden. Ein
Prozessor im klassischen Sinne enthält keinerlei Peripherie und
unterscheidet sich gerade darin vom Controller.

von Alisa 1387 (Gast)


Lesenswert?

Ach so, also möchte ich einen externen Baustein ansprechen. Ist der
Timer

1.) aus dem Adressraum der CPU ansprechbar oder hängt er an einem
externen Bus?

2.) zwecks Kompatibilität immer an der gleichen Adresse angeschlossen?

von Alisa 1387 (Gast)


Lesenswert?

Wahrscheinlich wird das Ding über irgendwelche Treiber angesteuert?
hilfe

von Alisa 1387 (Gast)


Lesenswert?

Wenn ich ne externe Wordclock über einen Treiber einbinde, dann kann ich
per Time Stamp die "in realtime" verfügbaren cycles zwischen zwei
Samples ermitteln. Wenn schon Treiber, dann wenigstens mit ner
vernünftigen Clock ;)

von Rufus Τ. F. (rufus) Benutzerseite


Lesenswert?

Der 8254 ist in PCs üblicherweise im I/O-Adressraum bei den Adressen
0x40..43 oder 0x50..53 zu finden.

Der I/O-Adressraum ist bei x86-Prozessoren vom normalen
Arbeitsspeicher-Adressraum getrennt und auch nur 64 kByte groß.

Unter was für einer Betriebssystemumgebung und auf exakt was für einer
Hardware versuchst Du Deine Erkenntnisse zu gewinnen?

von Rolf Magnus (Gast)


Lesenswert?

> Ich möchte das Time Stamp Register nutzen, um (per Offset) zu
> messen, ob ein bestimmter Zeitraum überschritten wurde.

Das ist aber recht unzuverlässig. Bei Multiprozessorsystemen läuft ein
Prozess mal auf dem einen, mal auf dem anderen Prozessor. Und bei
vielen Notebooks (und teils auch bei Desktops) gibt's eine dynamische
Änderung der Taktfrequenz.
Deshalb hat jeder PC auch einen Timer mit eigenem festem Takt. Dadurch
braucht man sich um sowas nicht zu kümmern.

> Wie kann ich effektiv ermitteln, wie viele Cycles die CPU pro
> sekunde reißt?

Man nutzt die entsprechende Betriebssystemfunktionalität.

> Was benutzt die timer.h, um das Time Stamp Register in Bezug zur
> wirklichen Zeit zu setzen?

Was ist "die timer.h"?

> (Ich bin C-Anfänger und möchte für meinen Anwendungsfall lieber
> einen Inline-Assembler Code erzeugen, anstatt die timer.h
> einzubinden.

Warum?

> Wahrscheinlich wird das Ding über irgendwelche Treiber
> angesteuert?

Kommt drauf an. Jedes ernstzunehmende Betriebssystem lässt ein normales
Programm nicht direkt auf die Hardware zugreifen. Normalerweise bieten
die Systeme auch umfangreiche Funktionen für's Timing an. Was spricht
dagegen, die zu nutzen?

von Andreas (Gast)


Lesenswert?

Jede ernst zu nehmende Hardware hat einen HPET.
Infos zu den diversen Timer- und Timerkrücken hier:

http://www.microsoft.com/whdc/system/CEC/mm-timer.mspx?pf=true#img3

von Alisa 1387 (Gast)


Lesenswert?

> Was ist "die timer.h"?

ein include-file


> Kommt drauf an. Jedes ernstzunehmende Betriebssystem lässt ein
> normales Programm nicht direkt auf die Hardware zugreifen.
> Normalerweise bieten die Systeme auch umfangreiche Funktionen für's

> Timing an. Was spricht dagegen, die zu nutzen?

Ich möchte PCs für realtime mißbrauchen. DOS ist also raus und außerdem
mag ich keine Betriebssysteme, welche nicht gleichzeitig das
Anwendungs-Programm sind. Also möchte ich nur das nötigste mit Linux
booten, sofern es möglich ist, eine Applikation zu schreiben, welches
eine vorhersehbare DSP Performance liefert und dem nicht vom
"Betriebssystem" die Prozess-Priorität genommen wird.

von Tobi H. (tobi-) Benutzerseite


Lesenswert?

"ein include-file"
Ach wirklich?

"Ich möchte PCs für realtime mißbrauchen."
Das wird unter keinem normalen OS absolut berechenbar sein, du wirst
nirgendwo die CPU für dich alleine haben.

"DOS ist also raus"
Und warum?

von Alisa 1387 (Gast)


Lesenswert?

>> "Ich möchte PCs für realtime mißbrauchen."
>> Das wird unter keinem normalen OS absolut berechenbar sein, du >> >>
wirst nirgendwo die CPU für dich alleine haben.

Es gibt jedoch diverse Hardware Geräte mit Realtime-Stempel, welche ein
modifiziertes (abgespecktes) Linux nutzen. Findest Du die alle kacke
oder warst Du dir dessen nicht bewusst?



>> "DOS ist also raus"
>> Und warum?

Gibt´s dazu ein (verständliches) Source-File und ne Doku der einzelnen
Programmteile? Unmodifiziert wird das jedenfalls nix, MS DOS ist
ziemlich genau das Gegenteil von Realtime.

von Alisa 1387 (Gast)


Lesenswert?

>> Bei Multiprozessorsystemen läuft ein Prozess mal auf dem einen, >>
mal auf dem anderen Prozessor.

Das Time Stamp Register erfährt beim Systemstart eine Reset.
Funktioniert das Hardware-Inkrement des Time Stamp durch das Quarz
nicht, wenn ein Prozessor etwas berechnet und laufen die zwei Time
Stamps dann auseinander, oder was genau ist deine Aussage?


> Und bei vielen Notebooks (und teils auch bei Desktops) gibt's eine >
dynamische Änderung der Taktfrequenz.

Ich möchte ja nicht, daß es auf einer beliebigen Hardware läuft oder
auch nicht richtig, bin ja nicht MS oder Apple.

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.