Buscar

FAQ - MPI

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes
Você viu 3, do total de 4 páginas

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Prévia do material em texto

FAQ 
 
1) MPI é para sistema em memória compartilhada ou 
distribuída? 
 
O padrão MPI foi desenvolvido para sistemas de memória 
distribuída, porém o padrão MPI-2 também especifica rotinas 
de envio/recebimento que utilizam a memória compartilhada 
para as operações de troca de mensagem. Desta forma, o MPI 
também tem sido utilizado de forma eficiente em sistemas de 
memória compartilhada. 
 
2)Qual a diferença entre OpenMP e MPI? 
 
O padrão OpenMP foi desenvolvido para sistemas computacionais 
de memória compartilhada. Desta forma o OpenMP cria threads, 
enquanto o MPI, que foi desenvolvido para sistemas 
computacionais de memória distribuída, cria processos. 
 
Em um sistema de memória compartilhada é mais vantajoso ter 
um processo transformado em threads porque um processo pode 
ser dividido em diversos threads. Desta forma, quando um 
thread em execução ficar bloqueado na espera por um recurso, 
outro thread pode ser escalonado para executar na cpu. A 
vantagem dos threads está no aumento da concorrência, o que 
possibilita, teoricamente um maior desempenho, porém, existem 
outros fatores que irão influenciar no desempenho da 
aplicação no sistema computacional. Além disso, os threads se 
comunicam através de uma memória global, enquanto que 
processos se comunicam através de troca de mensagens. Desta 
forma, uma comunicação realizada através de um acesso à 
memória compartilhada é teoricamente mais eficiente do que 
uma comunicação realizada através de troca de mensagens. 
 
Uma vantagem do OpenMP em relação ao MPI é a economia de 
memória, já que os threads compartilham a memória global. 
Esta característica é muito importante para aplicações que 
acessam uma grande massa de dados em um ambiente multicore. 
 
Em termos de ambiente de programação, no ambiente MPI, é o 
programador quem especifica as trocas de mensagens, ou seja, 
cabe ao programador especificar qual será o processo que 
deverá enviar uma mensagem e qual deverá ser processo que 
deverá receber a mensagem. 
 
No ambiente OpenMP o programador adiciona diretivas de 
compilação no código e é o compilador quem executa o 
gerenciamento do acesso ao dado entre os processos 
 
Desta forma, podemos dizer que o ambiente OpenMP é mais 
amigável para o programador, e que por outro lado, o 
programador não tem poder te "otimização" do código. 
 
Podemos visualizar o MPI como se fosse um "nível mais abaixo" 
de programação, onde o programador controla a troca de dados 
e tem maior possibilidade de otimizar o código. 
 
3)É possível usar os dois juntos? Qual o ganho nisso ? 
 
É possível utilizar MPI e o OpenMP em uma mesma aplicação. 
Isto é muito utilizado em situações na qual a aplicação já 
possui uma versão para MPI e se deseja realizar uma 
otimização para que ela seja executada em clusters máquinas 
multicore. É importante lembrar que a versão MPI-2 também 
possui rotinas que utilizam a memória compartilhada do 
sistema multicore para executar as trocas de mensagens. 
 
4)É possível utilizar MPI com placas gráficas GPGPU? 
 
Sim, existem diversas implementações de aplicações que 
utilizam MPI em ambientes de placas gráficas GPGPU. 
 
Neste caso, o MPI é utilizado para a inicialização dos 
processos individuais nas máquinas do cluster, onde os 
processos irão executar parte do seu código nas placas GPGPU 
das máquinas. 
 
O grande problema das placas gráficas é que elas não acessam 
diretamente a memória principal as placas gráficas quando 
têm que acessar o dado da memória principal perdem muito o 
desempenho. Desta forma, não é toda aplicação que pode tirar 
um bom desempenho deste tipo de implementação. 
 
5) Para que ser o arquivo Machinefile 
 
O arquivo machinefile apresenta a ordem com a qual as 
máquinas da cluster devem ser alocadas. Ele é criado durante 
a instalação do MPI. 
 
