1. A method performed by a computer system, the method comprising: translating a first portion of general purpose data parallel code that is intended for execution on one or more data parallel devices into first data parallel device source code wherein the first portion includes an annotation that identifies a kernel function that is intended for execution on the one or more data parallel devices; translating a second portion of the general purpose data parallel code that is intended for execution on the one or more data parallel devices into second data parallel device source code; binding the first and the second data parallel device source codes into a single self-contained data parallel device source code unit based on a generated set of binding descriptors for a set of kernel functions annotated as device parallel device code, by traversing a call graph formed by the set of binding descriptors; generating a data parallel device executable from the self-contained data parallel device code unit; and merging the data parallel device executable into a general purpose executable, wherein at least one of the kernel functions uses a type defined by the general purpose code and the type is not annotated as data parallel device code.