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 69:
O blocked_range construido aqui representa a iteração de entrada do espaço de 0 a n-1, do qual o parallel_for divide em subespaços para cada processador. A forma geral para o construtor blocked_range<T>(begin,end,grainsize). O T especifica o valor tipo. O argumento ''begin'' e ''end'' especifica o espaco de iteração STL-style como o intervalo (begin,end).
Grainsize
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 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 overhead. Efetivamente o ''Grainsize'' valerá o menor valor possivel para a paralelização.
<< FIGURA GRAINSIZE >>
A figura acima ilustra o impacto do overhead mostrando o trabalho efetivo como a area cinza dentro do quadrado marrom. Ambos os casos A e B tera a mesma area cinza. O caso A mostrara como é pequeno o ''grainsize'' para um alto overhead relativamente. No caso B mostra o quão grande é o ''grainsize'' reduzido nessa proporção, no custo da redução do potencial paralelismo.
O overhead como uma fração de trabalho efetivo depende do ''grainsize'', não em numero de grão. Considere essa relação e não em número total de iterações ou número de processadores quando estiver configurando o ''grainsize''.
Uma regra é que as iterações de grainsize em operator() deve ter no mínimo 10.000-100.000 instruções a serem computadas. Na duvida, faça o seguinte:
# Defina o maior parametro grainsize possivel
=== Desenvolvendo aplicações utilizando ''parallel_reduce'' ===
|