Sieve C++ Parallel Programming System - Parallelization and Scalability

Parallelization and Scalability

The sieve compiler can split code within a sieve block into chunks either implicitly or explicitly though a 'splithere' statement. For instance, the following example shows parallelizaing a loop:

sieve { for (iterator i(0); iThe compiler will implicitly add a splitpoint above the for loop construct body, as an entry point. Similarly one will be added after as an exit point.

In the Sieve System, only local variables to the sieve block scope may have dependencies. However, these dependencies must not cross splitpoints; they will generate compiler warnings. In order to parallelize this loop, a special 'Iterator' class may be used in place of a standard integer looping counter. It is safe for parallelization, and the programmer is free to create new Iterator classes at will . In addition to these Iterator classes, the programmer is free to implement classes called 'Accumulators' which are used to carry out reduction operations.

The way the Iterator classes are implemented opens up various means for scalability. The Sieve Parallel Runtime employs dynamic speculative execution when executing on a target platform. This can yield very good speedups, however running on a single core machine can incur overheads .

Read more about this topic:  Sieve C++ Parallel Programming System