Condividi tramite


Funzione parallel_buffered_sort

Dispone gli elementi in un intervallo specificato in un ordine non decrescente, o secondo un criterio di ordinamento specificato da un predicato binario, in parallelo. Questa funzione è semanticamente simile a std::sort in quanto si tratta di un ordinamento basato sul confronto, instabile, sul posto., ma richiede uno spazio aggiuntivo pari a O(n) e richiede l'inizializzazione predefinita per gli elementi in fase di ordinamento.

template<
   typename _Random_iterator
>
inline void parallel_buffered_sort(
   const _Random_iterator &_Begin,
   const _Random_iterator &_End
);

template<
   typename _Allocator,
   typename _Random_iterator
>
inline void parallel_buffered_sort(
   const _Random_iterator &_Begin,
   const _Random_iterator &_End
);

template<
   typename _Allocator,
   typename _Random_iterator
>
inline void parallel_buffered_sort(
   const _Allocator& _Alloc,
   const _Random_iterator &_Begin,
   const _Random_iterator &_End
);

template<
   typename _Random_iterator,
   typename _Function
>
inline void parallel_buffered_sort(
   const _Random_iterator &_Begin,
   const _Random_iterator &_End,
   const _Function &_Func,
   const size_t _Chunk_size = 2048
);

template<
   typename _Allocator,
   typename _Random_iterator,
   typename _Function
>
inline void parallel_buffered_sort(
   const _Random_iterator &_Begin,
   const _Random_iterator &_End,
   const _Function &_Func,
   const size_t _Chunk_size = 2048
);

template<
   typename _Allocator,
   typename _Random_iterator,
   typename _Function
>
inline void parallel_buffered_sort(
   const _Allocator& _Alloc,
   const _Random_iterator &_Begin,
   const _Random_iterator &_End,
   const _Function &_Func,
   const size_t _Chunk_size = 2048
);

Parametri

  • _Random_iterator
    Tipo dell'iteratore dell'intervallo di input.

  • _Allocator
    Il tipo di allocatore di memoria compatibile STL.

  • _Function
    Il tipo di confronto binario.

  • _Begin
    Un iteratore ad accesso casuale che punta la posizione del primo elemento nell'intervallo da ordinare.

  • _End
    Un iteratore ad accesso casuale che punta la prima posizione oltre l'elemento finale nell'intervallo da ordinare.

  • _Alloc
    Un'istanza di un allocatore di memoria compatibile STL.

  • _Func
    Un oggetto funzione predicativa definito dall'utente che definisce i criteri di confronto che devono essere soddisfatti dagli elementi successivi nell'ordine. Un predicato binario accetta due argomenti e restituisce true se la condizione è soddisfatta e false se non è soddisfatta. Questa funzione di confronto deve imporre un ordine debole rigido rispetto alle coppie di elementi della sequenza.

  • _Chunk_size
    Dimensione minima di un blocco che verrà suddiviso in due per l'esecuzione parallela.

Note

Tutti gli overload richiedono lo spazio aggiuntivo di n * sizeof(T), in cui n è il numero di elementi da ordinare e T è il tipo di elemento. Nella maggior parte dei casi il parallel_buffered_sort mostrerà un miglioramento delle prestazioni su parallel_sort ed è possibile utilizzarlo su parallel_sort se si ha memoria disponibile.

Se non viene fornito un confronto binario std::less viene utilizzato come predefinito, il quale richiede il tipo di elemento dell'operatore operator<().

Se non viene fornito un tipo o un'istanza di un allocatore, l'allocatore di memoria STL std::allocator<T> viene utilizzato per allocare il buffer.

L'algoritmo divide l'intervallo di input in due blocchi e successivamente suddivide ogni blocco in due sottoblocchi per l'esecuzione in parallelo. L'argomento facoltativo _Chunk_size può essere utilizzato per indicare all'algoritmo che deve gestire blocchi di dimensione < _Chunk_size in serie.

Requisiti

Header: ppl.h

Spazio dei nomi: concorrenza

Vedere anche

Riferimenti

Spazio dei nomi concurrency