Princip je stejný jako když na lodi jeden námořník mlátí do bubnu, aby všichni ostatní veslovali stejně. Jde o synchronizaci procesů uvnitř čipu. S každým impulzem, který se do procesoru pošle, se (zjednodušeně řečeno) v čipu udělá jeden krok. Těch impulzů tam proběhnou třeba dvě miliardy za sekundu (proto vám procesor běží na 2 GHz).
No, v principu je možné reagovat na náběžnou i závěrnou hranu, takže se na jeden pulz udělají dva kroky. Ale pokud se bavíme o frekvenci hodin, pak 1 MHz je vždy 1 MHz.
Vnější hodiny tikají na nižší frekvenci a uvnitř procesoru je násobič. Vnitřní hodiny tedy tikají rychleji. Jedna sinusoida (1Hz) má 2 náběžné a 2 sestupné hrany. Takže pokud byste chtěl reagovat na všechny, máte násobení 4x. Problém bych viděl v teorii, že s každým pulsem vlastně zapínáte napájení na vodič s hodinami, který z principu musí být rozveden ke všem (sekvenčním) obvodům v CPU. Uvážíme-li, že na normálním desktopu CPU většinu času prostojí, pak jsou ty pulsy prostě zbytečné a a odtud asi i ten (dle mého nadsazený) odhad. Principielně mohou být hodiny nepravidelné, ale návrh CPU je jednodušší, když jsou hodiny stabilní. Již dnes existuje u procesorů možnost snížit frekvenci, ale kvůli jednoduchosti jen v několika skocích. Kromě toho ale pochybuji o reálnosti úspory, protože velkou část CPU tvoří cache se statickými pamětmi, které jsou tvořeny klopnými obvody a ty musí být napájeny nepřetržitě... což úvahu o úspoře posune dle mého dost dolů. Leda by se napájení CPU vypnulo také, ale to bysme pak museli vždycky znova provést reset a to by se asi programátorům ani uživatelům nelíbilo ;-)
No predevsim hodiny nejsou harmonicky signal, ale obdelnikovy, takze jedna nabezna a jedna sestupna. Hodiny se daji i hradlovat, takze pokud vite, ze se (treba) nevyskytne zadna FPU instrukce, tak zablokujete hodinovy signal k cele FPU, nebo jen nektere jeji casti. Velkou cast spotreby procesoru tvori leakage (prusak proudu), ten je tam porad, i kdyz kompletne zastavite hodiny, pomuze jen snizeni napeti a nebo jeho vypnuti - coz je Vami zminovany pripad SRAM. Nevyuzite cache radky (segmenty) se proste komplet vypnou, a ty co jsou obsazene se nejdriv zapisi do RAM (tusim ze tak to dela Intel s Enhanced deeper sleep). CPU muzete i komplet vypnout, ale musite si nekam ulozit komplet jeho stav a po obnove napajeni skocit na obnovovaci rutinu, stav obnovit a pak pokracovat dal (takze jestli jste resetem myslel reboot OS, tak to neni treba).
Existuji i procesory bez hodinoveho signalu (treba ARM996HS), ktere tyto problemy odstranuji, proste nemaji uvnitr hodinovy signal vubec (jen pro externi synchronizaci).
Pokud budete reagovat na sinusoidu pomocí klopného obvodu, dostanete skutečně obdélníkový signál, otázkou zůstává, jak často budete reagovat a jestli třeba budete reagovat i v mezičase (tj. násobit). Vypínání cache ve sleep režimu je asi pochopitelné, jestli se vypíná celý CPU, ale za běhu se těžko něco takového najde, neboť máme multitaskingové systémy, které v paměti trvale "přeskakují" a tím se snadno cache zaplní (v podstatě je zvýšení efektivity cache snaha o minimalizaci jejího vylévání a snaha o maximální udržení nejčastěji používaných oblastí RAM).
Resetem jsem samozřejmě myslel nastaveni CPU do definovaného stavu, protože je to sekvenční obvod a jako takový se do něj musí dostat i před obnovením. Narážka na "reset" ve spojitosti s uživatelem a programátorem byl samozřejmě vtip a odkaz na neefektivnost takové operace při normálním běhu CPU.
Cache - bud rychlost, nebo spotreba, oboji jde tezko, clovek si proste musi vybrat :-) Otazka je, jak moc by to ovlivnilo chod osobniho pocitace (ktery se stejne flaka, nemyslim servery), kdyby procesor spal a pri timeru (v linuxu tusim 1000/sec, ted si nejsem jisty, byly kolem toho nejak debaty) jen zkontroloval jestli je co delat a kdyztak spal dal. Takova rutina by se mohla vejit do par radek cache (a tam ji zamknout) a ostatni by mohly byt odpojene.
Jenom k násobiči: měl jsem pocit, že ve skutečnosti se "násobení" provádí na bázi lokálního oscilátoru, který je synchronizován fázovým závěsem (PLL) přes děličku. Násobící poměr se vloží do děličky. Takže i "vynásobený" signál má rozumnou střídu, je možný teoreticky jakýkoli celočíselný poměr apod.
Princip fungování násobiče samozřejmě nemá žádný vliv na vztah hodin ke spotřebě.
".. Kromě toho ale pochybuji o reálnosti úspory, protože velkou část CPU tvoří cache se statickými pamětmi, které jsou tvořeny klopnými obvody a ty musí být napájeny nepřetržitě .."
To je sice pravda, ale pokud se do cache nezapisuje, je odběr velmi malý. Pokud se zapisuje (překlápějí se stavy jednotlivých KO), je to pak taky o něčem jiném.
Podstatně větší bude spotřeba "dynamických" částí, kde se s každou změnou stavu hodinového kmitočtu nabíjejí a vybíjejí vnitřní datové vodiče a hradla vstupních tranzistorů. Jejich kapacity jsou sice velmi malé, ale vzhledem k frekvenci která se do nich žene jsu ty proudy obrovské. Řešením je ve stavu nečinnosti (např. po instrukci HLT) odpojovat co se dá. Ale ne vždy je to žádoucí, protože na napájecích větvích vznikají rázy, které se přenášejí dál a můžou i rušit obraz. Viz :
Myslim, ze neni spatne reseni snizit frekvence procesoru a psat rozumny software :-). Urcite by to pomohlo tam, kde to je nejvice potreba a gamesnici nebo vedatori maji urcite energie dost :-).
Já jsem vždycky žil v domnění, že statická spotřeba CMOS je mizivá a že problémem je počet přepnutí. V tomhle světle můžou hodiny za podstatně větší podíl na spotřbě než jen 50 %. Takže vůbec nevím, jak si tu zprávu mám přeložit...třeba tak, že to je hodně podivné vysvětlení něčeho, co vím už patnáct let? Také jsem žil v domnění, že hradla MOS tranzistorů jsou celkem slušně izolovaná a že pokud dochází ke generování tepla, tak je to pod hradlem při přepnutí a ne při cestě signálu do hradla (aneb řízení napětím, s mizivým proudem na vstupu.) Ale co, zdroj se jmenuje „Wall Street Journal“, třeba to s tím má něco společného...
Stejně si myslím, že Chuck Moore "got it right". :-D