Ferramentas de Programação Paralela para Solução de …Ferramentas de Programação Paralela...

Post on 17-Jan-2020

11 views 0 download

Transcript of Ferramentas de Programação Paralela para Solução de …Ferramentas de Programação Paralela...

Ferramentas de Programação Paralelapara Solução de Equações

Prof. Dr. Eliandro R. Cirilo

Universidade Estadual de Londrina - UELCentro de Ciências Exatas - CCEDepartamento de Matemática

18 de dezembro de 2018

1 / 68

Sumário

1 Problemáticas

2 Introdução

3 Problemas de Interesse

4 Programação Fortran 90 (Gfor-tran) - Sequencial

5 Ferramentas para avaliação deperformance

6 OpenMP

7 Exemplos

8 Construções Combinadas

9 Construções de Sincronização

10 Mais um pouco de ProgramaçãoOpenMP

11 Regras Operacionais

12 Message Passing Interface

2 / 68

Problemáticas: Um simples cálculo de área

X = [0 : 20π]

∆X = 0.1; 0.001; 0.00001; 0.00000000001 ⇒ ↑ T.C.11Tempo Computacional

3 / 68

Problemáticas: Multiplicação Matricial

a11 a12 a13a21 a22 a23a31 a32 a33a41 a42 a43

· b11 b12 b13 b14 b15

b21 b22 b23 b24 b25b31 b32 b33 b34 b35

=

c11 c12 c13 c14 c15c21 c22 c23 c24 c25c31 c32 c33 c34 c35c41 c42 c43 c44 c45

⇔ 20 elementos calculados

A40×30 · B30×50 = C40×50

⇔ 2.000 elementos calculados

A40000×30000 · B30000×50000 = C40000×50000

⇔ 2.000.000.000 elementos calculados ↑T .C .2

2Tempo Computacional4 / 68

Problemáticas: Equações de Navier-Stokes ≈ 8horas

∂t(ρu) +

∂x(ρuu) +

∂y(ρuv) = −∂p

∂x+ µ

(∂2u

∂x2+∂2u

∂y2

)∂

∂t(ρv) +

∂x(ρuv) +

∂y(ρvv) = −∂p

∂y+ µ

(∂2v

∂x2+∂2v

∂y2

)∂u

∂x+∂v

∂y= 0

Luruaco

5 / 68

Problemáticas: Equilíbrio em Mod. Biológico ≈ 15dias

τ∂2S

∂t2+

[1− τ dF (S)

dS

]∂S

∂t= D

∂2S

∂x2+ F (S) (0, tend ]× (0, L)

S (0, x) = SI ;∂S (0, x)

∂t= 0 (0, L)

S (t, 0) = S (t, L) = 0 [0, tend ]∀ (t, x) ∈ (0, tend ]× (0, L) ;S (t, x) < 0→ S (t, x) = 0

6 / 68

Sumário

1 Problemáticas

2 Introdução

3 Problemas de Interesse

4 Programação Fortran 90 (Gfor-tran) - Sequencial

5 Ferramentas para avaliação deperformance

6 OpenMP

7 Exemplos

8 Construções Combinadas

9 Construções de Sincronização

10 Mais um pouco de ProgramaçãoOpenMP

11 Regras Operacionais

12 Message Passing Interface

7 / 68

Introdução: Conceitos básicos

Basicamente, existem as programações: SEQUENCIAIS ePARALELAS;

PROGRAMAÇÃO SEQUENCIAL é aquela que é compilada eexecutada para um único processador;

PROGRAMAÇÃO PARALELA é compilada e executada para mais deum processador;

PROCESSO é uma estrutura computacional para a execução de umprograma;

Quando se executa um código sequencial dizemos que existe umPROCESSO em execução, no caso paralelo existem PROCESSOS emexecução;

8 / 68

Introdução: Conceitos básicos

Quanto mais processadores se tem em uma máquina, mais processospodem ser executados, ao mesmo tempo, a partir de um códigoparalelo;

Atualmente, em um computador é possível ter mais de umprocessador;

Vários computadores podem ser interligados (formando umCLUSTER) para executar um código paralelo;

A programação paralela é vantajosa quando se tem um problema degrande porte para se resolver;

A programação paralela não é eciente em problemas de pequenoporte;

