Programação Paralela em Arquiteturas Multi-Core/Ambientes de programação e bibliotecas: diferenças entre revisões

[edição não verificada][edição não verificada]
Conteúdo apagado Conteúdo adicionado
Linha 35:
}
 
A interação aqui é do tipo size_t, e vai de 0 a n-1. A função template tbb::parallel_for sai da interação no pedaço(chunk), e executa cada pedaço em uma thread separada. O primeiro passo na paralelização desse loop é converter o corpo do loop em uma forma que opere em um pedaço. Essa forma é em uma função [http://pt.wikipedia.org/wiki/STL STL] (STL-style), chamado o corpo, no qual o operator() processa um dos pedaços(chunk). O seguinte codigo declara o coropo. O codigo extra requirido para o TBB é mostrado em azul.
<font color="blue">#include "tbb/blocked_range.h"</font>
<font color="blue">class ApplyFoo{</font>
Linha 74:
O terceiro argumento, ''grainsize'', especifica o número de iterações para um "tamanho razoavel" de pedaços (chunk) a ser tratado pelo processador. Se a iteração tem mais que ''grainsize'' iterações, parallel_for se divide em subintervalos separados que são agendados(scheduled) separadamente.
 
O ''grainsize'' habilita você a evitar excessivo [http://pt.wikipedia.org/wiki/Overhead overhead] paralelo. Um laço paralelo resulta em um custo de overhead para cada subintervalo. Se os subintervalos são muito pequenos, o overhead pode ser excessivo para o trabalho. Pela especificação de um ''grainsize'', você pode limitar o [http://pt.wikipedia.org/wiki/Overhead overhead]. Efetivamente o ''Grainsize'' valerá o menor valor possivel para a paralelização.
 
[[Image:Grainsize.jpg]]
Linha 118:
}
 
Como com muitas [http://pt.wikipedia.org/wiki/Heuristica heuristicas], tem se situações onde auto_partitioner pode não encontrar o valor ótimo e o simple_partitioner deveria produzir o melhor desempenho. Nos recomendamos usar auto_partitioner ao menos que você tenha tempo para experimentar e melhor o ''grainsize'' para as maquinas de interesse.
 
=== Desenvolvendo aplicações utilizando ''parallel_reduce'' ===