➤ De forma a libertar o programador dos detalhes inerentes `a topologia e eficiˆencia
das comunica¸c˜oes colectivas, o MPI define um conjunto de fun¸c˜oes para lidar especificamente com este tipo de comunica¸c˜oes.
Mensagens Colectivas
➤ De forma a libertar o programador dos detalhes inerentes `a topologia e eficiˆencia
das comunica¸c˜oes colectivas, o MPI define um conjunto de fun¸c˜oes para lidar especificamente com este tipo de comunica¸c˜oes.
➤ Podemos ent˜ao classificar as mensagens em:
♦ Ponto-a-ponto: a mensagem ´e enviada por um processo e recebida por um outro processo (e.g. todo o tipo de mensagens que vimos anteriormente).
♦ Colectivas: podem consistir de v´arias mensagens ponto-a-ponto concorrentes
e envolvendo todos os processos de um comunicador (as mensagens colectivas tˆem de ser chamadas por todos os processos do comunicador).
Mensagens Colectivas
➤ De forma a libertar o programador dos detalhes inerentes `a topologia e eficiˆencia
das comunica¸c˜oes colectivas, o MPI define um conjunto de fun¸c˜oes para lidar especificamente com este tipo de comunica¸c˜oes.
➤ Podemos ent˜ao classificar as mensagens em:
♦ Ponto-a-ponto: a mensagem ´e enviada por um processo e recebida por um outro processo (e.g. todo o tipo de mensagens que vimos anteriormente).
♦ Colectivas: podem consistir de v´arias mensagens ponto-a-ponto concorrentes
e envolvendo todos os processos de um comunicador (as mensagens colectivas
tˆem de ser chamadas por todos os processos do comunicador).
➤ As mensagens colectivas s˜ao varia¸c˜oes ou combina¸c˜oes das seguintes 4 opera¸c˜oes
primitivas: ♦ Broadcast ♦ Reduce ♦ Scatter ♦ Gather 49
Broadcast
MPI Bcast(void *buf, int count, MPI Datatype datatype, int root, MPI Comm comm)
➤ MPI Bcast() faz chegar uma mensagem de um processo a todos os outros
Broadcast
MPI Bcast(void *buf, int count, MPI Datatype datatype, int root, MPI Comm comm)
➤ MPI Bcast() faz chegar uma mensagem de um processo a todos os outros
processos no comunicador.
Broadcast
MPI Bcast(void *buf, int count, MPI Datatype datatype, int root, MPI Comm comm)
➤ MPI Bcast() faz chegar uma mensagem de um processo a todos os outros
processos no comunicador.
➤ buf ´e o endere¸co inicial dos dados a enviar/receber.
Broadcast
MPI Bcast(void *buf, int count, MPI Datatype datatype, int root, MPI Comm comm)
➤ MPI Bcast() faz chegar uma mensagem de um processo a todos os outros
processos no comunicador.
➤ buf ´e o endere¸co inicial dos dados a enviar/receber.
➤ count ´e o n´umero de elementos do tipo datatype a enviar/receber. ➤ datatype ´e o tipo de dados a enviar/receber.
Broadcast
MPI Bcast(void *buf, int count, MPI Datatype datatype, int root, MPI Comm comm)
➤ MPI Bcast() faz chegar uma mensagem de um processo a todos os outros
processos no comunicador.
➤ buf ´e o endere¸co inicial dos dados a enviar/receber.
➤ count ´e o n´umero de elementos do tipo datatype a enviar/receber. ➤ datatype ´e o tipo de dados a enviar/receber.
➤ root ´e a posi¸c˜ao do processo, no comunicador comm, que possui `a partida a
Broadcast
MPI Bcast(void *buf, int count, MPI Datatype datatype, int root, MPI Comm comm)
➤ MPI Bcast() faz chegar uma mensagem de um processo a todos os outros
processos no comunicador.
➤ buf ´e o endere¸co inicial dos dados a enviar/receber.
➤ count ´e o n´umero de elementos do tipo datatype a enviar/receber. ➤ datatype ´e o tipo de dados a enviar/receber.
➤ root ´e a posi¸c˜ao do processo, no comunicador comm, que possui `a partida a
mensagem a enviar.
➤ comm ´e o comunicador dos processos envolvidos na comunica¸c˜ao.
Broadcast
MPI Bcast(void *buf, int count, MPI Datatype datatype, int root, MPI Comm comm)
buf MPI_Bcast() count=2 buf datatype datatype root buf buf buf datatype datatype root rank 0 rank 2 rank 3 buf datatype datatype rank 2 buf datatype datatype rank 3 buf datatype datatype rank 0 51
Reduce
MPI Reduce(void *sendbuf, void* recvbuf, int count,
MPI Datatype datatype, MPI Op op, int root, MPI Comm comm)
➤ MPI Reduce() permite realizar opera¸c˜oes globais de resumo fazendo chegar
Reduce
MPI Reduce(void *sendbuf, void* recvbuf, int count,
MPI Datatype datatype, MPI Op op, int root, MPI Comm comm)
➤ MPI Reduce() permite realizar opera¸c˜oes globais de resumo fazendo chegar
mensagens de todos os processos a um ´unico processo no comunicador.
Reduce
MPI Reduce(void *sendbuf, void* recvbuf, int count,
MPI Datatype datatype, MPI Op op, int root, MPI Comm comm)
➤ MPI Reduce() permite realizar opera¸c˜oes globais de resumo fazendo chegar
mensagens de todos os processos a um ´unico processo no comunicador.
➤ sendbuf ´e o endere¸co inicial dos dados a enviar.
➤ recvbuf ´e o endere¸co onde devem ser colocados os dados recebidos (s´o ´e importante para o processo root).
Reduce
MPI Reduce(void *sendbuf, void* recvbuf, int count,
MPI Datatype datatype, MPI Op op, int root, MPI Comm comm)
➤ MPI Reduce() permite realizar opera¸c˜oes globais de resumo fazendo chegar
mensagens de todos os processos a um ´unico processo no comunicador.
➤ sendbuf ´e o endere¸co inicial dos dados a enviar.
➤ recvbuf ´e o endere¸co onde devem ser colocados os dados recebidos (s´o ´e importante para o processo root).
Reduce
MPI Reduce(void *sendbuf, void* recvbuf, int count,
MPI Datatype datatype, MPI Op op, int root, MPI Comm comm)
➤ MPI Reduce() permite realizar opera¸c˜oes globais de resumo fazendo chegar
mensagens de todos os processos a um ´unico processo no comunicador.
➤ sendbuf ´e o endere¸co inicial dos dados a enviar.
➤ recvbuf ´e o endere¸co onde devem ser colocados os dados recebidos (s´o ´e importante para o processo root).
➤ count ´e o n´umero de elementos do tipo datatype a enviar. ➤ datatype ´e o tipo de dados a enviar.
Reduce
MPI Reduce(void *sendbuf, void* recvbuf, int count,
MPI Datatype datatype, MPI Op op, int root, MPI Comm comm)
➤ MPI Reduce() permite realizar opera¸c˜oes globais de resumo fazendo chegar
mensagens de todos os processos a um ´unico processo no comunicador.
➤ sendbuf ´e o endere¸co inicial dos dados a enviar.
➤ recvbuf ´e o endere¸co onde devem ser colocados os dados recebidos (s´o ´e importante para o processo root).
➤ count ´e o n´umero de elementos do tipo datatype a enviar. ➤ datatype ´e o tipo de dados a enviar.
Reduce
MPI Reduce(void *sendbuf, void* recvbuf, int count,
MPI Datatype datatype, MPI Op op, int root, MPI Comm comm)
➤ MPI Reduce() permite realizar opera¸c˜oes globais de resumo fazendo chegar
mensagens de todos os processos a um ´unico processo no comunicador.
➤ sendbuf ´e o endere¸co inicial dos dados a enviar.
➤ recvbuf ´e o endere¸co onde devem ser colocados os dados recebidos (s´o ´e importante para o processo root).
➤ count ´e o n´umero de elementos do tipo datatype a enviar. ➤ datatype ´e o tipo de dados a enviar.
➤ op ´e a opera¸c˜ao de redu¸c˜ao a aplicar aos dados recebidos.
➤ root ´e a posi¸c˜ao do processo, no comunicador comm, que recebe e resume os
Reduce
MPI Reduce(void *sendbuf, void* recvbuf, int count,
MPI Datatype datatype, MPI Op op, int root, MPI Comm comm)
➤ MPI Reduce() permite realizar opera¸c˜oes globais de resumo fazendo chegar
mensagens de todos os processos a um ´unico processo no comunicador.
➤ sendbuf ´e o endere¸co inicial dos dados a enviar.
➤ recvbuf ´e o endere¸co onde devem ser colocados os dados recebidos (s´o ´e importante para o processo root).
➤ count ´e o n´umero de elementos do tipo datatype a enviar. ➤ datatype ´e o tipo de dados a enviar.
➤ op ´e a opera¸c˜ao de redu¸c˜ao a aplicar aos dados recebidos.
➤ root ´e a posi¸c˜ao do processo, no comunicador comm, que recebe e resume os
dados.
➤ comm ´e o comunicador dos processos envolvidos na comunica¸c˜ao.
Reduce
MPI Reduce(void *sendbuf, void* recvbuf, int count,
MPI Datatype datatype, MPI Op op, int root, MPI Comm comm)
sendbuf MPI_Reduce() count=2 sendbuf datatype datatype root sendbuf sendbuf recvbuf root rank 0 rank 2 rank 3 recvbuf rank 2 recvbuf rank 3 recvbuf rank 0 count=2 count=2 count=2 datatype datatype datatype datatype datatype datatype op datatype datatype 53