  Task-based programming models have demonstrated their efficiency in the
development of scientific applications on modern high-performance platforms.
They allow delegation of the management of parallelization to the runtime
system (RS), which is in charge of the data coherency, the scheduling, and the
assignment of the work to the computational units. However, some applications
have a limited degree of parallelism such that no matter how efficient the RS
implementation, they may not scale on modern multicore CPUs. In this paper, we
propose using speculation to unleash the parallelism when it is uncertain if
some tasks will modify data, and we formalize a new methodology to enable
speculative execution in a graph of tasks. This description is partially
implemented in our new C++ RS called SPETABARU, which is capable of executing
tasks in advance if some others are not certain to modify the data. We study
the behavior of our approach to compute Monte Carlo and replica exchange Monte
Carlo simulations.