O usuário também pode criar um arquivo machinefile na sua 
conta local para alterar a ordem de alocação de máquinas que 
foi gerada durante a instalação. Neste caso, o comando é o 
seguinte: 
 mpirun -machinefile "arquivo" -np 2 ./teste01 
 
No caso de uma cluster formada por máquinas multicore, o 
machinefile pode informar o número de cores de cada máquina 
para que as CPU´s possam ser alocadas individualmente para 
cada processo MPI. 
 
 
6) O que é RANK? 
 
O MPI utiliza o nome RANK para identificar os processos que 
são gerados para serem executados nas máquinas de um cluster. 
 
Observe que mesmo em um sistema que contém apenas um 
processador é possível gerar diversos processos MPI onde 
cada processo irá possuir um RANK. 
 
Por exemplo, se você tiver o MPI instalado em um laptop que 
possui apenas um processador, se você executar o programa 
teste01 com o comando “mpirun -np 10 ./teste01 “ o MPI irá 
criar 10 processos onde cada processo terá um número de RANK. 
 
Durante as operações de troca de mensagens, o número do RANK 
é fundamental para identificar o processo de envio e de 
recebimento, assim como o RANK é necessário para identificar 
a parte do código que cada processo deverá executar. 
 
 
7) Para que serve o MPI_INIT? 
 
O MPI_INIT é a rotina de inicialização que estabelece a 
comunicação entre as máquinas da cluster e fornece o número 
de RANK de cada processo. 
 
 
8) Porque devemos evitar enviar mensagens com poucos dados? 
 
Existem diversos gastos envolvidos durante a transferência 
de uma mensagem no MPI. 
 
Por exemplo, uma rotina send tem que enviar os dados 
armazenados no buffer da aplicação para o buffer do sistema 
operacional, que por sua vez terá que enviar para o buffer da 
placa "ethernet", se for o caso, que por sua vez tem que 
"empacotar" a mensagem segundo o protocolo TCP/IP, que por 
sua vez terá que jogar os dados na rede internet, que por sua 
vez, ao ser recebido pela placa ethernet do nó de recebimento 
terá que fazer as operações acima de trás para frente até que 
o dado chegue ao buffer da aplicação! 
 
Desta forma, uma maneira de aumentar o desempenho é acumular 
o máximo de dados possíveis dentro de uma mesma mensagem. 
 
 
9) Qual é a relação entre a granularidade de uma aplicação e 
o desempenho que ela pode ter com o MPI? 
 
Em um sistema distribuído que utiliza MPI, se você tem um 
programa que passa muito mais tempo processando do que se 
comunicando (o que chamamos de granularidade grossa), ele 
terá poucos gastos com a comunicação. 
 
Caso os gastos venham a ser desprezíveis em relação ao tempo 
total de execução da aplicação poderemos obter uma aceleração 
ideal na qual para um número n de processadores se obtém o 
tempo de execução n vezes menor em relação a execução com 
apenas um processador. 
 
Quando o programa possui pouca computação em relação a 
comunicação (granularidade baixa) o ideal é utilizar um 
ambiente de computação onde a comunicação seja mais 
eficiente, como por exemplo uma rede de alta velocidade ou 
um sistema de memória compartilhada. 
 
É importante observar que dependendo da granularidade do seu 
programa mesmo em um ambiente de memória compartilhada você 
pode não conseguir diminuir o tempo de execução do seu 
programa com o aumento do número de processadores. 
 
 
10) O que são GRUPOS? 
 
 
Um grupo pode ser criado dentro de um comunicador para 
facilitar ao programador o gerenciamento do algoritmo. 
 
O conceito de grupo facilita a implementação de operações 
coletivas em algoritmos onde grupos de máquinas se comunicam 
separadamente. 
 
Um processo pode pertencer a mais de um grupo e a mais de um 
comunicador, isto é útil em algoritmos complexos onde um 
processo tem que fazer comunicações com diferentes conjuntos 
de processadores.

Outros materiais