9 / 68

Introdução: Necessidades para o Paralelismo

Construído essencialmente pelo programador;

Podem existir problemas que não sejam paralelizáveis;

Decomposição das técnicas matemáticas de cálculos, ou dos dados ouainda do domínio;

Balanceamento entre os processadores;

Comunicação entre os processos;

Arquitetura de memória no computador (COMPARTILHADA /DISTRIBUÍDA)

10 / 68

Introdução: Memória Compartilhada

Os processos no código paralelo COMPARTILHAM uma unidade dememória;

Um processo, por vez, pode acessar um endereço de memóriacompartilhada (implementação OpenMP);

Cuidados devem ser tomados com relação a SINCRONIZAÇÃO;

11 / 68

Introdução: Memória Distribuída

Os processos no código paralelo possuem a sua própria unidade dememória;

As informações necessárias são comunicadas entre os processos viaprogramação no código paralelo (implementações: PVM, Linda, MPI);

Cuidados devem ser tomados com relação a SINCRONIZAÇÃO;

12 / 68

Introdução: Conceito de Thread

é uma forma de um processo dividir a si mesmo em duas ou maistarefas que podem ser executadas concorrentemente;

anteriormente cada processo tinha um único uxo de execução (o quedene uma Thread);

atualmente se tem novas unidades de uxo de execução, assimpode-se ter múltiplos uxos de execução (múltiplas Threads) nummesmo processo;

múltiplas Threads executam concorrentemente em um processo;

explorada pela interface OpenMP;

13 / 68

Introdução: Conceito de Message-Passing

vários processos são executados para realizar uma tarefaconcorrentemente;

os processos se comunicam via envio e recebimento de mensagens;

o conjunto de diferentes operações de comunicação resulta aimplementação Message-Passing entre processos;

explorada pela interface MPI;

14 / 68

Sumário

1 Problemáticas

2 Introdução

3 Problemas de Interesse

4 Programação Fortran 90 (Gfor-tran) - Sequencial

5 Ferramentas para avaliação deperformance

6 OpenMP

7 Exemplos

8 Construções Combinadas

9 Construções de Sincronização

10 Mais um pouco de ProgramaçãoOpenMP

11 Regras Operacionais

12 Message Passing Interface

15 / 68

Problemas de Interesse: Problema 1

Considere as matrizes de Hilbert (Hn) denidas como:

Hn = (hij) ∈ Rn×n, 1 ≤ i , j ≤ n

tal que hij =1

i + j − 1.

Com base no método clássico de matriz inversa A−1 =1

detA(adjA) -

José L. Boldrini ... [et al.], 3 ed., página 76 - construa um códigosequencial para o cálculo numérico em gfortran de H−11 , H−12 , H−13 ,H−110 , H

−1100 e H−11000. Disserte sobre os resultados encontrados.

16 / 68

Problemas de Interesse: Problema 2

Considere a área limitada por:f (x) = sin (x) + 2

y = 0x = 0x = 20π.

Via o método dos retângulos, considerando ∆x nos casos 0.1; 0.001;0.00001; 0.00000000001, construa um código sequencial para ocálculo numérico em gfortran.Para avaliar o nível de precisão, calcule os erros absoluto e relativoentre as soluções numérica e analítica. Disserte sobre os resultadosencontrados.

17 / 68

Problemas de Interesse: Problema 3

A solução de:α2∂2u

∂x2=∂u

∂t, 0 < x < L e t > 0.

u (x , 0) = f (x) , 0 ≤ x ≤ L.u (0, t) = u (L, t) = 0, ∀t > 0.

é dada por u (x , t) =∞∑

m=1

Cme−m2π2α2t/L2sen

(mπxL

)onde

Cm =2L

∫ L

0f (x) sen

(mπxL

)dx , m = 1, 2, ...

Admita que f (x) = 1. Construa um código sequencial em gfortran,via diferenças nitas, para o cálculo numérico. Para avaliar o nível deprecisão, calcule os erros absoluto e relativo entre as soluçõesnumérica e analítica em no mínimo cinco tempos distintos. Dissertesobre os resultados encontrados.

18 / 68

Problemas de Interesse: Problema 4

Considere o problema:∂2u

∂x2+∂2u

∂y2= xy (y − 1) , Ω = (0, 1)× (0, 0.75) .

