There is a lot of hupla (and rightly so) surrounding parallel computing today. CPUs aren’t getting much faster in terms of clock speeds these days and any more its all about the cloud, man. Distributed computing has been a thing in academic circles for quite a while. Much like the Internet, which also started in the world of academia and made its way to the general populace, distributing computing is in its public infancy with projects such as Folding@home and SETI@home, and more recently the computing as a service projects of Amazon and Microsoft. But we’re already seeing a creep into the homes of the average Joe Blow. Multicored GPUs are pretty common now. The GeForce GTX 680 from NVIDIA, for example, has 1536 CUDA cores.
My biggest beef with the state of things right now is that the job of the graphics chip to do heavy processing, even when what you’re processing has nothing to do with graphics. I think its about time that we move away from the current paradigm of a single CPU chip with anywhere between 1 and 16 cores and a GPU with a gazillion cores to a set up more applicable to what is certainly coming in the future. Namely, we need a cluster of general purpose cores specifically for general processing. With the prevalence of data processing in today’s applications, even for local applications, I feel its time to let the GPU do its thing and have a separate cluster for everything else. If for nothing else than allowing games to fully parallelize both graphics specific tasks and game or AI tasks.
Good thing that Microsoft is moving us (the business world, at least) in this direction with the advent of new asynchronous language features in C# 5.0. Really, this is going to have to happen. We need to integrate threading and parallel concepts into the languages we use because in the near future the ability to write a good parallel algorithm is going to be just as important to a developer as the ability to write a good for loop.
I had just one class in college which emphasized the concepts of threading, deadlocking and parallel algorithms, and that was in a class on operating systems. I hope things are changing in computer science curricula, because starting developers out with, and staying with, single threaded C and C++ applications won’t be sufficient in the future.
I’m just sayin’, its time to get on the parallel train. Choo choo.