Developers of image processing software can accelerate their applications by taking advantage of the latest multi-core processors. But with several software frameworks now available that enable them to do so, many programmers might be a little confused as to which approach might be the most effective.
Hoping to shed some light on that subject, researchers at the Department of Computer and Information Science at Linköping University (Linköping, Sweden) have recently evaluated the effectiveness of OpenCL for programming multicore CPUs in a comparative case study with OpenMP and Intel Threading Building Blocks.
OpenMP and Intel Threading Building Blocks are two popular frameworks used to program shared memory multicore processor architectures. The OpenMP API supports multi-platform shared-memory parallel programming in C/C++ and Fortran, while the Intel Threading Building Blocks (TBB) offers an approach to expressing parallelism in a C++ program.
OpenCL, on the other hand, which was defined as a standard by the Khronos group, (Beaverton, OR, USA) focuses on programming a heterogeneous set of processors with many cores such as CPU cores, GPUs and DSP processors.
To evaluate the effectiveness of OpenCL for programming multicore CPUs in a comparative case study with OpenMP and Intel TBB, the researchers used five benchmarks: matrix multiply, LU decomposition, 2D image convolution, Pi value approximation and image histogram generation.
The evaluation included the effect of compiler optimizations, OpenCL performance on different vendors' platforms and the performance gap between CPU-specific and GPU-specific OpenCL algorithms.
The comparative analysis entitled "OpenCL for programming shared memory multicore CPUs" can be found here.
For those interested in reading more about OpenMP, a book entitled "Using OpenMP. Portable Shared Memory Parallel Programming" by Barbara Chapman, Gabriele Jost and Ruud van der Pas is available from the MIT Press here.
Recent software related articles from Vision Systems Design that you might also find of interest.
1. Accelerating morphological operators using GPUs
Researchers at the Lulea University of Technology (Lulea, Sweden) led by associate professor Matthew Thurley are involved in a project to improve the existing software in the Compute Unified Device Architecture (CUDA) image processing library by reducing the processing times of the morphological operators erosion and dilation.
2. Programming computer vision with Python
An associate professor from Lund University (Lund, Sweden) who is currently working and living in San Francisco has written a new book that highlights how to program computer vision systems using the Python programming language from the Python Software Foundation.
3. MIT researchers develop new programming language for image processing
Researchers at MIT's Computer Science and Artificial Intelligence Laboratory (CSAIL; Cambridge, MA, USA) aim to make writing image-processing algorithms easier with a new programming language called Halide.
4. Vision could benefit from parallel computing standard
In an effort to make it easier for programmers to take advantage of such parallel processing hardware, Nvidia, Cray, the Portland Group (PGI), and CAPS enterprise have developed a new parallel-programming standard known as OpenACC.
4. Software tool parallelizes imaging code for multi-core processors
Engineers at Vector Fabrics (Eindhoven, The Netherlands) have built a tool to analyze and optimize source code for multi-core processors. As a test case, they have optimized an OpenCV image processing algorithm written in C++ and made the results available as an Android App.
5. Motion estimation algorithm ported to GPU
Researchers from the Illinois Institute of Technology (Chicago, IL, USA) have taken a general purpose block-matching algorithm which is commonly used for motion estimation and ported it to run on multiple NVIDIA (Santa Clara, CA, USA) GPU cards using the Compute Unified Device Architecture (CUDA) computing engine.
-- Dave Wilson, Senior Editor, Vision Systems Design