u (x , y) = 0, (x , y) ∈ ∂Ω.

Construa um código sequencial em gfortran, via diferenças nitas, parao cálculo numérico. Resolva o problema por um esquema implícito euse o método de Gauss-Seidel. Para avaliar o nível de precisão, calculeo erro relativo. Disserte sobre os resultados encontrados.

19 / 68

Sumário

1 Problemáticas

2 Introdução

3 Problemas de Interesse

4 Programação Fortran 90 (Gfor-tran) - Sequencial

5 Ferramentas para avaliação deperformance

6 OpenMP

7 Exemplos

8 Construções Combinadas

9 Construções de Sincronização

10 Mais um pouco de ProgramaçãoOpenMP

11 Regras Operacionais

12 Message Passing Interface

20 / 68

Programação Fortran 90 (Gfortran) - Sequencial: Apoio

Fortran 90/95;

https://ufsj.edu.br/

portal2-repositorio/File/

demat/PASTA-PROF/jorge/

Fortran.pdf

GNU fortran;

https://gcc.gnu.org/

onlinedocs/gfortran.pdf

Material desenvolvido sobre oconceito de programaçãosequencial

21 / 68

Programação Fortran 90 (Gfortran) - Sequencial: Motivação

Design 2D de uma garrafa de Coca-Cola

22 / 68

Programação Fortran 90 (Gfortran) - Sequencial: Motivador

1J

∂T

∂τ= σ

[∂

∂ξ

(Jα

∂T

∂ξ

)−

2∂

∂ξ

(Jβ∂T

∂η

)+

∂η

(Jγ∂T

∂η

)], Ω× (0, τf ] .

T (ξ, η, 0) = 3, Ω

T (ξb, ηb, τ) = 40, ∂Ω0 × [0, τf ] .

∂T

∂n= 0, ∂ (Ω− Ω0)× [0, τf ] .

Ω é o domínio 2D, [0, τf ] a faixa de tempo com τf sendo o valor nal;

∂Ω0 é a região aquecida instantaneamente e ∂ (Ω− Ω0) o bordo quenão troca calor com o meio externo.

23 / 68

Programação Fortran 90 (Gfortran) - Sequencial: Quadro ...

24 / 68

Programação Fortran 90 (Gfortran) - Sequencial: Lógica ...

criação da malha Simulação

Octave

parâmetros e *.txt

55Fortran

executa

WW

*.dat

66Octave

Animação

No terminal

Na pasta COORD_GENERALIZADAS_IMPLICITO, altereparâmetros em SOLVER.f90 e dê um make para compilar, apósexecute ./executavel

25 / 68

Sumário

1 Problemáticas

2 Introdução

3 Problemas de Interesse

4 Programação Fortran 90 (Gfor-tran) - Sequencial

5 Ferramentas para avaliação deperformance

6 OpenMP

7 Exemplos

8 Construções Combinadas

9 Construções de Sincronização

10 Mais um pouco de ProgramaçãoOpenMP

11 Regras Operacionais

12 Message Passing Interface

26 / 68

Métricas

Existem duas classes de métricas de desempenho, são elas:

Sobre processadores - métricas que permitem avaliar a performance deprocessadores tomando como base a velocidade do mesmo e o númerode operações que consegue realizar no tempo;

MIPS (Millions of Instructions Per Second)

FLOPS (FLoating point Operations Per Second), ...

Sobre aplicações paralelas - métricas de performance de uma aplicaçãoparalela tomando como base a comparação entre a execução em umúnico processador e com múltiplos processadores;

Speedup - Eciência - Redundância - Utilização - Qualidade

para o nosso propósito neste curso a segunda é mais interessante.

27 / 68

Speedup & Eciência

O Speedup (Sp) é uma medida de:::::::::::desempenho da execução de um

programa paralelizado comparado ao mesmo programa mas na formasequencial

Sp3 =

t1tp

A Eciência (Ep) é uma medida do::::::quanto os recursos computacionais

disponíveis estão sendo utilizados

Ep =Spp

=⇒ Ep =t1

p × tp

onde t1 é o tempo de execução com 1 processador, tp o tempo de execuçãocom p processadores

3existem as lei de Amdahl e Gustafson-Barsis que modicam o Speedup28 / 68

