|
DeinoMPI is an implementation of MPI-2 for Microsoft Windows. This is
the release version 1.1.0 with downloads for both Win32
and Win64 machines.
What is DeinoMPI and who should be interested?
DeinoMPI is an implementation of the MPI-2 standard for parallel
computing or more generally it is system level middle-ware for high
performance parallel computing on Microsoft Windows systems.
1) DeinoMPI provides the libraries necessary for software developers to
write parallel applications that conform to the
MPI-2 standard for parallel
computing. Software developers who wish to develop new parallel
applications or wish to add parallel capabilities to existing software would
benefit from using DeinoMPI. The libraries provided support a wide
range of C, C++ and Fortran compilers.
2) DeinoMPI also provides a process manager used to start processes on
multiple machines in a cluster remotely. Microsoft Windows does not
provide native capability to start user applications on remote machines.
DeinoMPI provides a secure mechanism to do just that. The primary
purpose of the DeinoMPI process manager is to set up the environment and
launch processes used in MPI jobs but it is not restricted to this
functionality. It can launch any application remotely on behalf of the
user.
The following users will benefit from DeinoMPI: Businesses that
develop software and wish to add parallel
capabilities to increase the performance of their software. Research
institutions that have parallel software codes that they want to run on
their Windows machines. Universities or other educational institutions
that teach courses on parallel computing. University or research labs
that run computationally intensive software and wish to use parallel
versions of their software to better utilize their computer resources.
Students or hobbyists that wish to write parallel programs.
I'm already knowledgeable about MPI and software development so give me
some technical details of DeinoMPI. OK, here you go:
DeinoMPI is a derived work from MPICH2 provided by Argonne National Lab.
By starting with the MPICH2 code base DeinoMPI inherits a stable and complete implementation of the
MPI-2 standard. DeinoMPI heavily
modifies the original code base and does not
rely on anything from Argonne National Lab. Everything needed to build and
execute MPI applications can be downloaded here. DeinoMPI extends MPICH2 with the following support:
USABILITY:
- UNICODE support. All the functions that take char* arguments now
have a second version that takes wchar_t*. DeinoMPI is implemented
using wide characters and provides wrapper functions for ASCII char *
strings. The name conversion is taken care of automatically with
macros in mpi.h so all the user program has to do is define UNICODE and
compile.
These are the dual implementation functions: MPI functions with string arguments
- Singleton init supports MPI-2 spawn functions. DeinoMPI allows single processes started without the process
manager to call the spawn functions just as if they had been started by mpiexec. In other words, if you start your application like this, “mpiexec
–n 1 myapp.exe”, or like this, “myapp.exe”, both applications can call
MPI_Comm_spawn.
- Directory staging. You can automatically copy a directory with
all your data files and even the MPI executable out to the worker nodes
and then start your job from this directory. After the job
completes you can select to have any new or modified files in the
directories on the worker nodes copied back to the source directory.
Any files on the worker nodes copied back to the source directory are
automatically renamed to avoid collisions if necessary.
OPTIMIZATIONS:
- Collective operations have been optimized for clusters of SMP machines.
The collective operations have been optimized to minimize network traffic
when multiple processes reside on each node. The new functions only
affect MPI_COMM_WORLD but in the future this support will be extended to
derived communicators. Currently this functionality has to
be turned on by an environment variable. If you want to try it out add
"-env MPICH_USE_SMP_OPTIMIZATIONS 1" to your mpiexec command line.
SECURITY:
- A new startup mechanism and process manager. The DeinoPM (process
manager) uses public and private keys to establish secure connections
between machines in the cluster. All traffic between the process
managers is encrypted. Each user controls their own keys (similar to
the way they would for ssh).
- The process manager can launch processes that have been compiled for
either DeinoMPI or MPICH2 1.0.3 or 1.0.5. It is preferred that you compile all
your applications for DeinoMPI to take advantage of its improvements but if
you have an existing installation of MPICH2 1.0.3/5 you can use mpiexec from
the DeinoPM process manager to start those processes as well.
DEBUGGING:
- An abort callback function has been added. This allows for a
function to be called asynchronously when a job is about to be aborted.
The current implementation uses this function to write out logging buffers
to disk before the process is killed. The subsequent log files contain
more data as a result.
- An MPI message queue printing callback function has been added.
While an MPI application is running you can request that the internal MPI
message queues be printed out. This can be helpful if your application
hangs and you want to see what MPI messages the processes are waiting on.
- A runtime option to save a textual description of each MPI function
call in a ring has been added. The user can select to print this
function call history while the application is running. This can
be helpful while debugging applications by showing the recent MPI
function calls for each process.
The future of DeinoMPI:
Here are a few projects being developed:
- MPICH2 to DeinoMPI wrapper. Launch MPICH2 applications on machines where
DeinoMPI is installed without re-compiling the application. The
current process manager requires that the MPICH2 dlls be installed on the
machine in order to launch MPICH2 applications but this wrapper will allow
existing MPICH2 applications to call the DeinoMPI routines directly without
MPICH2 being installed at all.
- Binary Win32-Win64 compatibility. Clusters of 32bit and 64bit
Windows will be able to run jobs that span both machines.
- Extend MPI to use MPI_Aint in all the MPI functions instead of int.
This will allow MPI buffers larger than 2 gigabytes to be sent between
processes. Note: It appears that all current systems limit the physical
memory to 4Gb per core. So this means that even on 64bit systems it is
not possible to allocate more than 4Gbytes in a single contiguous block.
- A scheduler to accompany the DeinoPM process management mechanism.
There are some more projects that could be added in the future:
- Parallel scratch file system for Windows
- Extend MPI to use threads as the basic processing element instead of
processes.
- Linux/Unix build so that jobs can span Windows and Linux machines.
|