A general definition of heterogeneous is something being composed of parts of different kinds or having dissimilar constituent elements. In the context of computing, we now tend to talk about accelerated or heterogeneous systems, where the processing work is carried out not just by the host CPU (itself likely to be a multi-core device) but by one or more, often data parallel, compute engines.
Of course there are several reasons to call a system accelerated. The simple act of offloading one or more types of compute from the host CPU to a co-processor, can be viewed as accelerating the system, at least from the perspective of the user, because you have freed the host CPU from one burden and so it can perform other work. The co-processor, be it a fixed function unit, designed to offer certain types and levels of functionality, or a more general purpose device, capable of carrying out not just a single function, but several and potentially at greater levels of performance than before.
Contrary to what seems to be popular belief, heterogeneous systems are certainly not new, they have in the form I’ve just described, been around for a very long time indeed. Consider the personal computers of today. If you look inside you will likely find in addition to the x86 CPU, a DSP responsible for the multi-channel audio, a processor dedicated to the network interface, and last but very definitely not least, a graphics card that drives the lustrous visual experiences that are today’s user interfaces and games. In fact it will quite possibly be performing many other image processing related tasks, such as video transcoding. The humble PC has indeed come a long way from IBM’s original Personal Computer.
From the perspective of HPC users, which at Petapath we are typically concerned with, an accelerated system is one which takes advantage of the prodigious memory bandwidths and raw FLOPS available in today’s high end GPUs or custom designed accelerators and harnesses them to accelerate its particular processing intensive needs.