Redundância, Utilização & Qualidade

A Redundância (Rp) é uma medida de::::::::::crescimento da computação

necessária para execução do programa

Rp =Op

O1

onde O1 é o número total de operações realizadas com 1 processador,e Op o número total de operações realizadas com p processadores

A Utilização (Up) é uma medida do::::::::::::::aproveitamento da capacidade

computacional para execução do programa

Up = Rp × Ep

A Qualidade (Qp) é uma medida do::::::quanto

:::::bom é a utilização da

programação paralela para a execução do programa

Qp =Sp × Ep

Rp29 / 68

Sumário

1 Problemáticas

2 Introdução

3 Problemas de Interesse

4 Programação Fortran 90 (Gfor-tran) - Sequencial

5 Ferramentas para avaliação deperformance

6 OpenMPConceitosPARALLEL

DOSECTIONSSINGLE

7 Exemplos

8 Construções Combinadas

9 Construções de Sincronização

10 Mais um pouco de ProgramaçãoOpenMP

11 Regras Operacionais

12 Message Passing Interface 30 / 68

OpenMP: Conceitos

é uma interface de programação paralela, de memória compartilhadacom múltiplos processadores;

é composto por: clausulas de compilação, bibliotecas de execução evariáveis de ambiente

está sob o conceito de Threads com modelo fork / join

em Gfortran (Fortran 90) utiliza-se o identicador !$OMP paraimplementar paralelismo;

31 / 68

OpenMP: !$OMP PARALLEL ... !$OMP END PARALLEL

1: início2: • . MT3: • . MT4: !$OMP PARALLEL [atributo ...] . F5: IF (expressão lógica) . TS6: PRIVATE (lista) . TS7: SHARED (lista) . TS8: DEFAULT (PRIVATE | SHARED | NONE) . TS9: FIRSTPRIVATE (lista) . TS10: LASTPRIVATE (lista) . TS11: REDUCTION (operador: lista) . TS12: COPYIN (lista) . TS13: !$OMP END PARALLEL . J14: • . MT15: • . MT16: m

32 / 68

OpenMP: !$OMP DO ... !$OMP END DO

1: início2: • . MT3: !$OMP DO [atributo ...] . F4: SCHEDULE (tipo4 [,chunk]) . TS5: ORDERED . TS6: PRIVATE (lista) . TS7: FIRSTPRIVATE (lista) . TS8: LASTPRIVATE (lista) . TS9: SHARED (lista) . TS10: REDUCTION (operador | intrinsic : lista) . TS11: laço do - compartilha as iterações de laços por

entre o grupo de threads . TS12: !$OMP END DO [NOWAIT] . J13: • . MT14: m

4STATIC, DYNAMIC, GUIDED ou RUNTIME33 / 68

OpenMP: !$OMP SECTIONS ... !$OMP END SECTIONS

1: início2: • . MT3: • . MT4: !$OMP SECTIONS [atributo ...] . F5: PRIVATE (lista) . TS6: FIRSTPRIVATE (lista) . TS7: LASTPRIVATE (lista) . TS8: REDUCTION (operador | intrinsic : lista) . TS9: !$OMP SECTION . TS10: BLOCO - a diretiva sections dene pedaços do código

que são executados em paralelo . TS11: !$OMP SECTION . TS12: BLOCO - cada section é executada por uma thread . TS13: !$OMP END SECTIONS [NOWAIT] . J14: • . MT15: • . MT16: m

34 / 68

OpenMP: !$OMP SINGLE ... !$OMP END SINGLE

1: início2: • . MT3: • . MT4: !$OMP SINGLE [atributo ...] . F5: PRIVATE (lista) . TS6: FIRSTPRIVATE (lista) . TS7: BLOCO - diretiva que ordena ao código executar

apenas uma thread . TS8: !$OMP END SINGLE [NOWAIT] . J9: • . MT10: • . MT11: m

35 / 68

Sumário

1 Problemáticas

2 Introdução

3 Problemas de Interesse

4 Programação Fortran 90 (Gfor-tran) - Sequencial

5 Ferramentas para avaliação deperformance

6 OpenMP

7 ExemplosOláCálculo do πSoma e Multiplicação SobreMatrizes Quadradas

8 Construções Combinadas

