Hacker Newsnew | past | comments | ask | show | jobs | submitlogin

> It also suggests using "powersave" on battery, based on the old idea that lower CPU frequencies save energy. This is not a given; lower frequencies use less power but also take longer to get the same amount of work done.

Hmmmm... I've always heard from chip engineers that power consumption / heat dissipation was not linear compared to clock speed. I'd be very surprised to find a case where a linear amount of work to be done by the CPU would cause more energy consumption overall at lower clock speed then the same task ran on the same CPU in a shorter timeframe, but at a higher clock rate.

I do agree that if the task takes longer to run, there's a longer timeframe where more scheduling/switching and whatnots needs to be done, so it's not a totally linear increase in time, but can that really be sufficient to offset the energy consumption when running the CPU at an higher clock speed?

There has to be some numbers out there: it's not hard that hard to test.

EDIT: as per the other comments, googling "race to idle" and "race to sleep" which may enlighten my curious self



Power consumption through an asic is P=CfV^2 aka power is capacitance times frequency times voltage squared. So power does scale linearly with frequency.

When you gate on/off portions of a chip, you are changing the capacitance.


What that equation doesn't tell you is that the voltage necessary to make a chip run at 4GHz is higher than the voltage it needs to run at 1GHz. So in practice with real CPUs, increasing frequency also means increasing voltage, and thus power does not increase linearly. (Unless you have a chip that's configured to idle with unnecessarily high voltage.)


> Hmmmm... I've always heard from chip engineers that power consumption / heat dissipation was not linear compared to clock speed. I'd be very surprised to find a case where a linear amount of work to be done by the CPU would cause more energy consumption overall at lower clock speed then the same task ran on the same CPU in a shorter timeframe, but at a higher clock rate.

Both cases ("slower is better" and "faster is better") are true at different points on the frequency curve, because the frequency (hereafter "F") and power (hereafter "P") relationship has both linear and superlinear terms.

To a first order approximation, dynamic power (roughly the power actually used to do work) scales with F^3, but chips also have a significant static power draw as well: power they draw for just being on. Actually, the relationship is more complicated than that since static power may also depend on V, hence indirectly on frequency, but the bottom line is that as you reduce frequency to zero power use doesn't go to zero but asymptotically approaches some non-zero plateau.

So imagine a simplified CPU where we care only about the order-0 and order-3 terms, and it happens that power goes like (P in W, F in MHz):

    P(F) = 2 + 1e-10*F^3
That is, this chip draws at least 2W at any frequency, plus a cubic term in F.

This gives a power curve like this [1] where I've also plotted "work vs energy" which is energy efficiency: how much computation you can do for a given energy input (this is simply F/P).

As you can see, power use increases in a cubic way to the right, but has an asymptote at 2W on the left. Work/energy has a maximum in the middle: at too low frequencies, you are doing very little work/time but paying the full 2W cost, while at the right the cubic term kills power: P increases with F^3 but work only with F. The most efficient spot is somewhere in the middle. Let's call this point Feff.

So it never really makes sense to run your CPU at less than Feff: you are less efficient and it takes longer. It can definite makes sense, however, to run your CPU at more than Feff: you use somewhat more energy but get your work done faster. People don't buy 5 GHz CPUs because they just want their work done efficiently, after all: they want it done fast too.

That's what a lot of the discussion misses: it's not a one dimensional problem that can be solved in terms of joules and MHz: it depends on your time preference too. That's why there are so many tunables, such as Intel's EPP (energy performance preference).

Different processes may have different ideal F values as well: if you have a periodic job running in the background that takes 1s of (nominal) CPU every minute, you won't care if it is on your CPU for 0.5s or 2s, as it runs on a fixed schedule anyway which is much less than a full CPU: this should run at Feff. OTOH when you are compiling a source file and twiddling your thumbs there might be a big difference between 5 and 20 seconds.

This is really only brushing the surface: there are a lot of additional considerations too: e.g., the whole chip may have a power limit, so it may not be possible to go all the way to right on the F graph, especially if multiple cores are running: even if your "performance preference" is way to the right (prefer a higher work/rate regardless of the power cost) you might get the fastest work rate by running more cores at lower F, or even one core at lower F to avoid throttling (because running at F is generally more efficient than running at F-d and F+d in a 50/50 ratio, due to the cubic term, so throttling is inherently inefficient).

---

[1] https://gist.githubusercontent.com/travisdowns/1e685007c9719...




Guidelines | FAQ | Lists | API | Security | Legal | Apply to YC | Contact

Search: