Programação Paralela em Arquiteturas Multi-Core/Programação em OpenMP: diferenças entre revisões

[edição não verificada][edição não verificada]
Conteúdo apagado Conteúdo adicionado
Tawhaki (discussão | contribs)
Tawhaki (discussão | contribs)
Linha 165:
a chamada à função send_results_to_screen() será feita apenas pela thread principal, mesmo ela estando dentro de uma seção paralela.
 
O OpenMP provê também a construção "ordered" que especifica que as iterações do ''loop'' devem ser executadas na mesma ordem que seriam caso o programa fosse executado de maneira serial. O funcionamento dessa construção é mais facilmente explicado através de um exemplo:
<pre>
#pragma omp parallel for
for(int i = 0; i < 1048576; ++i)
{
std::string s = get_some_weird_string_in_a_weird_way(i);
#pragma omp ordered
{
result = result + ", " + s;
}
}
</pre>
Nesse exemplo, o valor da variável "s" vai ser calculado em paralelo para diversos valores de "i", mas a redução desses valores calculados ao valor final (representado pela variável "result") se dará em ordem. Essa construção é extremamente interessante em situações do tipo map-reduce aonde a operação de mapeamento é relativamente cara e pode ser beneficiada por paralelismo, enquanto a operação de redução é relativamente barata mas necessita dos dados em ordem.
 
Por fim, é importante citar a diretiva "flush" que identifica um ponto de sincronização, aonde a implementação deve garantir uma "visão" consistente da memória.