9 Construções de Sincronização

10 Mais um pouco de ProgramaçãoOpenMP

11 Regras Operacionais

12 Message Passing Interface 36 / 68

Olá aos Matemáticos

1 Funções do OpenMPOMP_GET_NUM_PROCS()OMP_GET_NUM_THREADS()OMP_GET_THREAD_NUM()mas existem mais funções, tarefa de casa PESQUISAR

2 Identicadores!$OMP PARALLEL PRIVATE(ID)

- PARALLEL dene uma região paralela- PRIVATE(ID) a variável ID é privada dentro da região,e cada thread tem acesso exclusivo a uma cópia dessavariável. Além disso, possui valor inicial indenido.Outra forma de denir variáveis privadas é viaFIRSTPRIVATE e LASTPRIVATE.

!$OMP BARRIER

- BARRIER é uma cláusula de barreira para asincronização.

37 / 68

π =4

1− 4

3+

4

5− 4

7+

4

9− 4

11+

4

13− 4

15+

4

17− 4

19+ ...

1 Funções do OpenMPOMP_GET_WTIME()mas existem mais funções, tarefa de casa PESQUISAR

2 Identicador!$OMP PARALLEL DO REDUCTION (+:NUM_PI_PAR)

- REDUCTION uma cópia de NUM_PI_PAR é criadapara cada thread. Ao nal da região paralela denidapelo construtor, a variável original é atualizada com osvalores da cópia privada de cada thread usando ooperador +.

Tabela de operadores

Operador Valor inicial Operador Valor inicial

+ 0 & ∼ 0∗ 1 | 0- 0 && 1∧ 0 || 0

38 / 68

(+, •) sobre matrizes

1 Identicadores!$OMP DO PRIVATE(J)

- DO é responsável pela divisão das iterações do laçoentre as threads, com conhecimento prévio do númerode iterações.

!$OMP SECTIONS PRIVATE(I,J,K)

- SECTIONS faz a divisão das tarefas entre as threadsna forma de blocos !$OMP SECTION.

39 / 68

(+, •) sobre matrizes

Por exemplo, seja n = 3 em que M =

1 2 34 5 67 8 9

tal que

S = M + M ⇒ S =

2 4 68 10 1214 16 18

P = M ·MT ⇒ P =

14 32 5032 77 12250 122 194

então segue que:

40 / 68

(+, •) sobre matrizes: n = 1000

S P 41 / 68

Sumário

1 Problemáticas

2 Introdução

3 Problemas de Interesse

4 Programação Fortran 90 (Gfor-tran) - Sequencial

5 Ferramentas para avaliação deperformance

6 OpenMP

7 Exemplos

8 Construções Combinadas

9 Construções de Sincronização

10 Mais um pouco de ProgramaçãoOpenMP

11 Regras Operacionais

12 Message Passing Interface

42 / 68

OpenMP: Diretivas

O objetivo da combinação de diretivas é reduzir a sintaxe de instruções doOpenMP, o que implica numa compreensão mais direta do código progra-mado.

PARALLEL DO- dene uma região paralela, e ao mesmo tempo, distribuias iterações do loop na região por entre as threadsde um grupo

PARALLEL SECTIONS- dene uma região paralela e simultaneamente as seçõesque cada thread irá executar

43 / 68

Mais um exemplo: Produto Interno 〈A,B〉

!$OMP DO

- Faz a divisão das iterações do laço entre as threads,com conhecimento prévio do número de iterações.

!$OMP PARALLEL DO SCHEDULE(STATIC,CHUNK)REDUCTION(+:SS)

- Dene uma região paralela, agenda uma divisão no laçoe então atualiza corretamente a soma para nalmentedar o valor do produto interno.

STATIC,CHUNK

- O loop é fragmentado em partes com tamanhotamanho chunk e distribuído estaticamente para cadathread pela ordem identicada a cada trhead.

44 / 68

Sumário

1 Problemáticas

2 Introdução

3 Problemas de Interesse

4 Programação Fortran 90 (Gfor-tran) - Sequencial

5 Ferramentas para avaliação deperformance

6 OpenMP

7 Exemplos

8 Construções Combinadas

9 Construções de Sincronização

10 Mais um pouco de ProgramaçãoOpenMP

11 Regras Operacionais

