What is BMDFM?
BMDFM (Binary Modular DataFlow Machine) is software, which enables running an application in parallel on shared memory symmetric multiprocessors (SMP) using the multiple processor cores to speed up the execution of single applications.
BMDFM automatically identifies and exploits parallelism due to the static and mainly DYNAMIC SCHEDULING of the data flow instruction sequences derived from the formerly sequential program ensuring unique parallel correctness.
No directives for parallel execution are required!
No highly knowledgeable parallel programmers are required!
[ top ]
What does BMDFM provide to a user?
A user understands BMDFM as a virtual machine, which runs every statement of an application program in parallel having all parallelization and synchronization mechanisms fully transparent. The statements of an application program are normal operators, which any singlethreaded program might consist of - they are variable assignments, conditional executions, loops, function calls, etc. BMDFM has a rich set of standard operators/functions, which can be extended by user functions written in C/C++.
In comparison with the recent general methodology of sequential code parallelization, which is based on static analysis, BMDFM uses dynamic scheduling to define and to run code fragments in parallel. It means that data computed at run time will define further branches for parallel processing (DataFlow principle). It also means that loops of an application program will be dynamically unrolled to process several iterations in parallel.
[ top ]
Which granularity of parallelism is used in BMDFM?
BMDFM exploits fine-grain parallelism. All instructions of an application will be processed in parallel. In addition, it is possible to exploit coarse-grain parallelism that will decrease costs spent on dynamic scheduling. In order to achieve this a portion of C code can be defined as a user function, which will be treated by the dynamic scheduler as one seamless instruction.
[ top ]
Which platforms may run BMDFM?
Every machine supporting ANSI C and POSIX/SVR4-IPC may run BMDFM.
Obviously, BMDFM is able to accelerate the execution time of an application only when installed on a multiprocessor computer implementing an SMP paradigm (hardware mapping of distributed memory into virtual shared memory, cache coherent non-uniform memory access ccNUMA, UMA!, etc.)
BMDFM is provided as compiled multi-threaded versions for:
A machine with one CPU can be used for development and test purposes only as it is not possible to get real acceleration on one CPU. But as soon the application program has reached a certain state of maturity it can be moved to BMDFM running on a wide range of multicore/many-core computers (from tiny embedded devices to multiprocessor big iron mainframes).
- x86: Linux/32, FreeBSD/32, OpenBSD/32, NetBSD/32, MacOS/32, SunOS/32, UnixWare/32, Minix/32, Android/32, Win-UWIN/32, Win-SFU-SUA/32;
- x86-64: Linux/64, FreeBSD/64, OpenBSD/64, NetBSD/64, MacOS/64, SunOS/64, Android/64;
- VAX: Ultrix/32;
- Alpha: Tru64OSF1/64, Linux/64, FreeBSD/64;
- IA-64: HP-UX/32, HP-UX/64, Linux/64, FreeBSD/64;
- XeonPhiMIC: Linux/64;
- MCST-Elbrus: Linux/32, Linux/64;
- PA-RISC: HP-UX/32, HP-UX/64, Linux/32;
- SPARC: SunOS/32, SunOS/64, Linux/32, Linux/64;
- MIPS: IRIX/32, IRIX/64, Linux/32, Linux/64;
- MIPSel: Linux/32, Linux/64, Android/32, Android/64;
- PowerPC: AIX/32, AIX/64, MacOS/32, MacOS/64, Linux/32, Linux/64, FreeBSD/32, FreeBSD/64;
- PowerPCle: Linux/32, Linux/64;
- S/390: Linux/32, Linux/64;
- M68000: Linux/32;
- ARM: Linux/32, Linux/64, Android/32, Android/64;
- ARMbe: Linux/64;
- and a limited single-threaded version for x86: Win/32.
[ top ]