If you haven’t seen it yet, Jamie and Adam did what may be the greatest illustration of a computing concept onstage ever, using an 1100-barrel paintball gun:
Updated: We’ve seen the basic idea before — one of the Max/MSP + Atmel-powered Printball notes his own, similar project, as featured on Pixelsumo way back in 2005. But it’s the first time I’ve seen this used to illustrate this point.
The basic idea: GPUs, by using parallel processing, are able to render graphics more effectively than CPUs. And while the illustration is something of an oversimplification, it is pretty literal in terms of showing people what’s going on — and why GPUs are uniquely well-suited to computing graphics. Conceptually, it’s really one of the most brilliant demos I’ve ever seen.
There are just a couple of problems — and, amusingly, this demo makes them visible, as well.
We should recognize that the demo took place at NVIDIA’s NVISION show, so there was a certain bias expected.
But first, there’s the problem of standards. With graphics, we’ve already seen what happens with competing APIs like DirectX and OpenGL (and other wrinkles, like the Mac-only Core Image, which is in turn built on OpenGL). Now, NVIDIA and other GPU makers want to sell us on the idea of using their chips for general computing tasks (aka GPGPU). There still isn’t a standard for doing that. NVIDIA is pushing its CUDA 2.0 technology, of course, but it’s not clear whether others will adopt it. I’d put more faith in OpenCL; aside from the backing of Apple and AMD, that spec looks like it has a good shot at being adopted by the Khronos Group, the folks who brought you OpenGL’s standard implementation. (Not that everything Khronos has touched has turned to gold — see the largely failed OpenML.) But the bottom line is, to put it in the terms of this demo, it’d be a lot nicer if you could take the same instructions from one paintball gun to another.
Then there’s the bigger problem: what works for graphics doesn’t work for everything else.
In fact, you can see in the demo why, in general terms, parallel processing doesn’t work as well for audio tasks. Interestingly, this week as I chatted about a new release of a dedicated DSP-chip platform called the UAD-2 on Create Digital Music, people brought up this question of whether GPU chips might be the future of audio processing. You can see the fundamental problem here: audio, as a real-time operation that occurs in extremely tiny slices of time (think 44,100+ samples each second), tends to want to be processed more like the first paintball gun. That’s not to say that some tasks, particularly those that require parallel operations like granular synthesis, wouldn’t benefit from some parallel processing. But even then, the round-trip to the GPU has to compete with simply staying on the CPU for the task. These aren’t necessarily insurmountable problems, but suffice to say CPU makers are working on this, too. GPU makers are removing architectural barriers between the CPU just as CPU makers are working on smarter parallel processing, so the placards in this demo are likely to say “serial versus parallel”, not “CPU versus GPU” in the near future. (What do you want? It was an NVIDIA-sponsored event.)
That said, readers of Create Digital Motion have quite a lot to look forward to in the increasing power of GPUs. Obviously, 3D graphics capabilities continue to improve, and despite what you may hear about the PC game market dying, both the niche PC game and 3D production industries seem interested in continuing to push the envelope here.
But that’s just the beginning. Video decoding at higher resolutions and qualities is getting more efficient, which is not only good for video but leaves more room for other tasks. Decoding on the GPU (or a dedicated chip) is becoming increasingly powerful, and a number of GPGPU implementations do decoding on the GPU. (If we get really lucky, we’ll see a convergence of an open-source codec with an open-source GPGPU implementation in a standard spec like OpenCL, finally making video accessible to all. A boy can dream.)
I think the most interesting application may actually be in the area of computer vision. Doing analysis of video to determine motion has always been costly and difficult on the CPU. But processing a bunch of pixels in parallel is ideally suited to GPGPU implementations. Again, if we could get an open-source implementation, the work built on that could be incredible. Intel’s open-source OpenCV library is the basis for countless computer vision projects, including many in academia that would be unable to license a proprietary library. OpenCV runs on the CPU (written in C/C++); imagine something similar running on a standard GPGPU implementation.
If anyone was at NVISION, I’d love to hear about any developments on those fronts.
Gizmodo has a similar combination of enthusiasm with a small dose of technical skepticism (but plenty of gratitude to these guys for making the demo so clear):
MythBusters Build a 1100-Barrel Paintball Gun to Paint the Mona Lisa, Instantly
They also did a great explanation of what the parallel processing business is about, particularly in regards to Apple’s upcoming Snow Leopard OS:
Giz Explains: Mac OS 10.6 Snow Leopard Parallel Processing and GPU Computing
So, there’s my semi-uninformed opinion, at least. Usually what happens is, when we touch a subject like this, people who know more than me come out of the woodwork to share what they know. If you’re there, I’d love to hear from you.