Is there any focus to try a CUDA class at a school alongside their existing graphics programming class? Is there any overlap there?

There is, but I wouldn't encourage it. Graphics is graphics, and CUDA is just programming, so while there's overlap because it's the same hardware underneath, data-parallel as a programming skill is separate. The class at Illinois covered a bit of graphics for a couple of lectures, but the class was designed around data-parallel programming and being able to break up your problem and apply it to the CUDA model. CUDA is related to a specific product, though. I would be happy to teach data-parallel programming using a variety of different machines and systems though, not just CUDA! But there's just not that variety, so I don't have that luxury. This is a mass market product, so it's not like teaching with a specific thing that may or may not exist or be available. Anyone who has a computer can have a CUDA environment, and millions of people will. By the end of the year there'll be 25 million machines able to accelerate CUDA, and that's huge. It's kind of like if you teach C programming, you should probably tell people a little about x86. You can't really teach it without explaining what happens on the machine, and it's the same here.

Given the market penetration then, where there's no barrier to entry with the hardware and everyone has it or access to it, do you see it where you could have so many students now learning how to program data-parallel applications and the possibility for new algorithms popping out is so much higher?

Yeah, I think you will see that. This is making it possible, and it really is a different scale of computing that originals can do with their box. So I think applications like John Stone described with NAMD, so he took that piece and made it data-parallel and, oh, now it's free, so he gets to focus elsewhere on the other parts. So what it does is it creates new research problems, because the stuff you weren't even looking at now becomes a research problem, the bottleneck is elsewhere. So there's the potential for an explosion of people learning applications and new techniques.

So one last one. For any given GPU you have area for graphics and you maybe have some extra for things like CUDA. So now going forward does the ratio of graphics to extra now start to favour the extra, to let you build things that might not be primarily for graphics?

I think the goal will be to try and increase the amount that's common for both. So for example the processor core, the SPs, that's fully utilised for both graphics and CUDA. So we'll try and increase that common area as much as we can. But for example, the reason there's constant memory in CUDA....

Because D3D10 specifies it....

Right, so there, that's also a common area we can then exploit that you might not think about like you think about the SPs and the clusters there.