Monday, July 9, 2012

Of the Energy Consumption of Graphics Cards

A long time ago, when narcissists could only stare at their mirrors for hours without being able to post thousands of self-portraits on Facebook, when every thought that crossed your mind was likely to die there without being tweeted the world over, the power consumption of graphics card was not deemed important. End-users cared about the operating temperatures of their devices, and their noise levels, but little more. Some of them did, however, engage in overclocking, and thus applications such as Furmark and OCCT were born. These made it easy to test the stability of overclocked cards, by pushing them to their functional and thermal limits.

But gradually, consumer computing became more mobile, just as high-end graphics cards became ever more power-hungry, reaching and, sometimes, even exceeding 300W. Naturally, end-users started caring about power, and reviewers began searching for ways to better inform their readers. They turned to commonly used stress tests (e.g. Furmark and OCCT) and measured the power consumption of graphics cards while they were running them. For a while, this proved useful: it gave consumers an upper bound for power draw (give or take a few watts, to account for the natural variability from sample to sample).

But hardware vendors were well aware of the increasing importance of power, and therefore started adding increasingly sophisticated control mechanisms meant to limit power to a certain level. When these were first introduced, reviewers noted that they did in fact cap power to the specified level, without apparently giving it much thought. By now, however, most of them have realized that power control mechanisms such as AMD's PowerTune effectively make stress tests irrelevant, since they do not stress GPUs anymore. At best, they still provide readers with an upper bound for power, but it happens to be, give or take a few watts, the card's thermal design power, which does not make this information very helpful.

In reaction, most reviewers decided to test power consumption in real video games instead, thus giving a more realistic idea of what cards may draw in real-world scenarios. But as Damien Triolet showed, the power draw of different cards relative to one another may be significantly different from one game to the other. More specifically, AMD cards seem to consume more power in Anno 2070 than in Battlefield 3, relative to their NVIDIA counterparts. A careful observer will further note that AMD cards perform better in Anno. One can therefore suppose that they reach higher occupancy of their computing units in this game, which leads to higher performance, but also higher power consumption. Finally, and even though their power consumption increases in Anno, their power-efficiency (relative to GeForces) increases as well. This makes sense, as it is generally better to have busy transistors than idle ones, sitting around and doing nothing more than leaking current. So higher performance in a given game tends to lead to higher efficiency as well (relative to the competition). In other words, performing well remains a good thing. That is reassuring, but there remains a problem: how can we determine the real power-efficiency of graphics cards over a broad range of games?

Perhaps there are trends and certain engines, certain types of games tend to favor one architecture more than the other, and perhaps there exist good representatives for each "class" of games, which may be used for power testing. But to my knowledge, no one has yet identified them, if they do indeed exist. And that is not the only problem. Indeed, while most reviewers do not specify the exact nature of the power figures they present, I believe they generally give the maximum instantaneous power draw recorded. This may be considered somewhat useful, as it gives some idea of the kind of power supply unit necessary to feed a given card, but it does not guarantee that no game will ever require more power. More importantly, it does not tell us which card consumed more energy over the length of the benchmark. Indeed, a card X may have drawn an average of 150W with a peak of 170W while a card Y drew an average of 130W, with a peak of 185W. Card Y may require a slightly more powerful PSU, but it is nevertheless more energy-efficient than card X.

The only possible conclusion is that reviewers ought to measure the total energy of each card they are testing, for each game they are testing, or their power consumption figures only give a very approximate, and possibly misleading picture of reality. This does, of course, increase their workload significantly, but the previous observations lead me to believe that it is necessary.

PS: Scott Wasson from The Tech Report has been using a rather innovative methodology for performance testing since last September. It is detailed here, it is very good, and I think every reviewer should adopt it. I do not know how he might feel about this, but he should welcome it—after all, imitation is the sincerest form of flattery, and good ideas are meant to be spread.

I should also note that while this entry only mentions graphics card, that is only because they can draw up to 300W, and sometimes even more with some of the crazier, low-volume models. Most of what I said holds true for CPUs as well, or really just about any component.

Friday, March 30, 2012

Tales of Woe of a Windows user

This woman is trying to empty a Windows folder. God help her.
I've not updated this blog in a long time, but today I'd like to share a painful experience. First, I'm an Opera user, and while I'm overall quite happy with the browser, it won't empty its disk cache on exit, even though it is supposed to. As a result, the cache tends to exceed 10GB after a while. When I first noticed this, I figured "OK, that's annoying but no big deal, I'll just create a shortcut to the cache directory on my desktop and manually empty it from time to time."

So I created the shortcut, but things didn't exactly go as planned. Opera breaks down its cache into many small .tmp files, so the cache directory often contains many thousands of tiny files. Now, as any Windows user is aware, simply deleting a file will actually send it to the recycle bin, but pressing shift at the same time will delete it for good. For some obscure reason that still eludes me, it is impossible to fully delete more than about 1200 files at once without going through the recycle bin, or at least my system refuses to do so and sends everything to the bin. I'm not sure whether Windows modifies the files in any way when sending them to the bin, but because they are so numerous in the disk cache, the deletion process takes forever. As if that weren't enough, it also slows the entire system down, and I still have to empty the bin afterwards to actually delete the files.

Needless to say, I quickly decided that this just wasn't an acceptable way of doing this, and I had to find something better. On most distributions of Linux, I just would have right-clicked in the folder, clicked Open terminal here or some similar option, typed rm * and pressed Enter, for a grand total of 2 clicks and 5 keys pressed. So I figured that doing something similar on Windows ought to be possible. It turns out that directly opening a PowerShell in a specific directory is impossible, so I had to open it at the root of my system, and then go to the desired directory. That sounds trivial, but PowerShell's auto-completion system is so terrible that it's actually quite a pain in the ass. Anyway, I finally reached the cache directory, typed Remove-Item *, pressed Enter, and finally my cache emptied itself correctly, without going through the bin, and taking a reasonable amount of time.

But this still wasn't good enough. Opening a shell and going to the right directory was far too tedious to do manually every time, so I decided to just write a script to do it. So I did, and I put it on my desktop. Then, I double-clicked it… which launched Notepad, with the script in it. OK, fine, Linux would have asked me whether I wanted to run it or display it, but that's not too bad. I closed it, right-clicked it, and clicked Run with Powershell. Then, a nice little command-line window opened, displayed some red text for a fraction of a second, and closed before I could read a single word. WTF? I tried it again, and managed to take a screenshot just in time. As it turned out (after a good bit of googling around) it's not possible to run your own scripts on Windows with the default settings. You have to launch PowerShell, and type in Set-ExecutionPolicy RemoteSigned, otherwise the OS refuses to run your scripts, because it doesn't trust them. So I did just that, and now I can run my little script from my desktop to empty my disk cache, with minimal human input and just a few seconds of work for the system.

Sure, originally, this is a bug on Opera's side, so in a way, this is Opera Software's fault more than Microsoft's. But the point of this blog entry is that because Windows is so weird, and in some ways so far behind Linux (on which it would have been the most trivial thing in the world) it took me 20 minutes to figure out how to empty a fucking folder.