Traditional parallel compilers do not effectively parallelize irregular applications because they contain little looplevel parallelism due to ambiguous memory references. We explore a different source of parallelism, namely Speculative Task Parallelism (STP), where tasks are full procedures and entire natural loops. Through profiling and compiler analysis, we find tasks that are speculatively memory- and control-independent of their neighboring code. We assume a hypothetical speculative machine that parallelizes the tasks via speculative futures, allowing the tasks to be executed in parallel with preceding code when there is a high probability of independence, but no guarantee. We estimate the amount of STP in irregular applications by measuring the number of memory-independent instructions these tasks expose. Across a variety of speculation assumptions, an average of 7 to 22% of dynamic instructions are found within memory-independent tasks.
Barbara Kreaseck, Dean M. Tullsen, Brad Calder