Patent ID: 8443348

Claim:
A computer-implemented method, comprising: in a runtime system configured to run on a parallel-processing computer system that includes multiple processing elements, further including a first processing element and a second processing element, the two processing elements having different instruction set architectures and memory storing one or more programs for execution by the multiple processing elements, at runtime: receiving from an application executing in conjunction with the runtime system one or more application program interface calls to the runtime system, the application program interface calls comprising one or more operation requests directed to the parallel-processing computer system; selecting an application program interface module of the runtime system, from among a plurality of application program interface modules, based on a programming language of the application; generating, using the application program interface module, a programming language-independent, processor-independent intermediate representation for at least one of the one or more operation requests, wherein the intermediate representation includes one or more objects corresponding to the at least one of the one or more operation requests and information for generating optimized compute kernels for the first processing element and the second processing element, respectively; dynamically selecting one of the first processing element and the second processing element on which to perform the one or more operation requests of the intermediate representation; and dynamically preparing one or more compute kernels for the intermediate representation in accordance with the instruction set architecture of the selected processing element, wherein the one or more compute kernels are configured to execute on the selected processing element, and wherein dynamically preparing the one or more compute kernels includes: selecting from a source code library one or more source code segments corresponding to the at least one of the one or more operation requests, and dynamically compiling the one or more source code segments into the one or more compute kernels, or selecting from a binary code library the one or more compute kernels corresponding to the at least one of the one or more operation requests, wherein the binary code library includes a plurality of pre-compiled compute kernels and each pre-compiled compute kernel is configured to be executed on at least one of the one or more types of processing elements.