OpenCL Parallel Programming Development Cookbook

This cookbook is the perfect way to learn parallel programming in OpenCL because if offers a mix of enlightening theory and hands-on recipes. Ideal for experienced developers.

OpenCL Parallel Programming Development Cookbook

Cookbook
Raymond Tay

This cookbook is the perfect way to learn parallel programming in OpenCL because if offers a mix of enlightening theory and hands-on recipes. Ideal for experienced developers.
$10.00
$54.99
RRP $32.99
RRP $54.99
eBook
Print + eBook
$12.99 p/month

Get Access

Get Unlimited Access to every Packt eBook and Video course

Enjoy full and instant access to over 3000 books and videos – you’ll find everything you need to stay ahead of the curve and make sure you can always get the job done.

+ Collection
Free Sample

Book Details

ISBN 139781849694520
Paperback302 pages

About This Book

  • Learn about parallel programming development in OpenCL and also the various techniques involved in writing high-performing code
  • Find out more about data-parallel or task-parallel development and also about the combination of both
  • Understand and exploit the underlying hardware features like processor registers and caches that run potentially tens of thousands of threads across the processors

Who This Book Is For

This book is intended for software developers who have often wondered what to do with that newly bought CPU or GPU they bought other than using it for playing computer games; this book is also for developers who have a working knowledge of C/C++ and who want to learn how to write parallel programs in OpenCL so that life isn’t too boring.

Table of Contents

Chapter 1: Using OpenCL
Introduction
Querying OpenCL platforms
Querying OpenCL devices on your platform
Querying for OpenCL device extensions
Querying OpenCL contexts
Querying an OpenCL program
Creating OpenCL kernels
Creating command queues and enqueuing OpenCL kernels
Chapter 2: Understanding OpenCL Data Transfer and Partitioning
Introduction
Creating OpenCL buffer objects
Retrieving information about OpenCL buffer objects
Creating OpenCL sub-buffer objects
Retrieving information about OpenCL sub-buffer objects
Understanding events and event-synchronization
Copying data between memory objects
Using work items to partition data
Chapter 3: Understanding OpenCL Data Types
Introduction
Initializing the OpenCL scalar data types
Initializing the OpenCL vector data types
Using OpenCL scalar types
Understanding OpenCL vector types
Vector and scalar address spaces
Configuring your OpenCL projects to enable the double data type
Chapter 4: Using OpenCL Functions
Introduction
Storing vectors to an array
Loading vectors from an array
Using geometric functions
Using integer functions
Using floating-point functions
Using trigonometric functions
Arithmetic and rounding in OpenCL
Using the shuffle function in OpenCL
Using the select function in OpenCL
Chapter 5: Developing a Histogram OpenCL program
Introduction
Implementing a Histogram in C/C++
OpenCL implementation of the Histogram
Work item synchronization
Chapter 6: Developing a Sobel Edge Detection Filter
Introduction
Understanding the convolution theory
Understanding convolution in 1D
Understanding convolution in 2D
OpenCL implementation of the Sobel edge filter
Understanding profiling in OpenCL
Chapter 7: Developing the Matrix Multiplication with OpenCL
Introduction
Understanding matrix multiplication
OpenCL implementation of the matrix multiplication
Faster OpenCL implementation of the matrix multiplication by thread coarsening
Faster OpenCL implementation of the matrix multiplication through register tiling
Reducing global memory via shared memory data prefetching in matrix multiplication
Chapter 8: Developing the Sparse Matrix Vector Multiplication in OpenCL
Introduction
Solving SpMV (Sparse Matrix Vector Multiplication) using the Conjugate Gradient Method
Understanding the various SpMV data storage formats including ELLPACK, ELLPACK-R, COO, and CSR
Understanding how to solve SpMV using the ELLPACK-R format
Understanding how to solve SpMV using the CSR format
Understanding how to solve SpMV using VexCL
Chapter 9: Developing the Bitonic Sort with OpenCL
Introduction
Understanding sorting networks
Understanding bitonic sorting
Developing bitonic sorting in OpenCL
Chapter 10: Developing the Radix Sort with OpenCL
Introduction
Understanding the Radix sort
Understanding the MSD and LSD Radix sorts
Understanding reduction
Developing the Radix sort in OpenCL

What You Will Learn

  • How to use OpenCL
  • Understand data partitioning and transfers in OpenCL
  • Understand OpenCL data types
  • Learn about OpenCL functions including math, atomic, threading model, data transfer, and so on
  • Develop a histogram in OpenCL
  • Learn how to develop Sobel edge detection in OpenCL for image processing
  • Develop the Matrix Multiplication and the Sparse Matrix Vector Multiplication in OpenCL
  • Learn to develop Bitonic sort and Radix sort in OpenCL

In Detail

