Wie kann eine CPU ihre Taktfrequenz dynamisch ändern?

Meine Intel-CPU ändert die Taktrate je nach Nutzung, aber wie entscheidet sie, mit welcher Taktrate sie läuft? Wird die Taktrate von der Betriebssystemsoftware mithilfe eines Algorithmus bestimmt oder ist sie hardwarebasiert? Ist es abhängig von der Anzahl der Interrupts? Der Cache-Umsatz? Stellt die CPU selbst ihre eigene Uhr? Oder stellt das ein separater Controller ein? Oder Software?

Welche CPU ist es? Eingebettete Systeme funktionieren normalerweise nicht so.
Vielleicht eher etwas für SuperUser ?
Einige eingebettete Prozessorfamilien, wie etwa PIC24F, haben programmierbare Taktraten, und dies kann zum Energiesparen verwendet werden. Damit der Takt für zeitkritische Peripheriegeräte stabil bleibt, kann ein externer Oszillator verwendet werden.

Antworten (2)

Der Kerntakt der CPU wird nicht direkt vom Mainboard empfangen. Dieser Takt ist normalerweise viel langsamer (oft um den Faktor 10 oder mehr) als die interne Frequenz der CPU. Stattdessen wird das Taktsignal von der Hauptplatine als Referenzfrequenz für einen phasenverriegelten Oszillator mit höherer Frequenz innerhalb der CPU verwendet. Der erzeugte Takt läuft mit einem Vielfachen des Referenztakts, und dieses Vielfache kann geändert werden, indem bestimmte Register in der CPU gesetzt werden. Die eigentliche Generierung der Uhr erfolgt rein in Hardware.

Um die Leistung noch weiter zu reduzieren, signalisiert die CPU auch dem Spannungsregler, der ihre Kernspannung liefert, mit einem niedrigeren Sollwert zu laufen. Bei niedrigeren Frequenzen kann die CPU ohne Fehlfunktion mit einer niedrigeren Spannung betrieben werden, und da der Stromverbrauch proportional zum Quadrat der Spannung ist, kann selbst eine kleine Verringerung der Spannung eine große Menge Strom sparen.

Die Spannungs- und Frequenzskalierung erfolgt durch Hardware, aber die Entscheidung, in einem Niedrigleistungsmodus zu laufen, wird durch Software (das Betriebssystem) getroffen. Wie das Betriebssystem den optimalen Modus zum Ausführen bestimmt, ist ein separates, unordentlicheres Problem, aber es hängt wahrscheinlich hauptsächlich davon ab, wie viel % Zeit das System in letzter Zeit im Leerlauf war. Meistens im Leerlauf, senken Sie die Frequenz. Meist beschäftigt, erhöhen Sie die Frequenz. Sobald das Betriebssystem die Frequenz bestimmt, mit der es ausgeführt werden soll, muss nur noch ein Register eingestellt werden.

Referenz: " Enhanced Intel SpeedStep Technology for the Intel Pentium M Processor "

Funktionen wie Intels Turbo Boost erfordern keinen Softwareeingriff, um den thermischen Spielraum durch Erhöhen der Taktfrequenz auszunutzen. Offensichtlich könnte die Hardware auch Nicht-Rechenleistungsengpässe verfolgen (z. B. durch Zählen von Verzögerungszyklen aufgrund von Speicherzugriffen) und die Häufigkeit verringern, wenn die Rechenleistung nicht der primäre Engpass ist.
Übrigens sind die Einsparungen in Bezug auf die Schaltfrequenz fast linear und nicht so sehr auf die Leitung zurückzuführen, was eine v ^ 2-Beziehung wäre

Nun, auf modernen Betriebssystemen gibt es einen sogenannten "Task Scheduler". Es läuft periodisch (sehr schnell) und wählt (aus einer Liste) aus, welche nächste Aufgabe ausgeführt werden soll. Aufgaben können sich in vielen Zuständen befinden, z. B. ausgewählt, blockiert, schlafend usw.

Wenn sich alle Tasks im Auswahlmodus befinden (auf etwas vom Betriebssystem warten) und nicht bedient werden können oder einige schlafen usw., sodass der Prozessor nicht stark beansprucht wird, ruft der Taskplaner eine spezielle Task namens „idle“ auf ".

Wenn der CPU-Treiber die Task-Scheduler-Tabelle überprüft und verifiziert, dass die Leerlauftask den größten Teil der CPU-Zeit ausführt, sendet er einfach einen Befehl an die Takterzeugungs-PLL-Schaltung der CPU, um seinen Takt zu reduzieren. Wenn im Gegensatz dazu die Leerlaufaufgabe immer weniger CPU-Zeit beansprucht (was bedeutet, dass die CPU stark beansprucht wird), erhöht der CPU-Treiber die CPU-Geschwindigkeit.

Es ist nicht sehr schwer, aber es gibt eine untere Grenze, bei der die CPU nicht niedriger gedrosselt werden kann, da nicht alle CPUs vollständig statisch sind (sie benötigen also Aktualisierungszyklen). Vollständig statische CPUs können bis auf 0 (null) MHz heruntergehen, da kein Zustand verloren gehen kann, wenn die Uhr gestoppt wird.