12 Message Passing Interface

45 / 68

OpenMP: Diretivas

MASTER- dene uma região que será executada apenas pelathread mestre do grupo

CRITICAL- dene que a região do código deva ser executadasomente por uma thread de cada vez

BARRIER- dene a sincronização de todas as threads de um grupo

46 / 68

OpenMP: Diretivas

ATOMIC- dene que certa região da memória seja atualizadaatomicamente, impedindo que várias threads acessemessa região ao mesmo tempo

FLUSH- dene a atualização dos dados compartilhados entre osthreads na memória

ORDERED- dene que as iterações em loop, em uma regiãoparalela, sejam executadas de modo sequencial

47 / 68

Sumário

1 Problemáticas

2 Introdução

3 Problemas de Interesse

4 Programação Fortran 90 (Gfor-tran) - Sequencial

5 Ferramentas para avaliação deperformance

6 OpenMP

7 Exemplos

8 Construções Combinadas

9 Construções de Sincronização

10 Mais um pouco de ProgramaçãoOpenMP

11 Regras Operacionais

12 Message Passing Interface

48 / 68

Apoio Extra

É imprescindível a leitura crítica e compreensão das seguintes bibliograas:

Artigo:1 https://www.google.com/url?sa=t&rct=j&q=&esrc=s&

source=web&cd=1&ved=

2ahUKEwiKpMCcq-reAhXHqZAKHbMzBkwQFjAAegQIBhAC&

url=http%3A%2F%2Folaria.ucpel.tche.br%2Fnelsiw%

2Flib%2Fexe%2Ffetch.php%3Fid%3Dstart%26cache%

3Dcache%26media%3Dopenmp.pdf&usg=

AOvVaw33MR7a-75d1Gstq2EwnZ2I

Artigo:2 http://www.linuxnewmedia.com.br/images/uploads/

pdf_aberto/LM47_72-77.pdf

Artigo:3 http://www.inf.ufrgs.br/erad2018/downloads/

minicursos/eradrs2018-fortran.pdf

49 / 68

Sumário

1 Problemáticas

2 Introdução

3 Problemas de Interesse

4 Programação Fortran 90 (Gfor-tran) - Sequencial

5 Ferramentas para avaliação deperformance

6 OpenMP

7 Exemplos

8 Construções Combinadas

9 Construções de Sincronização

10 Mais um pouco de ProgramaçãoOpenMP

11 Regras Operacionais

12 Message Passing Interface

50 / 68

OpenMP: Leis1 A diretiva DO, SECTIONS, SINGLE, MASTER e BARRIER só

serão utilizadas se estiverem em uma região paralela denida peladiretiva PARALLEL.

2 A diretiva ORDERED só é usada junto com a diretiva DO.

3 A diretiva ATOMIC atua sobre todas as threads utilizadas.

4 Uma diretiva PARALLEL aninhada a outra diretiva PARALLELestabelece um novo grupo, que será composto apenas pela threadque primeiro alcançar a nova região paralela.

5 Não é permitido a atuação da diretiva BARRIER dentro das regiõesdenidas pelas diretivas DO, ORDERED, SECTIONS, SINGLE,MASTER e CRITICAL.

6 Qualquer diretiva poderá ser executada fora de uma região denidapela diretiva PARALLEL, contudo será executada somente pelathread master. 51 / 68

Sumário

1 Problemáticas

2 Introdução

3 Problemas de Interesse

4 Programação Fortran 90 (Gfor-tran) - Sequencial

5 Ferramentas para avaliação deperformance

6 OpenMP

7 Exemplos

8 Construções Combinadas

9 Construções de Sincronização

10 Mais um pouco de ProgramaçãoOpenMP

11 Regras Operacionais

12 Message Passing Interface

52 / 68

MPI: Conceitos

O modelo computacional Message-Passing do MPI é constituído de:um conjunto de processos que possuem acesso à memória local;comunicação entre processos, via recebimento e envio de mensagens;transferência de dados entre processos mediante operações decooperação entre os mesmos, isto é, um envio deve ser recebido para aefetivação da computação;aproximadamente 125 funções para programação e análise.

53 / 68

MPI: Denições

Rank é a identicação de um processo atribuída pelo S.O. quandoinicializado. Essa identicação é contínua e do tipo

