OpenMP. Um método de paralelização para as linguagens Fortran, C, C++ para shared memory systems.

Documentos relacionados
UNIVERSIDADE ESTADUAL PAULISTA JÚLIO DE MESQUITA FILHO

Câmpus de Bauru Plano de Ensino Curso Ênfase Identificação Disciplina Docente(s) Unidade Departamento Créditos Carga Horária Seriação ideal

OpenMP. Slides baseados em tutorial de Tim Mattson da Intel

/media/juan/c c/ l5q14.f90 Página 1 de 7 ter 11 jun :23:20-03 module implicit none character dimension allocatable real

Exercícios - vetorização Escrever uma função para multiplicação de matrizes.

for(int x=0; x < width; x++) { for(int y=0; y < height; y++) { finalimage[x][y]=renderpixel(x,y, &scenedata); } }

Introdução ao Fortran 90-3

Agenda. O que é OpenMP? Regiões Paralelas Construtores para Compartilhamento de

Programação estruturada no Fortran 90-3

Introdução à OpenMP (Dia 1) Prof. Guido Araujo

Introdução OpenMP. Nielsen Castelo Damasceno

Jorge Barbosa, FEUP-DEI 2008

Departamento de Matemática Universidade de Coimbra

Paralela e Distribuída. Memórias Cache e Arquitecturas Multi-Processador

Correção do 1º Exame de INTRODUÇÃO À PROGRAMAÇÃO Licenciatura em Engenharia Mecânica 30 de Junho de 2006, 2º Semestre

CAP-387(2016) Tópicos Especiais em

Programação Concorrente e Paralela

1. O número de bactérias numa cultura pode ser estimado pela expressão:

Sistemas Distribuídos e Paralelos

Introdução à Computação

DESENVOLVIMENTO DE UM ALGORITMO PARALELO PARA APLICAÇÃO EM CLUSTER DE COMPUTADORES

OpenMP: Variáveis de Ambiente

Bibliografia. OpenMP. Disponibilidade de OpenMP. Abordagem SPMD. Nicolas Maillard

Memórias Cache em Arquiteturas Multiprocessador e Multicore

Map05 - Métodos Matriciais Computacionais Mat Álgebra Matricial Computacional Primeiro Exercicio Computacional, entregar ao Prof: 22/10/2012

Introdução ao Fortran 90. Aula 3

PROGRAMAÇÃO de COMPUTADORES: LINGUAGEM FORTRAN 90/95

Processamento Paralelo

OpenMP. Slides baseados em tutorial de Tim Mattson da Intel

Introdução ao fortran 90 - Aula 1

Conceitos Introdutórios sobre a Linguagem FORTRAN

Construtores de Sicronização em OpenMP

OpenMP. Aleardo Manacero Jr.

Programação estruturada no Fortran 90-1

Introdução ao OpenMP

Para saber se o pacote está disponível nos repositórios, abra um terminal e digite (use o comando abaixo):

Introdução ao OpenMP

Introdução ao FORTRAN 90. Aula 4

Paralela e Distribuída. Memória Paralela com o OpenMP

Uma fórmula de recorrência para o cá/cu/o dos coeficientes dos polinómios Hen(x)

Linguagens de Programação

Exercícios - vetorização Escrever uma função para multiplicação de matrizes.

Introdução ao OpenMP

Programação em FORTRAN III. João Manuel R. S. Tavares

Programação em Paralelo OpenMP

GEO764 - Programação avançada em Geofísica. Exemplo em Fortran 90. Estilo de programação. Formato livre do programa. FORTRAN 90: Aula n o 1 Elementos

Análise Numérica. Trabalho Prático 1 Decomposição LU e Integração Numérica

Paralela e Distribuída. com o MPI e o OpenMP

Capítulo 19. DERIVADAS E INTEGRAIS NUMÉRICAS

Introdução ao Fortran 90-1

Capítulo 10. MATRIZES

OpenMP. Adaptado do Material do Calebe de Paula Bianchini

Processamento de Matrizes

Técnicas de Paralelização

Programação com Funções. Subprogramas do tipo Função

INE5645 PROGRAMAÇAO PARALELA E DISTRIBUÍDA PROVA 1 18/09/2017 ALUNO: Prof. Bosco

