The terminology involved in multicore design can get pretty confusing. It involves designers coming from different backgrounds and target markets—software versus hardware, embedded versus general-purpose, and so on. That being said, the following is an attempt to clear the air by providing some basic definitions.
Heterogenous: These systems include at least two different components. Viewed from a hardware architecture perspective, this lately has meant different processor cores. It could refer to the physical size of the core, the number of threads it can run, the pipeline configuration, and other differences. The Cell microprocessor from IBM, Sony, and Toshiba is a good example of a heterogeneous architecture. From a software perspective, heterogeneous generally refers to running different operating systems on each processor.
Homogeneous: These systems comprise identical components. From a hardware perspective, for the most part, all memories, caches, and the architecture in general is the same across processors. A motherboard with two CPU sockets, each containing the same model CPU, would be an example of a homogeneous system. From a software perspective, homogeneous refers to running the same operating system for each processor in the system or chip.
Symmetric multiprocessing: From a hardware perspective, this is essentially an expansion of the homogeneous definition, whereby the processing elements are expected to share resources, such as main memory and peripheral devices. A personal computer loaded with a multicore chip is an example of a symmetric multiprocessing system. From a software perspective, symmetric multiprocessing could take on the same meaning as homogeneous.
Asymmetric multiprocessing: From a hardware perspective, it’s essentially an expansion of the heterogeneous definition, whereby the processing elements could be separate, such as a DSP and an MCU, or it could be a self-contained asymmetric multicore chip (or both). Sharing memory with asymmetric systems is optional, though sharing peripherals is still common. A mobile multimedia device with a general-purpose MCU that handles the user interface and a DSP that handles signal processing (such as a phone signal) would be an example of an asymmetric multiprocessing system. From a software perspective, asymmetric multiprocessing could take on the same meaning as heterogeneous.Networked/clustered multiprocessing: Networked multiprocessing is an asymmetric implementation mostly found in embedded architectures. Here, the system typically has a network connection, shared bus, or shared mailbox for communication between processing elements. Otherwise, the main memory isn’t shared.