PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : CPU-Geschwindigkeit über Timer berechnen?



shutdown
28-01-2008, 22:05
Hi,

gibt es eine Möglichkeit, mit einem C-Programm unter Linux die Geschwindigkeit der CPU (in MHz) selber zu berechnen?
Ich habe mir gedacht es müsste eigentlich möglich sein wenn man das Programm mittels nanosleep o.ä. anhält und dann die Zeit über TSC ausliest - allerdings ist TSC seit es im Linux-Kernel dynamische Ticks gibt ja nicht mehr für sowas zu gebrauchen, oder?

Falls von euch da jemand was weiss wäre es echt super, die Lösung muss auch nicht 100% genau sein - mich würde nur brennend interessieren ob man das hinkriegt :D

Danke schonmal,

Peter

Hun
22-02-2008, 21:14
Das wird sehr schwer bis nicht moeglich, da deine cpu u.a. auch ne menge intern parallelisiert. Bei nem 486er wuerde dieser ansatz noch funktionieren, danach is so ziemlich alles multi-issue ;)

shutdown
23-02-2008, 11:53
Gibt es vielleicht eine andere Lösung die CPU-Geschwindigkeit zu ermitteln? (Ohne sie einfach irgendwo über das Betriebssystem auszulesen)

Auf jeden Fall Danke für die Info!

panzi
25-02-2008, 16:13
Lass ein Programm in einer Endlosschleife mit möglichst 100% CPU-Last für eine bestimmte Zeit laufen. Also nicht wirklich eine Endlosschleife dann. Ermittle wieviele Zyklen pro Schleifendurchlauf abgearbeitete werden: Entweder schreibs in Assembler und schau in ner Spec. nach wieviele Zyklen die einzelnen Befehle dauern oder schreibs gleich in Assembler. Würde zu letzten Raten da es auch Befehle gibt die u.U. keine konstante zahl an Zyklen benötigen. Diese kannst dann vermeiden. SChau dann nach wieviele Zyklen in der geg. Zeit geschafft wurden. Daraus kannst du dir einen ungefähren Wert für die Taktrate der CPU errechnen. Also einfach eine Zählschleife die per Signal irgendwann unterbrochen wird. Der Signalhandler gibt dann den Zähler aus oder so. Der Prozess sollte mit einer hohen Priorität gestartet werden und es sollten möglichst ansonsten keine Prozesse im Hintergrund laufen. (Single user shell mode würde ich vorschlagen.)

kA ob das so funktioniert, ist aber ein Ansatz.