The Question

SuperUser reader Ell keeps up with tech news and is curious why we’re not using more GPU-based systems:

It seems to me that these days lots of calculations are done on the GPU. Obviously graphics are done there, but using CUDA and the like, AI, hashing algorithms (think Bitcoins) and others are also done on the GPU. Why can’t we just get rid of the CPU and use the GPU on its own? What makes the GPU so much faster than the CPU?

Why indeed? What makes the CPU unique?

The Answer

SuperUser contributor DragonLord offers a well supported overview of the differences between GPUs and CPUs:

TL;DR answer: GPUs have far more processor cores than CPUs, but because each GPU core runs significantly slower than a CPU core and do not have the features needed for modern operating systems, they are not appropriate for performing most of the processing in everyday computing. They are most suited to compute-intensive operations such as video processing and physics simulations.

The detailed answer: GPGPU is still a relatively new concept. GPUs were initially used for rendering graphics only; as technology advanced, the large number of cores in GPUs relative to CPUs was exploited by developing computational capabilities for GPUs so that they can process many parallel streams of data simultaneously, no matter what that data may be. While GPUs can have hundreds or even thousands of stream processors, they each run slower than a CPU core and have fewer features (even if they areTuring complete and can be programmed to run any program a CPU can run). Features missing from GPUs include interrupts and virtual memory, which are required to implement a modern operating system.

In other words, CPUs and GPUs have significantly different architectures that make them better suited to different tasks. A GPU can handle large amounts of data in many streams, performing relatively simple operations on them, but is ill-suited to heavy or complex processing on a single or few streams of data. A CPU is much faster on a per-core basis (in terms of instructions per second) and can perform complex operations on a single or few streams of data more easily, but cannot efficiently handle many streams simultaneously.

As a result, GPUs are not suited to handle tasks that do not significantly benefit from or cannot be parallelized, including many common consumer applications such as word processors. Furthermore, GPUs use a fundamentally different architecture; one would have to program an application specifically for a GPU for it to work, and significantly different techniques are required to program GPUs. These different techniques include new programming languages, modifications to existing languages, and new programming paradigms that are better suited to expressing a computation as a parallel operation to be performed by many stream processors. For more information on the techniques needed to program GPUs, see the Wikipedia articles on stream processing and parallel computing.

Modern GPUs are capable of performing vector operations and floating-point arithmetic, with the latest cards capable of manipulating double-precision floating-point numbers. Frameworks such as CUDA and OpenCL enable programs to be written for GPUs, and the nature of GPUs make them most suited to highly parallelizable operations, such as in scientific computing, where a series of specialized GPU compute cards can be a viable replacement for a small compute cluster as in NVIDIA Tesla Personal Supercomputers. Consumers with modern GPUs who are experienced with Folding@home can use them to contribute with GPU clients, which can perform protein folding simulations at very high speeds and contribute more work to the project (be sure to read the FAQs first, especially those related to GPUs). GPUs can also enable better physics simulation in video games using PhysX, accelerate video encoding and decoding, and perform other compute-intensive tasks. It is these types of tasks that GPUs are most suited to performing.

AMD is pioneering a processor design called the Accelerated Processing Unit (APU) which combines conventional x86 CPU cores with GPUs. This could allow the CPU and GPU components to work together and improve performance on systems with limited space for separate components. As technology continues to advance, we will see an increasing degree of convergence of these once-separate parts. However, many tasks performed by PC operating systems and applications are still better suited to CPUs, and much work is needed to accelerate a program using a GPU. Since so much existing software use the x86 architecture, and because GPUs require different programming techniques and are missing several important features needed for operating systems, a general transition from CPU to GPU for everyday computing is extremely difficult.

Jason Fitzpatrick is warranty-voiding DIYer and all around geek. When he's not documenting mods and hacks he's doing his best to make sure a generation of college students graduate knowing they should put their pants on one leg at a time and go on to greatness, just like Bruce Dickinson. You can follow him on Google+ if you'd like.

It shouldn’t be difficult with the increasing clock speeds of GPUs.I think if they use the GPU boost technology and shut down cores to 3 or 4(quad core), so that the overall temperature goes down significantly to run at 3 to 4 GHz speeds.

Am a novice but, think that someone could write Linux based OS to run in that kind of GPU centered environment.It would be even better to see that happening in Quad-SLi environment.

The problem is that GPUs use different architectures and these frameworks produce bytecodes not opcodes . That is actually very good because our graphical systems would still be in the stone age if that wasn’t the case . I hope x86 dies soon..

I am probably in the minority here, but it would be nice to have all acronyms spelled out the first time they are used in the article. “Increasingly Graphic Processing Units (GPUs) are being used…..” means more work for the editors but a lot less time trying to sort through acronym lists for those of us who are less technically knowledgeable (that would be me….). Only has to be done the first time and now that it has been defined “….from adopting GPU-driven….” the reader has a reference point.

We now know how it works, but I would like to know how to implement? I suppose this will be programmed into specific programs and not something a user can dump off on the GPU at will. What programs currently support this? What are the benchmarks with/without GPU help?

GEEK TRIVIA

DID YOU KNOW?

Despite the widely held belief that witches were burned at the stake during the Salem Witch Trials, none of the individuals accused of witchcraft were executed in such a fashion; all of the accused were killed by hanging, pressing, or died in prison during the legal proceedings.