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'' ===