Programação Paralela e Distribuída (DCC/UFRJ)

Matheus S. Serpa, Vinícius G. Pinto, Philippe O. A. Navaux Contato: INTEL MODERN CODE PARTNER

DD3IMP (FINITE ELEMENT SOLVER) THE CHALLENGE OF COMPUTATIONAL PERFORMANCE IMPROVEMENT THROUGH HPC

Trabalho Prático. CI316 Programação Paralela Prof. Daniel Weingaertner

Modularidade. Objetivos: Introduzir noções básicas de modularidade. Funções e procedimentos

Apostila de Fortran. É uma pseudo-linguagem a qual oferece recursos para que o programador possa codificar e testar os seus algoritmos.

Programação em MATLAB

Introdução ao Fortran 90-1

In I t n rto r d o u d ç u ão ã o à à Com o pu p t u a t ç a ão ã Linguagem Fortran! " 1

Programação em Memória Partilhada com o OpenMP

Introdução ao Fortran 90-4

Introdução ao Scilab 3.0 Parte 3

PROGRAMAÇÃO. Programação paralela com o OpenMP Em paralelo

Introdução à Programação Aula prática Nº O número de bactérias numa cultura pode ser estimado pela expressão:

Tópicos. Integração espacial. Desafios de HPC + FEA: Método dos Elementos Finitos. Terão os nubentes FEA e HPC uma vida longa e feliz (na UMinho)?

Universidade Federal do Rio Grande Bacharelado em Matemática Aplicada Disciplina de Algoritmos e Programação de Computadores

Introdução à programação paralela em Fortran usando OpenMP e MPI

Programação estruturada no Fortran 90-2

Introdução ao Fortran 90-3

Paralelismo em Computadores com Tecnologia Multicore

Relatório Trabalho 1 Programação Paralela

Objectivos. Introdução à programação Macros em Microsoft Excel Introdução ao Visual Basic para Aplicações (VBA)

UNIVERSIDADE FEDERAL DO PARÁ PRÓ-REITORIA DE PESQUISA E PÓS-GRADUAÇÃO DIRETORIA DE PESQUISA PROGRAMA INSTITUCIONAL DE BOLSAS DE INICIAÇÃO CIENTÍFICA

Linguagens de Programação

Exercícios de Fixação Aula 09

Paradigmas de Computação Paralela (UCE Computação Paralela Distribuída)

Linguagens de Programação Conceitos e Técnicas. Amarrações Prof. Tiago Alves de Oliveira

Vetores, Matrizes e Gráficos

Medida de desempenho

Matemática Computacional - 2 o ano LEMat e MEQ

MATRIZES. 1) Faça um programa em Fortran que recebe como parâmetro uma matriz A (nxn) de números reais. Esse programa deve informar

Testes Formativos de Computação Numérica e Simbólica

ÍNDICE PARTE I INTRODUÇÃO... 6

Paralelização de Algoritmos de CFD em Clusters Multi-Core MC7. Escola de Verão Arquiteturas Multi-Core

Exercícios de Fixação Introdução ao FORTRAN

OpenMP: Uma Introdução

Programação de Computadores:

O USO DA BIBLIOTECA LAPACK

Prática 10 - Funções

Aquecimento. program math2 integer:: x,num1 write(*,*)"digite dois números read(*,*) x,num1 write(*,*)"a soma é",x+y end program math2

Introdução à Computação - FORTRAN

Desenvolvendo Aplicações OpenMP

Algoritmos e Estruturas de Dados. Grupo 1

VARIÁVEIS INDEXADAS VETORES E MATRIZES

Transcrição:

OpenMP Um método de paralelização para as linguagens Fortran, C, C++ para shared memory systems. Directivas para o compilador Threads Biblioteca de rotinas Variáveis de ambiente entidade que pode executar de f o r m a i n d e p e n d e n t e u m conjunto de instruções B. Chapman, G. Jost, R. van der Pas Using OpenMP, MIT Press 2008

OpenMP - II Multiplicação Matriz-Vector M ik V k = A i k i Paralelização segundo i