0, 1, 2, ...,N − 1 processos.

Group é o conjunto de N processos. Todo grupo está vinculadocommunicator.

Communicator dene uma coleção de processos (grupo), quepoderão comunicar-se entre si. MPI_COMM_WORLD é ocomunicador pré-denido que inclui todos os processos denidos pelousuário numa aplicação MPI.

Aplication Buer é um endereço de memória que armazena um dadoa ser enviado ou recebido.

54 / 68

MPI: Denições

System Buer é um endereço de memória reservado pelo sistemapara armazenar mensagens.

Blocking Comunication é uma rotina de comunicação que dependede um evento para ser efetivada.

Non-Blocking Communication é uma rotina de comunicação quenão depende de um evento para ser efetivada. É responsabilidade doprogramador a certeza de que o aplication buer esteja livre paraser reutilizado.

Standard Send é a operação básica de envio de mensagem de umprocesso para outro. Pode ser blocking ou non-blocking.

Standard Receive é a operação básica de recebimento de mensagemde um processo para outro. Pode ser blocking ou non-blocking.

55 / 68

MPI: Denições

Synchronous Send é um bloqueio até que ocorra um receivecorrespondente no processo de destino. Pode ser blocking ounon-blocking.

Buered Send é a criação de um "buer"para o dado antes de serenviado. Necessita da garantia de espaço disponível, na incerteza deespaço do "System Buer".

Ready Send é um tipo de "send"que pode ser usado na certeza daexistência de um "receive"correspondente ativo.

Return Code é um valor inteiro retornado pelo sistema para indicar analização de uma sub-rotina.

56 / 68

MPI: As rotinas básicas mais utilizadas

CALL MPI_INIT(ERR) - é a primeira rotina MPI a ser chamadaem cada processo, e que estabelece o ambiente de execução paralela.Nesta rotina há a sincronização dos processos na inicialização.

ERR - ERR = 0 (sucesso); ERR < 0 (erro)

CALL MPI_COMM_RANK(COMM,RANK,ERR) - identica oprocesso, dentro de um grupo de processos, e seu valor é um númerointeiro entre 0 e n − 1 processos.

COMM - comunicador MPIRANK - variável inteira que retorna o número de identicação

do processoERR - variável inteira que retorna o status da rotina

57 / 68

MPI: As rotinas básicas mais utilizadas

CALL MPI_COMM_SIZE(COMM,SIZE,ERR) - retorna onúmero de processos dentro de um grupo de processos.

COMM - comunicador MPISIZE - variável inteira que retorna o número de processos

inicializados.ERR - variável inteira que retorna o status da rotina.

CALL MPI_SEND(SENDMESS, COUNT, DATATYPE, DEST,TAG, COMM, ERR) - rotina de envio de mensagem.SENDMESS - mensagem a ser enviada.

COUNT - número de elementos a serem enviados.DATATYPE - tipo do dado.

DEST - identicação do processo destino.TAG - rótulo da mensagem.

COMM - comunicador MPI.ERR - variável inteira que retorna o status da rotina.

58 / 68

MPI: CALL MPI_SEND

Uma MPI-Message é constituída de duas partes:

MPI_SEND(SENDMESS ,COUNT ,DATATYPE︸ ︷︷ ︸dado︸ ︷︷ ︸

mensagem,noelementos,tipo

,DEST ,TAG ,COMM︸ ︷︷ ︸envelope︸ ︷︷ ︸

identidade,etiqueta,comunicador

,ERR)

Tipos de dados

MPI_INTEGER MPI_REALMPI_DOUBLE_PRECISION MPI_COMPLEXMPI_LOGICAL MPI_CHARACTERMPI_BYTE MPI_PACKED

59 / 68

MPI: As rotinas básicas mais utilizadas

CALL MPI_RECV(RECVMESS, COUNT, DATATYPE,SOURCE, TAG, COMM, STATUS, ERR) - rotina de envio demensagem.RECVMESS - mensagem a ser recebida.

COUNT - número de elementos a serem recebidos.DATATYPE - tipo do dado.

SOURCE - identicação da fonte.TAG - rótulo da mensagem.

COMM - comunicador MPI.STATUS - vetor com informação de SOURCE e TAG.

ERR - variável inteira que retorna o status da rotina.

