A parallel computing system comprising: a host processor; one or more compute units coupled to the host processor; a memory coupled to at least one of the host processor and the one or more compute units, wherein a parallel computing program is stored in the memory for execution on the host processor, the parallel computing program comprising a data processing task and including calls to one or more APIs (application programming interface) including a particular API for specifying capability requirements for the compute units to perform the data processing task when the parallel computing program is executing on the host processor, the APIs, when called, causing the host processor to: identify, in response to a call to the particular API, at least one of the compute units associated with capabilities matching the requirements, the identified compute units having compute identifiers; generate (411, 503) executable code for one or more selected compute units from a program object corresponding to a source code for the data processing task, the one or more selected compute units corresponding to compute identifiers selected by the parallel computing program from compute identifiers of matching compute units returned by the host processor in response to the call to the particular API; and load the executable code to be executed concurrently among the selected compute units to perform the data processing task. a host processor; one or more compute units coupled to the host processor; a memory coupled to at least one of the host processor and the one or more compute units, wherein a parallel computing program is stored in the memory for execution on the host processor, the parallel computing program comprising a data processing task and including calls to one or more APIs (application programming interface) including a particular API for specifying capability requirements for the compute units to perform the data processing task when the parallel computing program is executing on the host processor, the APIs, when called, causing the host processor to: identify, in response to a call to the particular API, at least one of the compute units associated with capabilities matching the requirements, the identified compute units having compute identifiers; generate (411, 503) executable code for one or more selected compute units from a program object corresponding to a source code for the data processing task, the one or more selected compute units corresponding to compute identifiers selected by the parallel computing program from compute identifiers of matching compute units returned by the host processor in response to the call to the particular API; and load the executable code to be executed concurrently among the selected compute units to perform the data processing task. identify, in response to a call to the particular API, at least one of the compute units associated with capabilities matching the requirements, the identified compute units having compute identifiers; generate (411, 503) executable code for one or more selected compute units from a program object corresponding to a source code for the data processing task, the one or more selected compute units corresponding to compute identifiers selected by the parallel computing program from compute identifiers of matching compute units returned by the host processor in response to the call to the particular API; and load the executable code to be executed concurrently among the selected compute units to perform the data processing task.