Article Preview
TopIntroduction
Ever since the human genome project was completed in 2001 biological data availability has been steadily growing. Especially since the introduction of new technologies, most notably microarrays and next generation sequencing (NGS), this growth has become exponential. Other areas such as molecular modelling and medical imaging are also heavily contributing not only to the aforementioned exponential growth of the available data, but also to their algorithmic complexity. At the same time, with falling genome sequencing prices and newer, more efficient instruments, this trend will continue or even accelerate for the foreseeable future (Richter & Sexton, 2009). This huge amount of data combined with their increasingly intricate, interconnecting structures will eventually lead to their analysis becoming intractable by current personal computers.
This is especially true if one considers that in the last few years the increase of computing power is starting to fall behind Moore’s law, with R&D focused more on energy efficiency for mobile applications and less on increasing CPU raw power. Even the introduction of multicore processors wasn’t enough to reverse this trend since most applications are not optimized to use more than one core (multithreaded) and efficient utilization of multiple cores is still a topic of active research in computer science. What is more the higher end, server grade, CPUs are cost prohibitive to any medium sized research institute or biotech company.
Thus, it is becoming obvious that we are steadily moving towards a plateau in microprocessor capabilities and consequently a stalemate in our analysis capabilities of the unrelenting wave of complex biological data.
Enter General Purpose Graphics Processing Units (GPGPU) spearheaded by NVIDIA and its pivotal Compute Unified Device Architecture (CUDA) platform.
Advent of GPUs and CUDA Appearance Evolution
It all started in the mid 90’s with the appearance of the first GPUs whose sole purpose was 3D graphics acceleration, namely for use in computer games. NVIDIA produced its first graphics accelerator in 1999. These units contained a single processing unit and were extremely limited in both rendering capabilities, raw processing power and were cumbersome to write code for. But soon, the market demand for high definition content and photorealistic graphics transformed these first attempts to highly parallel, multithreaded computing powerhouses with many cores and never seen before memory bandwidth. At the same time, NVIDIA coined the term GPUs and the first attempts to utilize the raw potential of these cards for a range of scientific applications other than graphic rendering begun to appear. This was the dawn of the era of General-Purpose computation on GPU, or GPGPU.
Unfortunately, programming on these platforms was still very challenging, requiring scientists to formulate their algorithms in terms of geometrical shapes such as triangles and polygons. At the same time, the available tools offered only limited accessibility to the full computing capabilities of the GPUs. NVIDIA was the first company to realize the potential of this technology and invested heavily in creating fully programmable GPUs and developing intuitive software and hardware tools. This effort culminated in November 2006 with the introduction of CUDA, a general purpose parallel computing platform and programming model, that comes with a software environment based on the C programming language.
GPU computing momentum is growing faster than ever before. With over 375 million CUDA-enabled GPUs installed in a wide range of computers, today CUDA is the dominant platform for GPGPU. It is the preferred method for affordable High Performance Computing (HPC) and is used by thousands of researchers around the world in computationally intensive projects that wouldn’t be possible using conventional CPUs.