Dear George, Dear all,

here the code:

PROGRAM TEST
USE MPI
IMPLICIT NONE
! mpif90 -r8 *.f90
!++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
INTEGER   :: rank
INTEGER   :: subrank,leader_rank
INTEGER   :: nCPU
INTEGER   :: subnCPU
INTEGER   :: ierror
INTEGER   :: tag
INTEGER   :: status(MPI_STATUS_SIZE)
INTEGER   :: colorloc,colorglobal
INTEGER   :: NEW_COMM,LEADER_COMM
!++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
 CALL MPI_INIT(ierror)
 CALL MPI_COMM_SIZE(MPI_COMM_WORLD, nCPU, ierror)
 CALL MPI_COMM_RANK(MPI_COMM_WORLD, rank, ierror)
 !
 colorloc = rank/4
 !
 !
 CALL MPI_COMM_SPLIT(MPI_COMM_WORLD,colorloc,rank,NEW_COMM,ierror)
 CALL MPI_COMM_RANK(NEW_COMM, subrank,ierror);
 CALL MPI_COMM_SIZE(NEW_COMM, subnCPU,ierror);
 !
 IF(MOD(rank,4).EQ.0)THEN
    colorglobal = MOD(rank,4)
 ELSE
    colorglobal = *MPI_COMM_NULL*
 ENDIF
 !
 CALL MPI_COMM_SPLIT(MPI_COMM_WORLD,colorglobal,rank,LEADER_COMM,ierror)
 CALL MPI_COMM_RANK(LEADER_COMM, leader_rank,ierror);
 !
 CALL MPI_FINALIZE(ierror)
ENDPROGRAM

Now, it works.

Could you please explain me "*MPI_Comm_create_group*". I am trying buy my
self, but it seems quite different from MPI_SPLIT_COMM.

Again, really, really thanks

Diego


On 28 July 2017 at 16:02, George Bosilca <bosi...@icl.utk.edu> wrote:

