1. A computer implemented method comprising: receiving, from a host application executing on a host processor, a request to create a kernel containing executable code corresponding to source code for a task in the host application; creating the kernel for execution on a compute device specified by the host application, the compute device selected by the host application from one or more compute identifiers received by the host application in response to a request to identify compute devices that match a processing requirement for the task; receiving, from the host application, a request to execute the kernel; and queuing the kernel on an execution queue associated with the selected compute device.