HetExchange: Encapsulating heterogeneous CPU-GPU parallelism in JIT compiled engines