OpenCL is a framework for writing programs that execute across heterogeneous platforms consisting of CPUs, GPUs, and other processors. It uses a data-parallel programming model where the same program code, known as a kernel, is executed over multiple processing elements. OpenCL provides abstractions for platform setup, memory management, kernel execution and synchronization. Programs are compiled at runtime for different devices. This allows writing portable code that can leverage multiple processors to accelerate computationally intensive applications.