In recent years, several libraries/software projects have appeared that offer some form or another of general-purpose data-driven shared-memory parallelism.
The main idea is that instead of writing an explicitly threaded code, programmers implement their algorithms as inter-dependent tasks which are then scheduled dynamically by a general-purpose middleware on a shared-memory machine.
Examples of such libraries are:
QUARK: Originally designed for the MAGMA parallel linear algebra library, seems to have been used for a parallel Fast Multipole Method too.
Cilk: Originally an MIT-based project, now supported by Intel, implemented as language/compiler extensions to C, used in the Cilkchess computer chess software and experimentally in FFTW.
SMP superscalar: Developed at the Barcelona Supercomputing Center, similar to Cilk in many respects, based on
#pragma
extensions.StarPU: Similar library based "codelets" which can be compiled for and scheduled on several different architectures, including GPUs.
OpenMP tasks: As of version 3.0, OpenMP introduced "tasks" that can be scheduled asynchronously (see Section 2.7 of the specification).
Intel's Threading Building Blocks: Uses C++ classes to create and launch asynchronous tasks, see Section 11 of the Tutorial.
OpenCL: Supports task-based parallelism on multi-cores.
While there is a lot of literature describing the inner working of these libraries/language extensions and their application to specific problems, I have only come across very few examples of them being used in practice in scientific computing applications.
So here's the question: Does anybody know of scientific computing codes using any of these libraries/language extensions, or similar, for shared-memory parallelism?