> I guess the second comm_rank call is invalid on all non-leader processes,
> as their LEADER_COMM communicator is MPI_COMM_NULL.
>
> george
>
> On Fri, Jul 28, 2017 at 05:06 Diego Avesani <diego.aves...@gmail.com>
> wrote:
>
>> Dear George, Dear all,
>>
>> thanks, thanks a lot. I will tell you everything.
>> I will try also to implement your suggestion.
>>
>> Unfortunately,  the program that I have show to you is not working. I get
>> the following error:
>>
>> [] *** An error occurred in MPI_Comm_rank
>> [] *** reported by process [643497985,7]
>> [] *** on communicator MPI_COMM_WORLD
>> [] *** MPI_ERR_COMM: invalid communicator
>> [] *** MPI_ERRORS_ARE_FATAL (processes in this communicator will now
>> abort,
>> [] ***    and potentially your MPI job)
>> [warn] Epoll ADD(4) on fd 47 failed.  Old events were 0; read change was
>> 0 (none); write change was 1 (add): Bad file descriptor
>> [warn] Epoll ADD(4) on fd 65 failed.  Old events were 0; read change was
>> 0 (none); write change was 1 (add): Bad file descriptor
>> [] 8 more processes have sent help message help-mpi-errors.txt /
>> mpi_errors_are_fatal
>> [] Set MCA parameter "orte_base_help_aggregate" to 0 to see all help /
>> error messages
>>
>> What do you think could be the error?
>>
>> Really, Really thanks again
>>
>>
>>
>>
>>
>> Diego
>>
>>
>> On 27 July 2017 at 15:57, George Bosilca <bosi...@icl.utk.edu> wrote:
>>
>>> This looks good. If performance is critical you can speed up the entire
>>> process by using MPI_Comm_create_group instead of the second
>>> MPI_COMM_SPLIT. The MPI_Comm_create_group is collective only over the
>>> resulting communicator and not over the source communicator, so its cost is
>>> only dependent of the number of groups and not on the total number of
>>> processes.
>>>
>>> You can also try to replace the first MPI_COMM_SPLIT by the same
>>> approach. I would be curious to see the outcome.
>>>
>>>   George.
>>>
>>>
>>> On Thu, Jul 27, 2017 at 9:44 AM, Diego Avesani <diego.aves...@gmail.com>
>>> wrote:
>>>
>>>> Dear George, Dear all,
>>>>
>>>> I have tried to create a simple example. In particular, I would like to
>>>> use 16 CPUs and to create four groups according to rank is and then a
>>>> communicator between masters of each group.I have tried to follow the first
>>>> part of this example
>>>> <http://mpitutorial.com/tutorials/introduction-to-groups-and-communicators/>.
>>>> In the last part I have tried to create a communicator be masters as
>>>> suggested by George.
>>>>
>>>> Here my example:
>>>>
>>>>  CALL MPI_INIT(ierror)
>>>>  CALL MPI_COMM_SIZE(MPI_COMM_WORLD, nCPU, ierror)
>>>>  CALL MPI_COMM_RANK(MPI_COMM_WORLD, rank, ierror)
>>>>  !
>>>>  colorloc = rank/4
>>>>  !
>>>>  CALL MPI_COMM_SPLIT(MPI_COMM_WORLD,colorloc,rank,*NEW_COMM*,ierror)
>>>>  CALL MPI_COMM_RANK(*NEW_COMM*, subrank,ierror);
>>>>  CALL MPI_COMM_SIZE(*NEW_COMM*, subnCPU,ierror);
>>>>  !
>>>>  IF(MOD(rank,4).EQ.0)THEN
>>>>     *! where I set color for the masters*
>>>>     colorglobal = MOD(rank,4)
>>>>  ELSE
>>>>     colorglobal = MPI_UNDEFINED
>>>>  ENDIF
>>>>  !
>>>>  CALL MPI_COMM_SPLIT(MPI_COMM_WORLD,colorglobal,rank,LEADER_COMM,
>>>> ierror)
>>>>  CALL MPI_COMM_RANK(*LEADER_COMM*, leader_rank,ierror);
>>>>  CALL MPI_FINALIZE(ierror)
>>>>
>>>> I would like to know if this could be correct. I mean if I have
>>>> understood correctly what George told me about the code design. Now, this
>>>> example does not work, but probably there is some coding error.
>>>>
>>>> Really, Really thanks
>>>> Diego
>>>>
>>>>
>>>>
>>>>
>>>>
>>>>
>>>>
>>>> Diego
>>>>
>>>>
>>>> On 27 July 2017 at 10:42, Diego Avesani <diego.aves...@gmail.com>
>>>> wrote:
>>>>
>>>>> Dear George, Dear all,
>>>>>
>>>>> A question regarding program design:
>>>>> The draft that I have sent to you has to be done many and many times.
>>>>> Does the splitting procedure ensure efficiency?
>>>>>
>>>>> I will try, at a lest to create groups and split them. I am a beginner
>>>>> in the MPI groups environment.
>>>>> really, really thanks.
>>>>>
>>>>> You are my lifesaver.
>>>>>
>>>>>
>>>>>
>>>>> Diego
>>>>>
>>>>>
>>>>> On 26 July 2017 at 15:09, George Bosilca <bosi...@icl.utk.edu> wrote:
>>>>>
>>>>>> Diego,
>>>>>>
>>>>>> As all your processes are started under the umbrella of a single
>>>>>> mpirun, they have a communicator in common, the MPI_COMM_WORLD.
>>>>>>
>>>>>> One possible implementation, using MPI_Comm_split, will be the
>>>>>> following:
>>>>>>
>>>>>> MPI_Comm small_comm, leader_comm;
>>>>>>
>>>>>> /* Create small_comm on all processes */
>>>>>>
>>>>>> /* Now use MPI_Comm_split on MPI_COMM_WORLD to select the leaders */
>>>>>> MPI_Comm_split( MPI_COMM_WORLD,
>>>>>>                              i_am_leader(small_comm) ? 1 :
>>>>>> MPI_UNDEFINED,
>>>>>>                          rank_in_comm_world,
>>>>>>                          &leader_Comm);
>>>>>>
>>>>>> The leader_comm will be a valid communicator on all leaders
>>>>>> processes, and MPI_COMM_NULL on all others.
>>>>>>
>>>>>>   George.
>>>>>>
>>>>>>
>>>>>>
>>>>>> On Wed, Jul 26, 2017 at 4:29 AM, Diego Avesani <
>>>>>> diego.aves...@gmail.com> wrote:
>>>>>>
>>>>>>> Dear George, Dear all,
>>>>>>>
>>>>>>> I use "mpirun -np xx ./a.out"
>>>>>>>
>>>>>>> I do not know if I have some common  grounds. I mean, I have to
>>>>>>> design everything from the begging. You can find what I would like to 
>>>>>>> do in
>>>>>>> the attachment. Basically, an MPI cast in another MPI. Consequently, I 
>>>>>>> am
>>>>>>> thinking to MPI groups or MPI virtual topology with a 2D cart, using the
>>>>>>> columns as "groups" and the first rows as the external groups to handle 
>>>>>>> the
>>>>>>> columns.
>>>>>>>
>>>>>>> What do think? What do you suggest?
>>>>>>> Really Really thanks
>>>>>>>
>>>>>>>
>>>>>>> Diego
>>>>>>>
>>>>>>>
>>>>>>> On 25 July 2017 at 19:26, George Bosilca <bosi...@icl.utk.edu>
>>>>>>> wrote:
>>>>>>>
>>>>>>>> Diego,
>>>>>>>>
>>>>>>>> Assuming you have some common  grounds between the 4 initial groups
>>>>>>>> (otherwise you will have to connect them via 
>>>>>>>> MPI_Comm_connect/MPI_Comm_accept)
>>>>>>>> you can merge the 4 groups together and then use any MPI mechanism to
>>>>>>>> create a partial group of leaders (such as MPI_Comm_split).
>>>>>>>>
>>>>>>>> If you spawn the groups via MPI_Comm_spawn then the answer is
>>>>>>>> slightly more complicated, you need to use MPI_Intercomm_create, with 
>>>>>>>> the
>>>>>>>> spawner as the bridge between the different communicators (and then
>>>>>>>> MPI_Intercomm_merge to create your intracomm). You can find a good 
>>>>>>>> answer
>>>>>>>> on stackoverflow on this at https://stackoverflow.com/
>>>>>>>> questions/24806782/mpi-merge-multiple-intercoms-into-a-
>>>>>>>> single-intracomm
>>>>>>>>
>>>>>>>> How is your MPI environment started (single mpirun or
>>>>>>>> mpi_comm_spawn) ?
>>>>>>>>
>>>>>>>>   George.
>>>>>>>>
>>>>>>>>
>>>>>>>>
>>>>>>>> On Tue, Jul 25, 2017 at 10:44 AM, Diego Avesani <
>>>>>>>> diego.aves...@gmail.com> wrote:
>>>>>>>>
>>>>>>>>> Dear All,
>>>>>>>>>
>>>>>>>>> I am studying Groups and Communicators, but before start going in
>>>>>>>>> detail, I have a question about groups.
>>>>>>>>>
>>>>>>>>> I would like to know if is it possible to create a group of
>>>>>>>>> masters of the other groups and then a intra-communication in the new
>>>>>>>>> group. I have spent sometime reading different tutorial and 
>>>>>>>>> presentation,
>>>>>>>>> but it is difficult, at least for me, to understand if is it possible 
>>>>>>>>> to
>>>>>>>>> create this sort of MPI cast in another MPI.
>>>>>>>>>
>>>>>>>>> In the attachment you can find a pictures that summarize what I
>>>>>>>>> would like to do.
>>>>>>>>>
>>>>>>>>> Another strategies could be use virtual topology.
>>>>>>>>>
>>>>>>>>> What do you think?
>>>>>>>>>
>>>>>>>>> I really, really, appreciate any kind of help, suggestions or link
>>>>>>>>> where I can study this topics.
>>>>>>>>>
>>>>>>>>> Again, thanks
>>>>>>>>>
>>>>>>>>> Best Regards,
>>>>>>>>>
>>>>>>>>> Diego
>>>>>>>>>
>>>>>>>>> _______________________________________________
>>>>>>>>> users mailing list
>>>>>>>>> users@lists.open-mpi.org
>>>>>>>>> https://rfd.newmexicoconsortium.org/mailman/listinfo/users
>>>>>>>>>
>>>>>>>>
>>>>>>>>
>>>>>>>> _______________________________________________
>>>>>>>> users mailing list
>>>>>>>> users@lists.open-mpi.org
>>>>>>>> https://rfd.newmexicoconsortium.org/mailman/listinfo/users
>>>>>>>>
>>>>>>>
>>>>>>>
>>>>>>> _______________________________________________
>>>>>>> users mailing list
>>>>>>> users@lists.open-mpi.org
>>>>>>> https://rfd.newmexicoconsortium.org/mailman/listinfo/users
>>>>>>>
>>>>>>
>>>>>>
>>>>>> _______________________________________________
>>>>>> users mailing list
>>>>>> users@lists.open-mpi.org
>>>>>> https://rfd.newmexicoconsortium.org/mailman/listinfo/users
>>>>>>
>>>>>
>>>>>
>>>>
>>>> _______________________________________________
>>>> users mailing list
>>>> users@lists.open-mpi.org
>>>> https://rfd.newmexicoconsortium.org/mailman/listinfo/users
>>>>
>>>
>>>
>>> _______________________________________________
>>> users mailing list
>>> users@lists.open-mpi.org
>>> https://rfd.newmexicoconsortium.org/mailman/listinfo/users
>>>
>>
>> _______________________________________________
>> users mailing list
>> users@lists.open-mpi.org
>> https://rfd.newmexicoconsortium.org/mailman/listinfo/users
>
>
> _______________________________________________
> users mailing list
> users@lists.open-mpi.org
> https://rfd.newmexicoconsortium.org/mailman/listinfo/users
>
_______________________________________________
users mailing list
users@lists.open-mpi.org
https://rfd.newmexicoconsortium.org/mailman/listinfo/users

Reply via email to