Skip to content

Latest commit

 

History

History
76 lines (70 loc) · 2.23 KB

compartilhamento.org

File metadata and controls

76 lines (70 loc) · 2.23 KB

Compartilhamento de Variáveis

1 Diferenças de compartilhamento privado

int i = 10;
#pragma omp parallel private(i)
{
    printf("th %d: i = %d\n", omp_get_thread_num(), i);
    i = 1000 + omp_get_thread_num();
}
printf("i = %d\n", i);   

\pause Valor inicial de variáveis privadas é aleatório

\pause Modificações na região paralela não são visíveis fora dela

2 Inicializando e Exportando uma variável privada

firstprivate é utilizada para inicializar variáveis privadas

int i = 10;
#pragma omp parallel firstprivate(i)
{
    printf("th %d: i=%d\n", omp_get_thread_num(), i);
    i = 1000 + omp_get_thread_num();
}
printf("i = %d\n", i);   

\pause Modificações na região paralela não são visíveis fora dela

  • lastprivate exporta o valor da __última iteração do laço__

3 Exemplo com private, firstprivate, lastprivate

Qual o valor impresso no printf caso

  • private(soma)
  • firstprivate(soma)
  • lastprivate(soma)
  • firstprivate(soma) lastprivate(soma)
      int soma = 0;
    #pragma omp parallel for schedule (static)
    #pragma omp private(soma)
      for (i=0; i < MAX; i++) {
     soma += i;
      }
      printf ("soma = %d\n", soma);
        

\pause Qual operações nós precisamos para este algoritmo?

4 Operadores sobre variáveis privadas

Cláusula reduction (op : list)

  • op é uma operação, exemplo a soma ‘+’
  • list é uma lista de variáveis

\pause Cada fluxo tem uma cópia inicializada

\pause Operação é feita no ponto de sincronização (join)

\pause Atribuído para a variável “global”

Vejamos um exemplo em __reduction.c__