Merge sort (Italiano)

Merge sort parallelizza bene a causa dell’uso del metodo divide-and-conquer. Diverse varianti parallele dell’algoritmo sono state sviluppate nel corso degli anni. Alcuni algoritmi di ordinamento di unione parallela sono fortemente correlati all’algoritmo di unione sequenziale dall’alto verso il basso, mentre altri hanno una struttura generale diversa e utilizzano il metodo di unione K-way.

Merge sort with parallel recursionEdit

La procedura di merge sort sequenziale può essere descritta in due fasi, la fase di divisione e la fase di fusione., Il primo consiste in molte chiamate ricorsive che eseguono ripetutamente lo stesso processo di divisione fino a quando le sottosequenze non vengono ordinate banalmente (contenenti uno o nessun elemento). Un approccio intuitivo è la parallelizzazione di quelle chiamate ricorsive. Lo pseudocodice seguente descrive l’ordinamento di unione con ricorsione parallela usando le parole chiave fork e join:

Questo algoritmo è la modifica banale della versione sequenziale e non si parallelizza bene. Pertanto, il suo aumento di velocità non è molto impressionante., Ha un intervallo di Θ (n) {\displaystyle \Theta ( n)}, che è solo un miglioramento di Θ (log n n) {\displaystyle \Theta (\log n)} rispetto alla versione sequenziale (vedi Introduzione agli algoritmi). Ciò è dovuto principalmente al metodo di unione sequenziale, in quanto è il collo di bottiglia delle esecuzioni parallele.

Merge sort with parallel mergingEdit

Articolo principale: Merge algorithm § Parallel merge

È possibile ottenere un parallelismo migliore utilizzando un algoritmo di unione parallela. Cormen et al. presenta una variante binaria che unisce due sotto-sequenze ordinate in una sequenza di output ordinata.,

In una delle sequenze (quella più lunga se di lunghezza non uguale), viene selezionato l’elemento dell’indice medio. La sua posizione nell’altra sequenza è determinata in modo tale che questa sequenza rimanga ordinata se questo elemento fosse inserito in questa posizione. Quindi, si sa quanti altri elementi di entrambe le sequenze sono più piccoli e la posizione dell’elemento selezionato nella sequenza di output può essere calcolata. Per le sequenze parziali degli elementi più piccoli e più grandi creati in questo modo, l’algoritmo di unione viene nuovamente eseguito in parallelo fino a raggiungere il caso base della ricorsione.,

Il seguente pseudocodice mostra il metodo di ordinamento parallel merge modificato utilizzando l’algoritmo parallel merge (adottato da Cormen et al.).

Per analizzare una relazione di ricorrenza per il worst case span, le chiamate ricorsive di parallelMergesort devono essere incorporate solo una volta a causa della loro esecuzione parallela, ottenendo

Per informazioni dettagliate sulla complessità della procedura di unione parallela, vedere Merge algorithm.,

La soluzione di questa ricorrenza è data da

T ∞ sort = Θ ( log ⁡ ( n ) 3 ) {\textstyle T_{\infty }^{\text{sort}}=\Theta \left(\log(n)^{3}\right)} .

Parallel multiway merge sortEdit

Sembra arbitrario limitare gli algoritmi di ordinamento di unione a un metodo di unione binario, poiché di solito sono disponibili 2 processori p>. Un approccio migliore potrebbe essere quello di utilizzare un metodo di unione K-way, una generalizzazione di unione binaria, in cui le sequenze ordinate k {\displaystyle k} vengono unite insieme., Questa variante di unione è adatta per descrivere un algoritmo di ordinamento su una CARROZZINA.

Basic IdeaEdit

Il processo di mergesort parallelo a più vie su quattro processori da t 0 {\displaystyle t_{0}} a t 3 {\displaystyle t_{3}} .

Multisequence selectionEdit

PseudocodeEdit

Di seguito, viene fornito lo pseudocodice completo dell’algoritmo di ordinamento di unione a più vie parallele., Supponiamo che ci sia una sincronizzazione barriera prima e dopo la selezione multisequenza tale che ogni processore possa determinare correttamente gli elementi di divisione e la partizione di sequenza.

AnalysisEdit

Adattamento pratico e applicationEdit

L’algoritmo di ordinamento merge multiway è molto scalabile grazie alla sua elevata capacità di parallelizzazione, che consente l’uso di molti processori. Ciò rende l’algoritmo un valido candidato per l’ordinamento di grandi quantità di dati, come quelli elaborati in cluster di computer., Inoltre, poiché in tali sistemi la memoria di solito non è una risorsa limitante, lo svantaggio della complessità dello spazio dell’ordinamento di unione è trascurabile. Tuttavia, altri fattori diventano importanti in tali sistemi, che non vengono presi in considerazione quando si modellano su una CARROZZINA. Qui, i seguenti aspetti devono essere considerati: gerarchia della memoria, quando i dati non rientrano nella cache dei processori, o il sovraccarico di comunicazione dello scambio di dati tra processori, che potrebbe diventare un collo di bottiglia quando i dati non possono più essere accessibili tramite la memoria condivisa.

Sanders et al., hanno presentato nel loro documento un algoritmo parallelo sincrono di massa per mergesort multilivello multiway, che divide i processori p {\displaystyle p} in gruppi r {\displaystyle r} di dimensioni p ‘{\displaystyle p’}. Tutti i processori ordinano prima localmente. A differenza di mergesort multiway a livello singolo, queste sequenze vengono quindi partizionate in parti r {\displaystyle r} e assegnate ai gruppi di processori appropriati. Questi passaggi vengono ripetuti ricorsivamente in quei gruppi. Questo riduce la comunicazione e soprattutto evita problemi con molti piccoli messaggi., La struttura gerarchica della rete reale sottostante può essere utilizzata per definire i gruppi di processori (ad esempio rack, cluster,…).

Further VariantsEdit

Merge sort è stato uno dei primi algoritmi di ordinamento in cui è stata raggiunta una velocità ottimale, con Richard Cole che ha utilizzato un intelligente algoritmo di sottocampionamento per garantire l’unione O(1). Altri sofisticati algoritmi di ordinamento parallelo possono ottenere limiti di tempo uguali o migliori con una costante inferiore., Ad esempio, nel 1991 David Powers descrisse un quicksort parallelizzato (e un ordinamento radix correlato) che può operare in tempo O(log n) su una macchina ad accesso casuale parallelo CRCW (PRAM) con processori n eseguendo il partizionamento implicitamente. Powers mostra inoltre che una versione pipeline del Mergesort bitonico di Batcher al tempo O((log n)2) su una rete di ordinamento a farfalla è in pratica più veloce del suo ordinamento O(log n) su una CARROZZINA, e fornisce una discussione dettagliata delle spese generali nascoste in confronto, radix e ordinamento parallelo.

Lascia un commento

Il tuo indirizzo email non sarà pubblicato. I campi obbligatori sono contrassegnati *

Vai alla barra degli strumenti