HPX Smart Executors
  The performance of many parallel applications depends on loop-level
parallelism. However, manually parallelizing all loops may result in degrading
parallel performance, as some of them cannot scale desirably to a large number
of threads. In addition, the overheads of manually tuning loop parameters might
prevent an application from reaching its maximum parallel performance. We
illustrate how machine learning techniques can be applied to address these
challenges. In this research, we develop a framework that is able to
automatically capture the static and dynamic information of a loop. Moreover,
we advocate a novel method by introducing HPX smart executors for determining
the execution policy, chunk size, and prefetching distance of an HPX loop to
achieve higher possible performance by feeding static information captured
during compilation and runtime-based dynamic information to our learning model.
Our evaluated execution results show that using these smart executors can speed
up the HPX execution process by around 12%-35% for the Matrix Multiplication,
Stream and $2D$ Stencil benchmarks compared to setting their HPX loop's
execution policy/parameters manually or using HPX auto-parallelization
techniques.