PROGRAM matriz_vector END PROGRAM matriz_vector IMPLICIT NONE INTEGER n, m, memstat REAL start, finish DOUBLE PRECISION, DIMENSION (:), ALLOCATABLE :: vec, a DOUBLE PRECISION, DIMENSION (:,:), ALLOCATABLE :: mat PRINT *, " M(n,m) V(m) = A(m) " PRINT *, " Valores para m, n >>>" READ(*,*) n, m SUBROUTINE mat_vect( n, m, mat, vec, x ) IMPLICIT NONE INTEGER, INTENT(IN) :: n, m DOUBLE PRECISION, DIMENSION (n,m), INTENT(IN) :: mat ALLOCATE( mat(n,m), STAT=memstat ) IF ( memstat /= 0) STOP " Erro na alocação de M " ALLOCATE( vec(m), STAT=memstat ) IF ( memstat /= 0) STOP " Erro na alocação de V " ALLOCATE( a(m), STAT=memstat ) IF ( memstat /= 0) STOP " Erro na alocação de A " PRINT *, " Inicialização da matriz M e vector V" mat = 1 vec = 1 PRINT *, " M * V" CALL CPU_TIME(start) CALL mat_vect( n, m, mat, vec, a ) CALL CPU_TIME(finish) PRINT *, " Tempo Mat*Vec = ", finish-start, seg PRINT *, " Finaliza" IF ( ALLOCATED(mat) ) DEALLOCATE( mat, STAT=memstat ) IF ( ALLOCATED(vec) ) DEALLOCATE( vec, STAT=memstat ) IF ( ALLOCATED(a) ) DEALLOCATE( a, STAT=memstat ) DOUBLE PRECISION, DIMENSION (m), INTENT(IN) :: vec DOUBLE PRECISION, DIMENSION (m), INTENT(INOUT) :: x!... Variáveis Locais INTEGER i, j DO i = 1, n x(i) = 0 DO j = 1, m x(i) = x(i) + mat(i,j)*vec(j) END SUBROUTINE mat_vect

SUBROUTINE mat_vect( n, m, mat, vec, x ) IMPLICIT NONE INTEGER, INTENT(IN) :: n, m DOUBLE PRECISION, DIMENSION (n,m), INTENT(IN) :: mat DOUBLE PRECISION, DIMENSION (m), INTENT(IN) :: vec #pragma omp parallel for default(none) \ DOUBLE PRECISION, DIMENSION (m), INTENT(INOUT) :: x shared(n,m,mat,vec,x) private(i,j)!... Variáveis Locais INTEGER i, j!$omp PARALLEL DO DEFAULT(none) & for( i = 1; i <= n; i++) { x(i) = 0; for( j = 1; j <= m; j++) x(i) = x(i) + mat(i,j)*vec(j) }!$OMP SHARED(n,m,mat,vec,x) PRIVATE(i,j) DO i = 1, n x(i) = 0 DO j = 1, m x(i) = x(i) + mat(i,j)*vec(j)!$omp END PARALLEL DO END SUBROUTINE mat_vect

!$OMP PARALLEL DO DEFAULT(none)!$OMP SHARED(n,m,mat,vec,x) PRIVATE(i,j) DO i = 1, n x(i) = 0!$OMP PARALLEL DO DEFAULT(none) &!$OMP SHARED(x,mat,vec,i) PRIVATE(j) DO j = 1, m x(i) = x(i) + mat(i,j)*vec(j)!$omp END PARALLEL DO!$OMP END PARALLEL DO &!$OMP PARALLEL DO DEFAULT(none)!$OMP SHARED(n,m,mat,vec,x) PRIVATE(i) DO i = 1, n x(i) = SUM(mat(i,:)*vec(:))!$OMP END PARALLEL DO &

Tempos Execução (3000 x 3000): Série: (somátorios) 0.175 (SUM) 0.126 Paralelo (2 Threads): (somatórios) 0.196 (2 ciclos) 0.219 (SUM) 0.136

