Interworking MPI between Windows and Linux - mpi

I have several Windows box and Linux box interconnected with Infiniband, and I need to run MPI jobs in both environment, does anyone know what's the best way to interwork them ?
Currently, I am considering using the beta release of windows binary of open MPI. Maybe I need to add additional things into my hpc sw stack ? Or should I just forget about MPI and directly code in a lower layer for the getting the windows part to work, since there are few jobs that needs windows anyway.
Any idea is appreciated. Many thanks!

So I dig through some of forums and find that
openMPI currently does not support interworking of task spawning between windows and linux systems, however MpiCh2 seems to be capable of interworking task spawning. For sending and receiving messages using MPI send, I will need to investigate more

Related

MPI messages across libraries

Can you send MPI messages across two libraries?
Example - If I have MS-MPI installed on a windows machine and then Open-MPI on a linux cluster (Same Network), can I get messages between code running on the two different OS.
Basically multiple program multiple data MPMD but using Windows and Linux resources.
Just need to know if this is possible, and if so any info would be nice, but not needed.
No, that is not possible. You will even get into great trouble if you try this with different versions or configurations of one implementation.
MPI is targeted at homogeneous installations on HPC systems. The communication protocol is not standardized, only the programming interface is.
In general: no. This is not specified within the MPI standard, and most implementations do not support such jobs. It is a rather uncommon use case, I guess.
However, Intel MPI does provide cross-os launching of jobs, see:
https://software.intel.com/en-us/mpi-developer-guide-linux-cross-os-launch-mode
Some detail:
Intel MPI, as well as other commercial MPI implementations are based on the MPICH open source project. I am not sure if cross-os launching can be achieved somehow via MPICH, though. A quick google research only provided negative, but possibly outdated results, e.g.
https://lists.mcs.anl.gov/pipermail/mpich2-dev/2005-July/000085.html

Can my application be compatible with multiple versions of MPI

I have an application that uses MPI_COMM_WORLD. I'm building the application with HPC Pack 2008 R2 MPI and everything works fine on my local and most PCs.
Occasionally when installing on a different PC I will run into issues with competing versions of MPI (e.g. Intel). This is usually solved by prepending my HPC version to the PATH.
I have recently hit an issue that I can't work around.
My MPI is first in the path, but I'm getting an error "link library mkl_intel_thread.dll" cannot be found. This tells me the app is looking at the Intel version.
where mpiexec
mkl_thread not found
So my general questions are:
Is there a version of MPI that is compatibly with all others?
Or is there a way to compile my application in a way that I can
ensure it looks for the right MPI library?
Or is there a way to compile to make the application MPI agnostic?
Thanks in advance
The advantage of MPI is the MPI standard. This means as long as you stick to a certain version of the MPI standard, your programm should be compatible with MPI standard compliant implementations.
The missing Math Kernel Library has nothing to do with MPI incompatibility.

Installing MPI for Windows

I am trying to install MPI for Windows 8, so when I searched net I got steps for installing it on XP/7 but not for windows 8. The link is: http://swash.sourceforge.net/online_doc/swashimp/node9.html
But firstly when I have to allow mpi.exe and smpd.exe to communicate through firewall these exe files are not listed.
Secondly, when I run cmd(as administrator) and type : "smpd -install",
it says : "Unknown option: -install". I guess the command for windows 8 is something else.
So I will be really grateful if anyone helps with it because I'm not able to proceed further.
Side note before I start, MPI is a standard, not a library that you install. MPICH, Open MPI, Intel MPI, MS-MPI, etc. are all implementations of that standard. When you say you're trying to do X with MPI and you're asking for help, mention which implementation (and version) you're using.
Based on your question, I'm assuming that you're trying to install MPICH, though which version is unclear. MPICH hasn't supported Windows since version 1.4.1p and even that version doesn't have any support from the MPICH team anymore as all of the Windows experts are now gone. I'd suggest that you take a look at one of the implementations that do currently support Windows. The only two I know of are MS-MPI (free) and Intel MPI (paid - Update: Now free for most users), though there are probably others out there that I don't know about. If you still have trouble after trying one of those implementations, they have their own support teams that can help you with your problem.
I am not sure which version of MSMPI you were talking about but here is the webpage you should download the latest MSMPI which also supports Win 8.1.
You just need to double click and follow the instructions of installer.

What exactly is Simple Multi-Purpose Daemon?

I am just starting to learn MPI. The implementation is MPICH2.
The first thing I encountered is SMPD i.e Simple Multi-Purpose Daemon.
I want to know what exactly it is and how it is related to MPI
Most of the links on internet talks about its usage, but not the internal details. At max I know that:
Multipurpose daemon* (MPD) is the IntelĀ® MPI Library process
management system for starting parallel jobs.
Where can I learn more about it ?
SMPD is one implementation of parallel process manager, i.e. a system for launching/monitoring processes in a parallel job. SMPD was specifically useful for MPI jobs on Windows or a mix of Windows and Unix. See the MPICH FAQ: http://wiki.mpich.org/mpich/index.php/Frequently_Asked_Questions#Q:_What_are_process_managers.3F
Also note that the newest versions of MPICH use Hydra as the default process manager, and support for Windows has been dropped.

How to ping a remote machine with Qt

I am developping a cross-platform (Windows-Mac-Unix) application using Qt.
This is my first time using this framework so I am discovering it.
I need to ping a distant machine based on its IP address and I can't find a way to perform this task with the Qt framework, though it seems pretty basic...
I've found examples on the web but they use OS-dependant methods, which is precisely what I want to avoid since I have to run on different environments. Isn't there a simple ping command in the Qt framework? And how to use it?
Any help would be much appreciated, thank you in advance.
To my knowledge there is no direct way to ping another system in QT since it requires some superuser privileges in different Operating Systems. So the best way would be to try and establish a connection (preferably TCP) between the two machines.

Resources