Published:03/03/2020 Last Updated:03/02/2020
1. Overview
2. Introduction
Intel® SDK for OpenCL™ Applications, and the OpenCL™ Tools component of Intel® System Studio, are development vehicles for OpenCL™ development on Intel® Graphics Technology and Intel® CPUs. The SDK tools include three layers of components to enable the developer stack.
The Intel® SDK for OpenCL™ Applications does not contain any kernel mode components.
3. Basic Example
A functioning OpenCL™ application (depicted in green) can be built with the SDK components like so:
There are various other considerations when writing and executing OpenCL™ applications. Explore the Khronos* reference on OpenCL™ registry page for more detail. Also, see the Intel® SDK for OpenCL™ Applications 2020 release notes.
4. Production Examples
The following three examples describe SDK setup for different OpenCL™ target devices. More detail is shown for the components at each layer. Note: Intel® FPGA devices are not mentioned here. For Intel® FPGA developer resources and guidance, see the fpgasoftware.intel.com portal.
Intel® CPU / Windows* OS or Linux* OS
The first example shows CPU targeting with Intel® CPU Runtime for OpenCL™ Applications 18.1, an OpenCL™ implementation suitable for production deployments. Note: this scenario applies similarly to both supported Windows* OS and supported Linux* OS:
The user application (.c/.cpp) uses the OpenCL™ ICD Loader reference library (libOpenCL.so/OpenCL.dll) to select the CPU target device afforded by the Intel® CPU Runtime for OpenCL™ Applications 18.1. The user application (.cpp) builds and stages the kernel program (.cl) through the CPU implementation. The kernel is executed on the CPU directly. Neither graphics device nor separate coprocessor device is used.
For more information about the Intel® CPU Runtime for OpenCL™ Applications please see the Intel® article for OpenCL™ runtimes. Note that Experimental Intel® CPU Runtime for OpenCL™ Applications with SYCL support is available. It supports the Intel oneAPI: DPC++ Compiler Beta. At the time of publishing for this article, it is actively maintained and updated.
The Intel® Graphics Technology driver package for Windows* OS also contains the Intel® CPU Runtime for OpenCL™ Applications distribution described in this example. Windows* OS systems may have this package installed by default. For compatibility and bug fixes consider:
To see a software development walkthrough for:
Intel® Graphics Technology / Windows* OS
This second example shows the Intel® SDK for OpenCL™ Applications 2020 targeting Intel® Graphics Technology with Windows* OS.
Component boxes highlighted in:
Here the user application (.c/.cpp) uses the OpenCL™ ICD Loader reference library (OpenCL.dll) to select the Intel® Graphics Technology device exposed by the Intel® Graphics Compute Runtime for OpenCL™ Driver. The user application (.c/.cpp) build and stages the kernel program (.cl) through the Intel® Graphics Technology implementation. The kernel is executed on Intel® Graphics Technology hardware.
This OpenCL™ implementation is distributed as part of the Intel® Graphics Technology driver package for Windows* OS. The Intel® graphics driver package for Windows* OS also contains the CPU standalone distribution described in the previous example. Windows* OS distributions installed on systems with Intel® processors with Intel® Graphics Technology may have this package installed be default. Please consider updating this package from either downloadcenter.intel.com or from the system vendor. See more information in the Intel® Graphics Technology deployment section at the deployment page.
To see a software development walkthrough for Windows* OS visit the Intel® SDK for OpenCL™ Applications 2020 Windows* OS getting started guide.
Intel® Graphics Technology / Linux* OS
The third example shows SDK development targeting Intel® Graphics Technology on Linux* OS:
The user application (.c/.cpp) uses the OpenCL™ ICD Loader reference library (libOpenCL.so) to select the Intel® Graphics Technology device afforded by the Intel® Graphics Compute Runtime for OpenCL™ Driver. The user application (.c/.cpp) ships the kernel program (.cl) through the Intel® Graphics Compute Runtime for OpenCL™ Driver implementation. The kernel program is executed on Intel® Graphics Technology hardware. See the Intel® SDK for OpenCL™ Applications 2020 Linux* OS getting started guide to get familiar with the tool interface and building and executing OpenCL™ programs.
The Intel® Graphics Compute Runtime for OpenCL™ Driver, known as “NEO”, is an opensource and actively maintained OpenCL™ implementation. It was introduced for Intel® Graphics Technology GEN8 microarchitecture Broadwell processors as well as GEN9 platforms and later. Intel® SDK for OpenCL™ Applications 2019 and newer is intended to support development with the NEO implementation and move away from the legacy SRB5.0 implementation. For more on NEO, view the OpenCL™ runtimes for Intel® processors article and the NEO github page.
Note: A standalone CPU Runtime is available.
5. Misc and Next Steps
Users looking to build Intel® oneAPI: DPC++/SYCL* programs with existing OpenCL kernels can see the article on interoperability.
For more tools capable of heterogeneous analysis and profiling, consider Intel® VTune™ Profiler, found:
For lightweight development help in monitoring and debugging OpenCL™ applications see the Intercept Layer for OpenCL™ Applications open source project.
For learning about Intel® Processor SKU’s featuring Intel® Graphics Technology, please see the ark database.
*OpenCL and the OpenCL logo are trademarks of Apple Inc. used by permission by Khronos.
*Other names and brands may be claimed as the property of others
Intel's compilers may or may not optimize to the same degree for non-Intel microprocessors for optimizations that are not unique to Intel microprocessors. These optimizations include SSE2, SSE3, and SSSE3 instruction sets and other optimizations. Intel does not guarantee the availability, functionality, or effectiveness of any optimization on microprocessors not manufactured by Intel. Microprocessor-dependent optimizations in this product are intended for use with Intel microprocessors. Certain optimizations not specific to Intel microarchitecture are reserved for Intel microprocessors. Please refer to the applicable product User and Reference Guides for more information regarding the specific instruction sets covered by this notice.
Notice revision #20110804