Computational Science Technical Note CSTN-091


Mixing Multi-Core CPUs and GPUs for Scientific Simulation Software

K. A. Hawick, A. Leist, D. P. Playne

Archived September 2009


Recent technological and economic developments have led to widespread availability of multi-core CPUs and specialist accelerator processors such as graphical processing units (GPUs). The accelerated computational performance possible from these devices can be very high for some applications paradigms. Software languages and systems such as NVIDIA's CUDA and Khronos consortium's open compute language (OpenCL) support a number of individual parallel application programming paradigms. To scale up the performance of some complex systems simulations, a hybrid of multi-core CPUs for coarse-grained parallelism and very many core GPUs for data parallelism is necessary. We describe our use of hybrid applications using threading approaches and multi-core CPUs to control independent GPU devices. We present speed-up data and discuss multi-threading software issues for the applications level programmer and offer some suggested areas for language development and integration between coarse-grained and fine-grained multi-thread systems. We discuss results from three common simulation algorithmic areas including: partial differential equations; graph cluster metric calculations and random number generation. We report on programming experiences and selected performance for these algorithms on: single and multiple GPUs; multi-core CPUs; a CellBE; and using OpenCL. We discuss programmer usability issues and the outlook and trends in multi-core programming for scientific applications developers.

Keywords: multi-core; GPU; CUDA; OpenCL; data parallelism; thread model.

Full Document Text: PDF version.

Citation Information: BiBTeX database for CSTN Notes.

BiBTeX reference:

  author = {K.A. Hawick and A.Leist and D.P.Playne},
  title = {{Mixing Multi-Core CPUs and GPUs for Scientific Simulation Software}},
  journal = {Res. Lett. Inf. Math. Sci.},
  year = {2010},
  volume = {14},
  pages = {25-77},
  number = {ISSN 1175-2777},
  timestamp = {2010.08.16},
  url = {}

[ CSTN Index | CSTN BiBTeX ]