Today’s computing environments are becoming extremely complex, utilizing the capabilities of a wide range of multi-core processors, reconfigurable hardware (e.g. FPGAs), digital signal processors, and graphic processing units (GPUs). The process of developing efficient software that would work across such multiple architectures poses a wide number of challenges for the programmer. An application possess a number of workload behaviours, ranging from compute intensive (e.g., numerical methods, financial modelling and iterative methods) to control intensive (e.g., searching, sorting, and parsing) to data intensive (e.g., simulation & modelling, data mining, and image processing) where the overall throughput of the application is heavily dependent on the computational efficiency of the underlying hardware.
There is no single architecture best suited for running all classes of workloads because most applications pose a mix of the workload characteristics. The model of heterogeneous computing provides a solution by allowing developers to use multiple types of specialized processors and technologies as part of a single application.
A Heterogeneous Computing paradigm can be defined as a system that uses a variety of different types of computational units such as general-purpose processor (GPP), digital signal processor (DSP), graphics processing unit (GPU) or field-programmable gate array (FPGA), to perform a job. OpenCL has been developed specifically to ease the programming burden when developing applications for heterogeneous systems. OpenCL addresses the new trend to increase the number of cores on a given processor and provides stable framework for executing programs on multi-core CPUs, field programmable gate arrays, digital signal processors, GPU’s and heterogeneous accelerated processing units.
Architectures supported by OpenCL e.g. CPU, GPU and APU address a wide range of approach to parallelism and efficiency from instruction systems and memory streams. Such diversity allows the developer to provide an optimal solution to a business problem — a solution that, if developed within the OpenCL specification, can be scaled with the growth of available architecture. OpenCL’s abstractions and interfaces allow the developer to develop applications whose execution can occur on a variety of heterogeneous devices from one or many manufacturers.
OpenCL based heterogeneous computing is reaching mainstream application domains and many organizations are already leveraging CPU + GPU for higher performance.
Case Study:
Adobe Systems Inc., in collaboration with AMD, optimized the Adobe Photoshop CS6 product, to use a new set of GPU accelerated features. They implemented GPU acceleration and incorporated OpenCL optimization and improved the end-user experience dramatically by speeding up the critical imaging feature and generating real-time results when photo editing.
Reference:
http://www.amd.com/us/press-releases/Pages/amd-and-adobe-creative-suite-6-2012apr23.aspx
http://www.linuxjournal.com/article/8368
http://en.wikipedia.org/wiki/OpenCL
http://www.khronos.org/assets/uploads/developers/library/overview/OpenCL-Overview-Jun10.pdf
http://en.wikipedia.org/wiki/Bobcat_%28microarchitecture%29
http://www.intel.com/content/www/us/en/processors/processor-numbers.html
http://sites.amd.com/us/Documents/AMD_TFE2011_034SW.pdf
http://www.nvidia.com/object/what-is-gpu-computing.html
*If you find something is misleading or not correct then please throw some light on it.