  This article presents an automatic approach to quickly derive a good solution
for hardware resource partition and task granularity for task-based parallel
applications on heterogeneous many-core architectures. Our approach employs a
performance model to estimate the resulting performance of the target
application under a given resource partition and task granularity
configuration. The model is used as a utility to quickly search for a good
configuration at runtime. Instead of hand-crafting an analytical model that
requires expert insights into low-level hardware details, we employ machine
learning techniques to automatically learn it. We achieve this by first
learning a predictive model offline using training programs. The learnt model
can then be used to predict the performance of any unseen program at runtime.
We apply our approach to 39 representative parallel applications and evaluate
it on two representative heterogeneous many-core platforms: a CPU-XeonPhi
platform and a CPU-GPU platform. Compared to the single-stream version, our
approach achieves, on average, a 1.6x and 1.1x speedup on the XeonPhi and the
GPU platform, respectively. These results translate to over 93% of the
performance delivered by a theoretically perfect predictor.
