O slideshow foi denunciado.
Utilizamos seu perfil e dados de atividades no LinkedIn para personalizar e exibir anúncios mais relevantes. Altere suas preferências de anúncios quando desejar.

OpenMP Day 3

883 visualizações

Publicada em

Training/Presentation (in Portuguese) about OpenMP an API to support shared memory multiprocessing. Day 3.

Publicada em: Tecnologia
  • Seja o primeiro a comentar

OpenMP Day 3

  1. 1. André Leon S. Gradvohl, Dr.<br />andre.gradvohl@gmail.com<br />OpenMPdia 3<br />
  2. 2. Plano de Apresentação – Dia 3<br />Sincronização lowlevel.<br />Rotinas interessantes/necessárias.<br />
  3. 3. Sincronização lowlevel<br /><ul><li>As primitivas de sincronização são importantes para garantir a consistência dos dados, principalmente quando são compartilhados entre os threads.
  4. 4. As principais são:
  5. 5. Master: apenas o thread principal executa.
  6. 6. Barrier: cria uma barreira para que todos os threads executem até aquele ponto.
  7. 7. Critical: bloqueia uma região crítica.
  8. 8. Atomic: similar à "Critical".
  9. 9. Flush: garante que o valor das variáveis é consistente na memória.</li></li></ul><li>#pragma omp parallel<br />{<br />do_many_things();<br />#pragma omp master<br />{ exchange_boundaries(); }<br />#pragma omp barrier<br />do_many_other_things();<br />}<br />Exemplos Sincronização<br />Apenas o thread master executará este bloco. Os demais threads, simplesmente ignoram e continuam.<br />A barreira aqui é importante para sincronizar os threads,i. e. faze-los aguardar pelo master.<br />
  10. 10. #include <omp.h><br />int main()<br />{<br />int x = 0;<br />#pragma omp parallel shared(x)<br />{<br />#pragma omp sections nowait<br />{<br />#pragma omp section<br />#pragma omp critical<br /> x = x + 1;<br />#pragma omp section<br />#pragma omp critical<br /> x = x + 1;<br />} } }<br />Exemplos Sincronização<br />Cada thread executará uma seção. No entando, como são regiões críticas, eles a farão um de cada vez.<br />Observação: a diferença entre atomic e critical é que a atomic tenta usar recursos de hardware para garantir a exclusão mútua.<br />
  11. 11. Rotinas Interessantes<br /><ul><li>Algumas rotinas podem ser úteis nos programas OpenMP. Eis algumas delas:
  12. 12. void omp_set_num_threads(int num_threads): determina o número de threads que serão utilizadas para a próxima região paralela;
  13. 13. int omp_get_num_threads(void):retorna o número de threads que estão sendo utilizadas em uma região paralela.
  14. 14. int omp_get_max_threads(void): retorna o número máximo de “threads” que o programa pode utilizar.
  15. 15. int omp_get_thread_num(void): retorna a identificação da thread que está executando, dentro de um grupo. A identificação será um numero entre 0 e OMP_GET_NUM_THREADS-1. A thread mestre do grupo sempre será identificada como 0.</li></li></ul><li>Rotinas Interessantes<br /><ul><li>Algumas rotinas podem ser úteis nos programas OpenMP. Eis algumas delas:
  16. 16. int omp_get_num_procs(void): determina o número de processadores disponíveis.
  17. 17. void omp_init_lock(omp_lock_t *lock): inicia para o OpenMP as variáveis de bloqueio, indicando para as threads as variáveis de bloqueio. A variável tem que ser definida com tipo LOCK.
  18. 18. void omp_destroy_lock(omp_lock_t *lock): finaliza qualquer associação de bloqueio de uma determinada variável.
  19. 19. void omp_set_lock(omp_lock_t *lock): solicita o bloqueio de uma variável, ou aguarda que uma variável bloqueada esteja disponível.
  20. 20. void omp_unset_lock(omp_lock_t *lock): solicita o desbloqueio de uma variável, ou aguarda que uma variável bloqueada esteja disponível.</li></li></ul><li>Créditos<br />André Leon S. Gradvohl, Dr.<br />Professor<br />André Leon S. Gradvohl, Dr.<br />Efeitos Visuais<br />André Leon S. Gradvohl, Dr.<br />Pesquisa<br />André Leon S. Gradvohl, Dr.<br />Diagramador<br />Fim<br />

×