1. A computerized method comprising: receiving, from a host application executing on a host processor, a request to execute, on one or more selected compute devices a computer program corresponding to source code for a task in the host application; creating the computer program for execution on the one or more selected compute devices by compiling the source code, wherein the one or more selected compute devices corresponds to a compute identifier selected by the host application from one or more compute identifiers received by the host application from the host processor in response to a previous request from the host application, the previous request including a processing requirement specified by the host application for the task to cause the host processor to identify one or more compute devices that match the processing requirement for the task and to return compute identifiers for matching one or more compute devices to the host application, the one or more compute devices comprising at least a first processing unit coupled to the host processor and a second processing unit coupled to the host processor, the first processing unit being different than the second processing unit and scheduling a plurality of threads of the compiled computer program for execution, the plurality of threads based on a thread group size.