Hi all,
the wiki page I mentioned regarding the MPI_T Event/Callback interface
is at:
https://github.com/mpiwg-tools/tools-issues/wiki/MPI_T-Events
Unfortunately, like so many other things, the content I had in mind
actually is still in my mind, and I have to to a braindump in the next
days.
I'll let you know when I added relevant content.
Sorry,
Marc-Andre
--
Marc-Andre Hermanns
Jülich Aachen Research Alliance,
High Performance Computing (JARA-HPC)
Jülich Supercomputing Centre (JSC)
Schinkelstrasse 2
52062 Aachen
Germany
Phone: +49 2461 61 2509 | +49 241 80 24381
Fax: +49 2461 80 6 99753
www.jara.org/jara-hpc
email: hermanns(a)jara.rwth-aachen.de
We discussed this in the Chicago Feb 2016 MPI Forum meeting, during the tools WG.
The consensus was that we don't need to add any text to address this. The value of a variable can change at any time -- even 2 consecutive calls to cvar_read could return different values if someone else wrote a new value.
So: no guarantees are given about the read values. No text to add here.
> On Feb 4, 2016, at 12:27 PM, Jeff Squyres (jsquyres) <jsquyres(a)cisco.com> wrote:
>
> Nathan Hjelm and I stumbled across a question regarding MPI_T today: what guarantees does MPI_T provide about control variable values when MPI_T is finalized and MPI is either not initialized or is finalized?
>
> For example:
>
> ```C
> // Block A
> MPI_T_Init(...);
> MPI_T_Cvar_read(..., &value_pre);
> MPI_T_Cvar_write(...);
> MPI_T_Finalize(...);
>
> // ...dead zone where neither MPI_T nor MPI are initialized...
>
> // Block B
> MPI_Init(...)
> MPI_T_Init(...);
> MPI_T_Cvar_read(..., &value_post);
> assert(value_pre == value_post);
> ```
>
> Is it guaranteed that the assert() in block B must be true?
>
> Here's why I ask -- consider the following two scenarios:
>
> SCENARIO 1:
> ===========
>
> - Block A causes a dynamically-loaded component to be loaded and initialized
> - The cvar from that dynamically-loaded component is set to a default value
> - The cvar is then read into value_pre
> - The cvar is then assigned a non-default value
> - MPI_T is then finalized
> - Since MPI is not initialized, the dynamically-loaded component is unloaded (so that the process can be valgrind clean if it exits)
>
> - Block B causes the same dynamically-loaded component to be loaded and initialized
> - The cvar from that dynamically-loaded component is set to a default value
> - The cvar is then read into value_post
> - value_pre and value_post are both the same (default) value -- the assert passes
>
> SCENARIO 2:
> ===========
> - Block A causes a statically-loaded component to be initialized
> - The cvar from that statically-loaded component is set to a default value
> - The cvar is then read into value_pre
> - The cvar is then assigned a non-default value
> - MPI_T is then finalized
> - Since the component is static, it is *not* unloaded
>
> - Block B causes nothing to happen to the component (because it's statically loaded)
> - The cvar from that statically-loaded component ***is still set to the non-default value***
> - The cvar is then read into value_post
> - value_pre and value_post are different values -- the assert fails
>
> --
> Jeff Squyres
> jsquyres(a)cisco.com
> For corporate legal information go to: http://www.cisco.com/web/about/doing_business/legal/cri/
>
--
Jeff Squyres
jsquyres(a)cisco.com
For corporate legal information go to: http://www.cisco.com/web/about/doing_business/legal/cri/