This dissertation explores just-in-time (JIT) specialization as an optimization for OpenCL data-parallel compute kernels. It describes the implementation and performance of two extensions to OpenCL, Bacon and Specialization Annotated OpenCL (SOCL). Bacon is a replacement interface for OpenCL that provides improved usability and has JIT specialization built in. SOCL is a simple extension to OpenCL that allows JIT specialization to be applied to OpenCL kernels directly. One implementation of Bacon and two implementations of SOCL are described and benchmarked. Significant speedups are demonstrated when JIT specialization is applied to kernels executing on graphics processing units (GPUs) from AMD and Nvidia.