CALL MPI_FINALIZE(ERR) - rotina que naliza o processo para oMPI, é a última rotina a ser executada, sincroniza todos os processosna nalização de uma aplicação MPI.

ERR - variável inteira que retorna o status da rotina.60 / 68

MPI: Comunicação point - to - point

É aquela em que um processo envia uma mensagem e outro processo recebea mensagem.

Modos de comunicação:synchronous

readybueredstandard

Modos de processamento:blocking

non-blocking

Há 4 tipos de (non-)blocking send(para cada modo de comunicação) e 1tipo (non-)blocking receive que recebe os dados.

Toda rotina non-blocking é rotulada tipo MPI_I****

(non-)blocking sendMPI_SSEND[ISSEND]MPI_RSEND[IRSEND]MPI_BSEND[IBSEND]MPI_SEND[ISEND]

(non-)blocking receiveMPI_RECV[IRECV]

61 / 68

MPI: Comunicação point - to - point

Principais conjecturas:

o modo Synchronous é mais seguro e portável;

o modo Ready possui o menor índice overhead5, mas a execução deum receive deve preceder a execução de send;

o modo Buered elimina o Synchronization overhead e permitecontrole no tamanho do buer;

o modo non-blocking possui a vantagem de continuar na execuçãomesmo se a mensagem ainda não tiver sido enviada e elimina odeadlock6, e reduz o synchronization overhead.

5é um processamento ou armazenamento em excesso, seja de tempo de computação,

de memória, de largura de banda ou qualquer outro recurso6fenômeno comum quando se utiliza blocking communication, ocorre quando todos

os processos aguardam por eventos ainda não iniciados62 / 68

MPI: Comunicação point - to - point

Principais rotinas auxiliares:

MPI_BUFFER_ATTACH

MPI_BUFFER_DETACH

MPI_WAIT

MPI_WAITALL

MPI_TEST

MPI_TEST_EXTENT

63 / 68

MPI: Comunicação all - to - all

É aquela em que todos os processos são de certa forma alterados por send/-receive.

A comunicação é dividida pelas classes:synchronizationdata movementglobal computation

Basicamente envolve:comunicação coordenadabloqueamentosincronização ou não sincronização

64 / 68

MPI: Comunicação all - to - all

Principais rotinas auxiliares:

SynchronizationMPI_BARRIER - sincroniza todos os processos de um grupo

Data MovementMPI_BCAST - permite que um processo envie dados para todos osprocessos de um grupoMPI_GATHER - permite que cada processo envie uma mensagem parao processo master, que ao recebê-las, armazena na ordem de chegadaMPI_SCATTER - operação inversa ao GATHERMPI_ALLGATHER - é uma operação GATHER em que todos osprocessos recebem as mensagensMPI_ALLTOALL - permite que cada processo envie seus dados paratodos os outros processos

65 / 68

MPI: Comunicação all - to - all

Global ComputationMPI_REDUCE - permite que o resultado parcial de cada processo emum grupo seja combinado e retornado para um processo especíco,utilizando alguma operação

Operação de redução

Função Tipos ResultadoMPI_MAX integer, real, complex retorna o valor máximoMPI_MIN , , retorna o valor mínimoMPI_SUM , , retorna o valor somadoMPI_PROD , , retorna o valor multiplicado

66 / 68

MPI: Compilação

MPICHdesenvolvido por Argonne National Laboratory e Mississipi State

University

de domínio públicotem denido em um único comando a compilação e a linkedição

Comandos para a instalação do MPICHsudo apt install mpichsudo apt install libmpich-dev

Comandos para compilação e execução com makele construídomake

mpiexec︸ ︷︷ ︸execução mpi

execução por 4 processos︷ ︸︸ ︷-np 4 ./exec︸ ︷︷ ︸

nome do executável

67 / 68

MPI: Apoio Extra

Seguem três materiais úteis no desenvolvimento de aplicações paralelas como MPI:

Artigo:1 http://www.mcs.anl.gov/research/projects/mpi/www/

Artigo:2 http:

//people.sc.fsu.edu/~jburkardt/f_src/mpi/mpi.html

Artigo:3 https://idre.ucla.edu/sites/default/files/

mpi-2013-02-13.pdf?x83242

68 / 68