Graphics Cards Guide

The Brave Parallel Worlds of GPU Computing

The Brave Parallel Worlds of GPU Computing



It's the Software, Stupid!

It's the Software, Stupid!

It's a typical question among consumers when shopping for a new PC: what could you do better with a quad-core CPU? One could confidently point to higher performance with an increase in clock speeds, but the answer becomes more measured when one talks about an increase in processor count. Performance then varies with the nature of the applications. Unfortunately, despite the many years that have passed since the first dual-core debuted, the number of software applications that are multi-threaded enough to take advantage of more than two cores are limited.

In short, the software development has not kept pace with the hardware, a common refrain that's valid whether it's coming from a user doing video encoding or a hardcore gamer that finds his latest quad-core system slower than his higher clocked but dual-core system. Be it for work or play, software applications are still far from utilizing the quad-core systems that CPU vendors are keen to push nowadays. However, it won't be fair to blame the software developers for the gradual progress.

Porting applications over to take advantage of a multi-core system is not a trivial venture and it's not guaranteed that it will scale with additional processors that will inevitably appear in the future. Issues like synchronization and contention over shared resources will invariably crop up After all, the current sequential, single-threaded programming model has been in use for close to a century while parallel programming models are relatively new.

Hence, there needs to be new parallel programming models for this multi-threaded era. NVIDIA, which has been championing its own CUDA SDK as a way for developers to get into parallel computing, has found itself pushing for general parallel programming and CUDA-related courses in universities around the world in order to promote its technology. The implication is that this is still a very new emerging programming approach and obviously, NVIDIA is very keen to plug it since it places much importance to the GPU. Nevertheless, the benefits of parallelism are clear and go beyond any one company and with more budding developers writing or equipped with a good understanding of parallel code, we may reap these benefits earlier.

Going back to parallelism, there are currently two forms, data parallelism as we had mentioned previously refers to executing similar operations on multiple data. The other form, task parallelism, means to execute different instructions on the same data. That's like assigning one core to handle AI, another to handle the physics calculations, and so on.

Intuitively, one can see that with the large number of 'stream processing units' offered by GPUs nowadays, the data parallelism aspect is easily covered by the GPU. CPUs traditionally seem to have been the ones doing the physics and AI calculations mentioned in the example, though ATI and NVIDIA have made some progress in letting the GPU take control of such tasks too. NVIDIA has been quicker in making it widely available. For instance, it has ported its PhysX physics engine to CUDA and the newer GeForce GPUs are able to accelerate physics effects via stream processing.