A apresentação está carregando. Por favor, espere

A apresentação está carregando. Por favor, espere

OpenMP MO801/MC972. Visão geral Biblioteca de mais alto nível para programação paralela Prevê memória compartilhada Requer suporte do compilador Exige.

Apresentações semelhantes


Apresentação em tema: "OpenMP MO801/MC972. Visão geral Biblioteca de mais alto nível para programação paralela Prevê memória compartilhada Requer suporte do compilador Exige."— Transcrição da apresentação:

1 OpenMP MO801/MC972

2 Visão geral Biblioteca de mais alto nível para programação paralela Prevê memória compartilhada Requer suporte do compilador Exige biblioteca específica com implementações thread safe

3 Modelo de Execução O programador possui total controle sobre a execução paralela Usa um modelo de programação Fork- Join Baseado em diretivas de compilação Suporte a paralelismo aninhado Permite controle dinâmico do número de threads

4 Modelo de Execução

5 Características Biblioteca para paralelização de código Usa #pragma para definir as regiões paralelas –Os programas ainda podem ser executados serialmente Detecta automaticamente o número de processadores –O programador não precisa saber de antemão o número de processadores disponíveis Exige suporte do compilador

6 Alguns exemplos

7 Exemplo #include main() { #pragma omp parallel { puts("Hello World"); } } 1 processador Hello World 4 processadores Hello World

8 Restrições Os programadores precisam fornecer os #pragmas OpenMP não detecta conflitos –É responsabilidade do programador colocar os #pragmas corretos nos lugares corretos Exige compilador –Não é apenas uma biblioteca

9 #pragma parallel for main() { int i; #pragma omp parallel for for(i=0;i<1000;i++) DoTask(); } 1 processador 1000 chamadas a DoTask() 4 processadores 250 chamadas a DoTask() para cada processador

10 #pragma parallel sections main() { #pragma omp parallel sections { #pragma omp section Task1(); #pragma omp section Task2(); #pragma omp section Task3(); #pragma omp section Task4(); } 1 processador sequential execution of the 4 tasks 4 processadores One task executed in each processor

11 Alguns detalhes

12 Para paralelizar um for A variável do loop precisar ser um inteiro sinalizado –Não serve unsigned A comparação deve ser da forma variável ou >= valor invariante O incremento deve ser uma soma ou subtração invariante com o loop –Se a comparação for < ou <= deve ser feito um incremento, caso contrário deve ser feito um decremento O loop deve ter apenas uma entrada e uma saída

13 Escopo das variáveis As variáveis são consideradas compartilhadas por padrão a não ser que sejam declaradas dentro do bloco #pragma As variáveis podem ser consideradas privadas se assim declaradas no #pragma #pragma omp … private(x) –O oposto de private é shared

14 Como paralelizar? sum = 0; for (k=0; k < 100; k++) { // func sem efeito colateral sum = sum + func(k) }

15 Como paralelizar? sum = 0; #pragma omp parallel for reduction(+:sum) for (k=0; k < 100; k++) { // func sem efeito colateral sum = sum + func(k) }

16 Outros itens Agrupar dois blocos parallel evita o overhead de parar e reiniciar as threads Colocar a opção nowait num bloco parallel evita que as threads sejam sincronizadas no final dele Utilize a opção barrier para criar barreiras no código (sincronizar as threads) Utilize a opção single para executar um bloco de código com apenas uma thread Utilize a opção master para executar um bloco de código apenas com a thread mestre A opção critical cria regiões críticas


Carregar ppt "OpenMP MO801/MC972. Visão geral Biblioteca de mais alto nível para programação paralela Prevê memória compartilhada Requer suporte do compilador Exige."

Apresentações semelhantes


Anúncios Google