OpenCL (Open Computing Language) is the first royalty-free standard for cross platform, parallel programming of modern processors found in personal computers, servers, mobiles, and embedded devices. OpenCL greatly improves speed and responsiveness for a wide spectrum of applications in numerous market categories, from gaming and entertainment to scientific and medical software. OpenCL has proved itself to be versatile in that it now runs on not only operating systems like Windows and Linux powered by Intel and AMD processors, but also on low power chips like ARM, and it has also been adopted by processor manufacturers like ARM Corp, Vivante, and Altera, among others.

OpenCL Parallel Programming Development Cookbook was designed to be practical so that we achieve a good balance between theory and application. Learning to program in a parallel way is relatively easy, but to be able to take advantage of all of the resources available to you efficiently is quite different. You need to be shown not only application, but also the theory behind it.

This book is roughly in two parts, where the first part is the fundamentals of OpenCL parallel development and the second part is the various algorithms we will explore with you. Each part is packed with many code samples and illustrations to demonstrate various concepts. The first part is essential for a beginner to not only program in parallel, but also to think in parallel and become equipped with the mental model with which to tackle parallel programming. The second part consists of seven different algorithms that the author has identified; you will learn various parallel programming techniques that experts have used in the past 60 years that are applicable to OpenCL.

This book will demonstrate how you think in parallel by illustrating and demonstrating programming techniques like data partitioning, thread coarsening, register tiling, data pre-fetching, and algorithm transformation. These techniques are demonstrated in the seven algorithms you’ll be shown, from image processing and solving sparse linear systems to in-memory sorting.
OpenCL Parallel Programming Development Cookbook combines recipes, illustrations, code, and explanations to allow you to learn the essentials of parallel programming in OpenCL, and the author has added in enough math so that the readers understand the motivation and can also lay the foundation upon which they will begin their own exploration.

Authors

Table of Contents

Chapter 1: Using OpenCL
Introduction
Querying OpenCL platforms
Querying OpenCL devices on your platform
Querying for OpenCL device extensions
Querying OpenCL contexts
Querying an OpenCL program
Creating OpenCL kernels
Creating command queues and enqueuing OpenCL kernels
Chapter 2: Understanding OpenCL Data Transfer and Partitioning
Introduction
Creating OpenCL buffer objects
Retrieving information about OpenCL buffer objects
Creating OpenCL sub-buffer objects
Retrieving information about OpenCL sub-buffer objects
Understanding events and event-synchronization
Copying data between memory objects
Using work items to partition data
Chapter 3: Understanding OpenCL Data Types
Introduction
Initializing the OpenCL scalar data types
Initializing the OpenCL vector data types
Using OpenCL scalar types
Understanding OpenCL vector types
Vector and scalar address spaces
Configuring your OpenCL projects to enable the double data type
Chapter 4: Using OpenCL Functions
Introduction
Storing vectors to an array
Loading vectors from an array
Using geometric functions
Using integer functions
Using floating-point functions
Using trigonometric functions
Arithmetic and rounding in OpenCL
Using the shuffle function in OpenCL
Using the select function in OpenCL
Chapter 5: Developing a Histogram OpenCL program
Introduction
Implementing a Histogram in C/C++
OpenCL implementation of the Histogram
Work item synchronization
Chapter 6: Developing a Sobel Edge Detection Filter
Introduction
Understanding the convolution theory
Understanding convolution in 1D
Understanding convolution in 2D
OpenCL implementation of the Sobel edge filter
Understanding profiling in OpenCL
Chapter 7: Developing the Matrix Multiplication with OpenCL
Introduction
Understanding matrix multiplication
OpenCL implementation of the matrix multiplication
Faster OpenCL implementation of the matrix multiplication by thread coarsening
Faster OpenCL implementation of the matrix multiplication through register tiling
Reducing global memory via shared memory data prefetching in matrix multiplication
Chapter 8: Developing the Sparse Matrix Vector Multiplication in OpenCL
Introduction
Solving SpMV (Sparse Matrix Vector Multiplication) using the Conjugate Gradient Method
Understanding the various SpMV data storage formats including ELLPACK, ELLPACK-R, COO, and CSR
Understanding how to solve SpMV using the ELLPACK-R format
Understanding how to solve SpMV using the CSR format
Understanding how to solve SpMV using VexCL
Chapter 9: Developing the Bitonic Sort with OpenCL
Introduction
Understanding sorting networks
Understanding bitonic sorting
Developing bitonic sorting in OpenCL
Chapter 10: Developing the Radix Sort with OpenCL
Introduction
Understanding the Radix sort
Understanding the MSD and LSD Radix sorts
Understanding reduction
Developing the Radix sort in OpenCL

Book Details

ISBN 139781849694520
Paperback302 pages
Read More