  We describe an approach that uses combinatorial optimization and machine
learning to share the work between the host and device of heterogeneous
computing systems such that the overall application execution time is
minimized. We propose to use combinatorial optimization to search for the
optimal system configuration in the given parameter space (such as, the number
of threads, thread affinity, work distribution for the host and device). For
each system configuration that is suggested by combinatorial optimization, we
use machine learning for evaluation of the system performance. We evaluate our
approach experimentally using a heterogeneous platform that comprises two
12-core Intel Xeon E5 CPUs and an Intel Xeon Phi 7120P co-processor with 61
cores. Using our approach we are able to find a near-optimal system
configuration by performing only about 5% of all possible experiments.
