BMDFM automatically identifies and exploits parallelism due to the static and mainly dynamic scheduling of the dataflow instruction sequences derived from the formerly sequential program.
Current parallel shared memory SMPs are complex machines, where a large number of architectural aspects must be addressed simultaneously to achieve high performance.
Hence, the most challenging task is to find an efficient way to harness power of multi-core processors for processing an application program in parallel.
The main feature of BMDFM is to provide a conventional programming paradigm at the top level, so-called transparent dataflow semantics.
Suppose that above code fragment now is nested in a loop: The dataflow engine of BMDFM will keep variables "a" and "b" under unique contexts for each iteration.
BMDFM is built as a hybrid of several architectural principles: An application program (input sequential program) is processed in three stages: preliminary code reorganization (code reorganizer), static scheduling of the statements (static scheduler) and compiling/loading (compiler, loader).
The output after the static scheduling stages is a multiple clusters flow that feeds the multithreaded engine via the interface designed in a way to avoid bottlenecks.
The ring buffer service processes (IORBP PROC) move data into the DB and instructions into the OQ.
The operation queue service processes (OQ PROC) tag the instructions as ready for execution if the required operands' data is accessible.
The context is a special unique identifier representing a copy of data within different iteration bodies accordingly to the tagged-token dataflow architecture.
In order to allow several processes accessing the same data concurrently, the BMDFM dynamic scheduler locks objects in the shared memory pool via SVR4/POSIX semaphore operations.