1. A computer implemented method comprising: receiving, during runtime of an application program, a capability requirement via arguments of an API (Application Programming Interface) request specified in source code of the application program for one or more processing devices to execute one or more threads of the application program, wherein the capability requirement includes one or more of: attributes associated with a dedicated texturing hardware support, a double precision floating point arithmetic capability, a dedicated local memory, a stream variable cache, a stream image cache, or synchronization primitives; and in response to the API request, generating one or more compute identifiers during the runtime for use by the one or more threads, at least one of the one or more compute identifiers specifying the processing devices capable of executing the threads according to the capability requirement, wherein the generating comprises matching the capability requirement with a device capability of the one or more processing devices, and determining one or more matched processing devices according to the matching.