09.05.2015 Views

universidade feevale douglas neves spindler algoritmos para ...

universidade feevale douglas neves spindler algoritmos para ...

universidade feevale douglas neves spindler algoritmos para ...

SHOW MORE
SHOW LESS

You also want an ePaper? Increase the reach of your titles

YUMPU automatically turns print PDFs into web optimized ePapers that Google loves.

38<br />

esta variável acessarão o mesmo endereço de memória, dado que este é compartilhado<br />

pelas threads;<br />

Private: a definição de escopo privado faz com que a variável tenha múltiplas posições<br />

em memória, uma <strong>para</strong> o contexto de execução de cada thread. A posição de memória<br />

<strong>para</strong> uma thread é inacessível às outras.<br />

Reduction: é um atributo especial utilizado <strong>para</strong> realizar operações de redução<br />

aritmética.<br />

Por fim, a terceira categoria engloba as diretivas de sincronização entre threads. A<br />

comunicação entre elas é feita através de variáveis compartilhadas, e, portanto,<br />

frequentemente é necessário que haja algum tipo de coordenação nos acessos a tais variáveis.<br />

Caso contrário, pode ocorrer que múltiplas threads tentem modificar uma mesma variável ao<br />

mesmo tempo, ou ler um valor que esteja sendo modificado por outra thread.<br />

Para prover a sincronização entre as threads, OpenMP faz uso de duas formas<br />

básicas: exclusão mútua, expressa pela diretiva critical, na qual uma thread possui acesso<br />

exclusivo à variável compartilhada <strong>para</strong> uma determinada seção de código; e sincronização de<br />

eventos, por meio da diretiva barrier, de modo que, uma vez alcançada esta diretiva, o<br />

programa aguarda todas as threads chegarem até a mesma, <strong>para</strong> então continuarem a<br />

execução. A diretiva <strong>para</strong>llel possui uma barreira de sincronização implícita no final do<br />

bloco, como previamente descrito na Figura 11.<br />

2.3 DISCUSSÃO<br />

Chapman, Jost e van der Pas (2008) defendem que MPI provê um excelente nível de<br />

portabilidade, sendo amplamente utilizado em computação de alto desempenho, onde os<br />

problemas são tão grandes que são necessários diversos computadores <strong>para</strong> resolvê-los.<br />

Entretanto, tal portabilidade vem com o custo de que a criação de programas baseados nesta<br />

API geralmente requer extensas modificações ao código sequencial original, o que torna o<br />

desenvolvimento mais complexo.<br />

Chandra et al. (2001) compartilham desta opinião, e mencionam ainda que a<br />

programação utilizando MPI é mais complexa porque a utilização de um modelo baseado em<br />

troca de mensagens requer que as estruturas de dados do programa sejam explicitamente

Hooray! Your file is uploaded and ready to be published.

Saved successfully!

Ooh no, something went wrong!