Wat wat wat wat
Por: xplosion123 • 8/10/2015 • Pesquisas Acadêmicas • 1.528 Palavras (7 Páginas) • 358 Visualizações
3.1 - O que acontece no programa de cumprimentos se, em vez de strlen (greeting) + 1, usamos strlen (greeting) para o comprimento da mensagem que está sendo enviado por processos 1, 2, ..., comm sz-1? O que acontece se usarmos MAX cadeia em vez de strlen (greeting) + 1? Você pode explicar estes resultados?
3.2 – Modifique a regra trapezoidal de modo a que ele venha o mesmo integrante corretamente se comm_sz não for divisível igualmente por n(você poderá assumir que n >= comm_sz).
3.3 - Determine quais as variáveis do programa regra trapezoidal são locais e qual são globais.
3.4 - Modifique o programa que apenas imprime uma linha de saída de cada processo (output.c MPI) de modo que a saída seja impresso na classificação dos ranks : processo 0s saí primeiro , em seguida o processo 1s, e assim por diante.
3.5 - Em uma árvore binária, existe um único caminho mais curto de cada nó para a raiz. O comprimento deste caminho é muitas vezes chamado a profundidade do nó. Uma árvore binária em que cada não-folha tem dois filhos é chamado de uma árvore binária completa, e uma árvore binária completa é às vezes assim chamado por ter a maioria das folhas com a mesma pronfundidade. Veja a Figura 14. Use o princípio da indução matemática para provar que se T é uma árvore binária completa com n folhas, então a profundidade das folhas é dada por log(n) na base 2.
3.6 – Supondo comm_sz = 4 e que X é um vetor com largura de n = 14 componentes:
a – Como é que os componentes de X podem ser distribuídos entre os processos em um programa que utilizou uma distribuição por bloco?
B - Como é que os componentes de x podem ser distribuídos entre os processos em um programa que usou uma distribuição cíclica?
C - Como é que os componentes de x podem ser distribuídos entre os processos em um programa que usou uma distribuição block-cíclica com blocksize b = 2?
Você deve tentar fazer as suas distribuições geral, de modo que eles poderiam ser usados, independentemente do que comm_sz e n são. Você também deve tentar fazer as suas distribuições "justas" para que se q e r são todos os dois processos, a diferença entre o número de componentes designados para q e o número de componentes atribuídos a r é o menor possível.
3.7 - O que as diversas funções coletivas MPI fazer se o comunicador contém um processo único?
3.8 – Supondo comm_sz = 8 e n = 16:
A - Desenhe um diagrama que mostra como MPI Scatter podem ser implementados utilizando a comunicação estruturada em árvore com processos comm_sz quando o processo 0 necessita de distribuir um array contendo n elementos.
B - Desenhe um diagrama que mostra como MPI Gather pode ser implementada por meio de comunicação estruturada em árvore quando uma matriz de n-elemento que foi distribuído entre comm_sz processos precisam ser reunidas para o processo 0.
3.9 – Escrever um programa em MPI que implementa a multiplicação de um vetor por um escalar e ponto. O usuário deve digitar dois vetores e um escalar, todos os quais são lidos pelo processo 0 e distribuídos entre os processos. Os resultados são calculados e cobrados no processo 0, que os imprime. Você pode assumir que n, a ordem dos vetores, é divisível por comm_sz.
3.10 – Na função Read_vector mostrada no programa 3.9, usamos local_n como o argumento atual para dois dos argumentos formais para MPI_Scatter: send_count e recv_count. Por que está certo o pseudônimo desses argumentos?
3.11 - Encontrar somas de prefixo é uma generalização da soma global. Em vez de simplesmente encontrar a soma dos valores de n,
[pic 1]
as somas de prefixo são as somas parciais de n:
[pic 2]
A – Elabore um algoritmo serial para calcular as n somas de um array de n elementos
B – Paralelize seu algoritmo serial para um sistema de n processos, em que cada um deles são armazenados em x_i's.
C – Supondopara k inteiros positivos. Você pode elaborar um algoritmo serial e uma paralelização do serial para que o algoritmo paralelo requeira apenas k fases de comunicação?[pic 3]
D - MPI fornece uma função de comunicação coletiva, MPI_Scan, que pode ser usada para computar a soma dos prefixos.
[pic 4]
Ela opera em arrays com count elementos; tanto sendbuf_p e recvbuf_p deve-se referir a blocos de count elementos do tipo datatype. O argumento op é o igual op do MPI_Reduce. Escreva um programa em MPI que gera uma matriz aleatória dos counts elementos em cada processo MPI, encontra as somas dos prefixos, e imprime os resultados.
3.12 – Uma alternativa para a estrutura butterfly allreduce é uma estrutura passa-anel. No passa-anel, se existirem processos p, cada processo q enviando dados para processo q+1, exceto que o processo p-1 envia dados para o processo 0. Este processo é repetido até que cada processo tem o resultado desejado. Assim, podemos implementar allreduce com o seguinte código:
[pic 5]
A – Escreva um programa MPI que implementa esse algoritmo para o allreduce. como comparar seu desempenho com o allreduce estruturado allreduce?
B - Modifique o programa MPI você escreveu na primeira parte para que ele implementa somas de prefixo.
3.13 – MPI_Scatter e MPI_Gather têm a limitação de que cada processo tem de enviar ou receber o mesmo número de itens de dados. Quando este não é o caso, devemos utilizar as funções MPI MPI_Gatherv e MPI_Scatterv. Consulte as páginas do man para estas funções, e modificar sua soma vetorial, produto escalar e programe para que ele possa lidar corretamente com o caso quando n não é uniformemente divisível por comm_sz.
...