Diese Präsentation wurde erfolgreich gemeldet.
Wir verwenden Ihre LinkedIn Profilangaben und Informationen zu Ihren Aktivitäten, um Anzeigen zu personalisieren und Ihnen relevantere Inhalte anzuzeigen. Sie können Ihre Anzeigeneinstellungen jederzeit ändern.

OpenMP Day 3

883 Aufrufe

Veröffentlicht am

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

Veröffentlicht in: Technologie
  • Als Erste(r) kommentieren

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 />

×