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 36:
 
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 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>
<font color="blue">float *const my_a;</font>
<font color="blue">public:</font>
<font color="blue">void operator()( const blocked_range<size_t>& r) const{</font>
<font color="blue">float *a = my_a;</font>
for( size_t i=r.begin(); i!=r.end(); ++i )
Foo(a[i]);
<font color="blue">}</font>
<font color="blue">ApplyFoo( float a[] ):</font>
<font color="blue">my_a(a)</font>
<font color="blue">{}</font>
<font color="blue">}; </font>
 
Note o argumento operator(). A blocked_range<T> é uma classe template provida pela biblioteca. Ela descreve uma iteração de uma dimensão sobre o tipo T. A classe parallel_for trabalha com outros tipos de iteração também. A biblioteca provê blocked_range2d para espaços bidimensionais. Voce pode definir seu próprio espaço como explicado adiante.