Computer gamers have inadvertently been the cause of a revolution in the processing capabilities of personal computers. Their constant desire for more "realistic" animation drove the development of high-end Graphics Processing Units (GPUs), resulting today in massively parallel computation systems that are relatively inexpensive and readily available. In addition, CPU design hit a wall in the early 2000s where the result was existing programs will no longer run faster with each new generation of processor. This can be seen in both CPUs and GPUs; where computer CPUs typically consist of a few cores which are optimized for serial processing, while GPUs consist of thousands of smaller, more specialized cores which are designed to process data concurrently. Consequently, there has been a shift from a single threaded execution model, to the more general parallel paradigm, which is a significant and growing area of importance in high-performance scientific computing across many disciplines.
In recognition of the fact that parallel and distributed computing is an area of vastly increased importance, I have spent many years creating heterogeneous applications that execute using both the CPU and GPU. In particular, the focus has been on NVIDIA CUDA for general purpose computing using GPUs. See the links below for more information regarding GPU activities at the University of Winnipeg.