About OpenCL for OS X
OpenCL™ (Open Computing Language) is an open standard for cross-platform, programming of modern highly-parallel processor architectures. Introduced with OS X v10.6, OpenCL consists of a C99-based programming language designed for parallelism, a powerful scheduling API, and a flexible runtime that executes kernels on the CPU or GPU. OpenCL lets your application harness the computing power of these processors to improve performance and deliver new features based on compute-intensive algorithms.
In addition to support for the OpenCL 1.1 standard, OS X v10.7 adds integration between OpenCL, Grand Central Dispatch (GCD), and Xcode to make it even easier to use OpenCL in your application.
At a Glance
Using OpenCL is easier than ever as of OS X v10.7:
OpenCL is fully supported by Xcode. The Xcode offline compiler removes a configuration step that used to have to be performed before the kernel could be run and facilitates debugging earlier in the development process. See “Hello World!.”
You can write OpenCL functions in separate files and include them in your Xcode project. You can compile the kernels when your application is built, before it runs. This improves runtime performance.
OpenCL now integrates with GCD, making it easier for you to focus on making your OpenCL kernels more efficient. See “Using Grand Central Dispatch With OpenCL.”
The autovectorizer compiles and accelerates performance of kernels that run on the CPU up to four times without additional effort. The autovectorizer allows you to write one kernel that runs efficiently on both a CPU and a GPU. You can invoke the autovectorizer regardless of whether you are compiling from Xcode or building the kernels at runtime. Or you can disable the autovectorizer if necessary. See “Autovectorizer.”
You can, of course, continue to use code you’ve already written to the OpenCL 1.1 standard. But see “Binary Compatibility Of OpenCL Kernels” for a note about how to handle existing binaries.
Because OpenCL C is based on C99, you are free to process your data in OpenCL C functions as you would in C with few limitations. Aside from support for recursion and function pointers, there are not many language features that C has that OpenCL C doesn’t have. In fact, OpenCL C provides several beneficial features that the C programming language does not offer natively, such as optimized image access functions. OpenCL C has built-in support for vector intrinsics and offers vector data types. The operators in OpenCL C are overloaded, and performing arithmetic between vector data types is syntactically equivalent to performing arithmetic between scalar values. Refer to the The OpenCL Specification for more details on the built-in functions and facilities of the OpenCL C language.
This guide assumes that you program in C and have access to The OpenCL Specification. Although this guide discusses many key OpenCL API functions, it does not provide detailed information on the OpenCL API or the OpenCL C programming language.
The OpenCL Specification, available from the Khronos Group at http://www.khronos.org/registry/cl/ provides information on the OpenCL standard.
The OpenCL Programming Guide by Aaftab Munshi, Benedict Gaster, Timothy G. Mattson, James Fung, and Dan Ginsburg, available from Pearson Education, Inc., is a helpful introduction to the OpenCL language and standard; these topics are not discussed in this book.
For more information about Grand Central Dispatch queues, see Concurrency Programming Guide: Dispatch Queues.