Community
cancel
Showing results for 
Search instead for 
Did you mean: 
zp3
Beginner
95 Views

MPI: polling 'passive' rma operations

Jump to solution

Hi,

lately I'm wondering if your implementation of the passive target communication was ever really ment for usage...

Despite the fact that it isn't really passive (since one has to call some mpi functions on the target to get the mpi_win_unlock ever to return), I couldn't even figure out which mpi functions exactly must/can be invoked to achieve the flushing. In the release notes is only written:

The following MPI-2.2 features are not supported by the Intel(R) MPI Library:
o Passive target one-sided communication when  the target process does not call any MPI functions

By now I've tested several 'MPI functions', but the only one that seems to work is a blocking MPI_RECV (and only then if the recv has to wait for the message). - Thats very unsatisfactory

So my question: exist there at least some special functions that I can use for polling the rma window? I know this isn't foreseen of the mpi standard as less as your kind of implementation is, but it would render the whole thing a bit more usefull then it is by now...

Thanks for help!

 

 

0 Kudos
1 Solution
Artem_R_Intel1
Employee
95 Views

Hello,

The following options are available:
1) Try to enable asynchronous progress by setting MPICH_ASYNC_PROGRESS environment variable to 1. This will lead to additional overhead (especially noticeable with rather small message exchanges), but will force target side to poll rma window constantly.
2) MPI_Iprobe may be used to ensure message progression on the target side. The code like “MPI_Iprobe(MPI_ANY_SOURCE, MPI_ANY_TAG, MPI_COMM_WORLD, &flag, MPI_STATUS_IGNORE);” should do the trick. It may be repeated a bunch of times in a cycle depending on application needs.
 

View solution in original post

5 Replies
Artem_R_Intel1
Employee
96 Views

Hello,

The following options are available:
1) Try to enable asynchronous progress by setting MPICH_ASYNC_PROGRESS environment variable to 1. This will lead to additional overhead (especially noticeable with rather small message exchanges), but will force target side to poll rma window constantly.
2) MPI_Iprobe may be used to ensure message progression on the target side. The code like “MPI_Iprobe(MPI_ANY_SOURCE, MPI_ANY_TAG, MPI_COMM_WORLD, &flag, MPI_STATUS_IGNORE);” should do the trick. It may be repeated a bunch of times in a cycle depending on application needs.
 

View solution in original post

zp3
Beginner
95 Views
Thanks for your advice! MPICH_ASYNC_PROGRESS does the job! But for some strange reasons things are becoming very very slow if I'm using more then one node on my system (minutes instead of milliseconds)...
Artem_R_Intel1
Employee
95 Views

Quite significant performance penalties are expected when MPICH_ASYNC_PROGRESS is enabled. Thus, it might be more performance efficient to use MPI_Recv for progression as you did originally.

zp3
Beginner
95 Views

Wel, I get the same issue when using MPI_Recv (I'm actually using a second thread to do this, so I'm using the MPI_THREAD_MULTIPLE level)

Mark_L_Intel
Employee
95 Views

The latest MPI-3 standard contains major extensions and improvements to the Remote Memory Access (RMA). The Intel® MPI Library version 5.0 and above fully supports MPI-3 standard. The “New RMA Interface” chapter in

http://goparallel.sourceforge.net/wp-content/uploads/2014/07/PUM18_Mastering_Performance_with_MPI3.p...

describes support for the real passive target mode. What changed since this publication is that now multi-threaded version of the Intel® MPI library is a default.

You can also look at this presentation https://software.intel.com/en-us/videos/intel-mpi-library-implementation-of-a-new-mpi30-standard-new... (slides and video)

I would also recommend to download Intel® MPI Benchmarks source code from this URL

https://software.intel.com/en-us/articles/intel-mpi-benchmarks

containing new IMB-RMA benchmarks that use passive target communication. For example, please take a look at how IMB_rma_passive_put function is implemented (in file IMB_rma_put.c).

Reply