PROGRAM pi_s USE omp_lib IMPLICIT NONE INTEGER n, i, n_threads REAL start, finish DOUBLE PRECISION w, s, x, pi DOUBLE PRECISION, PARAMETER :: ZERO = 0, ONE = 1, HALF = 0.5 DOUBLE PRECISION, EXTERNAL :: f FUNCTION f(x) IMPLICIT NONE DOUBLE PRECISION, INTENT(IN) :: x DOUBLE PRECISION f!... DOUBLE PRECISION, PARAMETER :: FOUR = 4, ONE = 1 f = FOUR / (ONE + x*x) END FUNCTION f READ(*,*) n n_threads = 1 pi = ZERO w = ONE/DBLE(n) CALL CPU_TIME(start)!$OMP PARALLEL PRIVATE(x,s)!$ n_threads = omp_get_num_threads() s = ZERO!$OMP DO DO i = 1, n x = w*( DBLE(i) - HALF) s = s + f(x)!$omp!$omp CRITICAL pi = pi + w*s!$omp END CRITICAL Cálculo Pi!$OMP END PARALLEL CALL CPU_TIME(finish) PRINT *, n, pi PRINT *, " T Exec. = ", finish-start PRINT *, " # Threads = ", n_threads END PROGRAM pi_s

!$OMP PARALLEL PRIVATE(x,s)!$ n_threads = omp_get_num_threads() s = ZERO!$OMP DO DO i = 1, n x = w*( DBLE(i) - HALF) s = s + f(x)!$omp!$omp CRITICAL pi = pi + w*s!$omp END CRITICAL!$OMP END PARALLEL!$OMP PARALLEL DEFAULT(none) &!$OMP SHARED(pi,w,n,n_threads) PRIVATE(i,x,s)!$ n_threads = omp_get_num_threads() s = ZERO!$OMP DO DO i = 1, n x = w*( DBLE(i) - HALF) s = s + f(x)!$omp!$omp CRITICAL pi = pi + w*s!$omp END CRITICAL!$OMP END PARALLEL!$OMP PARALLEL DEFAULT(none) &!$OMP SHARED(w,n,n_threads) PRIVATE(i,x,s), reduction(+:pi)!$ n_threads = omp_get_num_threads() s = ZERO pi = ZERO!$OMP DO DO i = 1, n x = w*( DBLE(i) - HALF) s = s + f(x)!$omp pi = pi + w*s!$omp END PARALLEL

Problema du dt = f(t, u) u(t = 0) = u 0 Procurar solução para 0 t T du dt (t) u(t + t) u(t) t u(t + t) u(t) + tf(t, u(t)) Data dependency - não há forma de paralelizar

Método de 2ª ordem: du dt = f(t, u(t)) u(t + t) =u(t)+ tu (t)+ 2 2 u (t) u (t + t) =u (t)+ tu (t)+ 2 2 u (t) tu (t) =u (t + t) u (t)++o( t 2 ) tu (t) =u (t) u (t t)++o( t 2 ) u(t + t) =u(t)+ tf(t, u(t)) + t [f(t, u(t)) f(t t, u(t t)] 2 u(t + t) =u(t)+ t 2 [3f(t, u(t)) f(t t, u(t t)] + O( t3 ) u(t + t) =u(t)+ t 2 [f(t, u(t)) + f(t, 2u(t) u(t t)] + O( t2 )

Método de 2ª ordem u n+1 = u((n + 1) t) =u n + t n+1 t n 2 [ ] f(t n,u n )+f(t n+1, 2u n u n+1 ) Cálculos Independentes Considere f(t, u) =u u 0, u 1 = u 0 + t, u n+1 = Au n + Bu n 1, A = 1 + 3 t 2, B = t 2

Resolução de Sistema Linear 1 0 0 0 0 1 1 0 0 0 B A 1 0 0 0 B A 1 0..... u 0 u 1 u 2 u 3. = 0 t 0 0. (I + A)u = B u = I I + A B = B AB + A2 B

Ler B u = B B = AB Oportunidades de Paralelização Multiplicação Matriz Vector Soma Vectores Norma Vector u = u + B B Erro Sim Não Stop

Escreva o programa para resolver o problema de condições formulado usando OpenMP e efectue medidas do speedup=( Tempo Execução Paralela)/(Tempo Execução Série) e da eficiência paralela = speedup/thread. Ao executar o programa considere T = 1 e utilize valores do intervalo de tempo de 0.01 e 0.001. Compare a solução numérica com a solução exacta obtida por integração directa da equação diferencial.