The 3.2 release of Paraffin comes with a hefty amount of changes since the not so old 3.1 release:
- The same technique that was applied to iterative work stealing that significanly improved performance, was also applied to the work seeking generics, which also resulted in some performance gains.
- Another benefit of this change is that the work seeking mechanisms are now more hidden inside the generic, and not exposed to client code. As a result, the modifications needed to parallelize a sequential loop is the same for work-sharing, work-seeking, and work-stealing. It mostly just involves wrapping the loop in a nested procedure, and then passing the start and finish indexes of the loop as parameters to the nested procedure.
- A Minimum_Seek parameter replaces the Other_Workers parameter. This parameter indicates the minimum number of iterations that can be “seeked” at one time by an idle worker. This parameter can be left unspecified, in which case, a reasonable default will automatically be assigned.
- As a result of these changes, the Work-seeking iterative tests generally seem to out perform work-stealing, although the differences are usually quite marginal. There are still tests where work-sharing can be best choice, and other tests where work-stealing can come out ahead.
A suite of Ada 2005 generics to facilitate iterative and recursive parallelism for multicore systems and provide safer recursion for single and multicore systems. Includes useful generics for parallel quicksort, fast fourier transform, function integration, and Red-Black trees.