Condividi tramite


Funzione parallel_reduce

Calcola la somma di tutti gli elementi in un intervallo specificato il calcolo delle somme parziali successive, o calcola il risultato dei risultati parziali successivi analogamente ottenuti da utilizzando un'operazione binaria specificata diversa dalla somma, in parallelo.parallel_reduce è semanticamente simile a std::accumulate, con la differenza che richiede un'operazione binaria di essere associativa e richiede un valore di identità anziché un valore iniziale.

template<
   typename _Forward_iterator
>
inline typename std::iterator_traits<_Forward_iterator>::value_type parallel_reduce(
   _Forward_iterator_Begin,
   _Forward_iterator_End,
   const typename std::iterator_traits<_Forward_iterator>::value_type &_Identity
);

template<
   typename _Forward_iterator,
   typename _Sym_reduce_fun
>
inline typename std::iterator_traits<_Forward_iterator>::value_type parallel_reduce(
   _Forward_iterator_Begin,
   _Forward_iterator_End,
   const typename std::iterator_traits<_Forward_iterator>::value_type &_Identity,
   _Sym_reduce_fun_Sym_fun
);

template<
   typename _Reduce_type,
   typename _Forward_iterator,
   typename _Range_reduce_fun,
   typename _Sym_reduce_fun
>
inline _Reduce_type parallel_reduce(
   _Forward_iterator_Begin,
   _Forward_iterator_End,
   const _Reduce_type& _Identity,
   const _Range_reduce_fun &_Range_fun,
   const _Sym_reduce_fun &_Sym_fun
);

Parametri

  • _Forward_iterator
    Il tipo di iteratore di intervallo di input.

  • _Sym_reduce_fun
    Il tipo di funzione simmetrica di riduzione.Deve trattarsi di un tipo di funzione con la firma _Reduce_type _Sym_fun(_Reduce_type, _Reduce_type), in cui il _Reduce_type corrisponde al tipo di entità e del tipo di risultato della riduzione.Per il terzo overload, questo deve essere coerente con il tipo di output di _Range_reduce_fun.

  • _Reduce_type
    Il tipo a cui l'input viene compressa, che può essere diverso dal tipo di elemento di input.Il valore restituito e il valore di entità include questo tipo.

  • _Range_reduce_fun
    Il tipo di funzione di riduzione dell'intervallo.Deve trattarsi di un tipo di funzione con la firma _Reduce_type _Range_fun(_Forward_iterator, _Forward_iterator, _Reduce_type), il _Reduce_type corrisponde al tipo di entità e del tipo di risultato della riduzione.

  • _Begin
    Un iteratore di input destinato al primo elemento nell'intervallo da ridurre.

  • _End
    Un iteratore di input destinato all'elemento corrispondente a una posizione oltre l'elemento finale nell'intervallo da ridurre.

  • _Identity
    Il valore _Identity di identità sono dello stesso tipo del tipo di risultato della riduzione e anche di value_type dell'iteratore per il primo e il secondo overload.Per il terzo overload, il valore di identità deve avere lo stesso tipo del tipo di risultato della riduzione, ma può essere diverso da value_type dell'iteratore.Deve avere un valore appropriato in modo che l'operatore _Range_fundi riduzione di intervallo, una volta applicato a un intervallo di un singolo elemento di tipo value_type e il valore di identità, si comporta come un cast di tipo del valore di tipo value_type al tipo di entità.

  • _Sym_fun
    La funzione simmetrica che sarà utilizzata in seconda della riduzione.Fare riferimento alle osservazioni per ulteriori informazioni.

  • _Range_fun
    La funzione che verranno utilizzate nella prima fase della riduzione.Fare riferimento alle osservazioni per ulteriori informazioni.

Valore restituito

Il risultato della riduzione.

Note

Per eseguire una riduzione parallela, la funzione divide timeout in blocchi in base al numero di lavoratori disponibili all'utilità di pianificazione sottostante.La riduzione svolge in due fasi, la prima fase esegue una riduzione dentro ogni blocco e la seconda fase esegue una riduzione tra i risultati parziali da ogni blocco.

Il primo overload richiede che value_typedell'iteratore, T, sia gli stessi del tipo di valore di identità nonché del tipo di risultato di riduzione.Il tipo di elemento T necessario fornire all'operatore T T::operator + (T) per ridurre gli elementi in ogni blocco.Lo stesso operatore viene utilizzato nella seconda fase anche.

Il secondo overload richiede inoltre che value_type dell'iteratore sia gli stessi del tipo di valore di identità nonché del tipo di risultato di riduzione.L'operatore binario fornito _Sym_fun viene utilizzato in entrambe le fasi di riduzione, con il valore di identità come valore iniziale per la prima fase.

Per il terzo overload, il tipo di valore di identità deve essere uguale al tipo di risultato di riduzione, ma value_type dell'iteratore può essere diverso da entrambi.La funzione _Range_fun di riduzione intervalli è utilizzata nella prima fase con il valore di identità come valore iniziale e la funzione binaria _Sym_reduce_fun si applica ai risultati nella seconda fase.

Requisiti

Header: ppl.h

Concorrenza diSpazio dei nomi:

Vedere anche

Riferimenti

Spazio dei nomi concurrency