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.