Parallele In-Place-Sortierung für numme Arrays

8

Ich muss oft große Zahlenfelder (wenige Milliarden Elemente) sortieren, was zu einem Engpass in meinem Code wurde. Ich suche nach einer Möglichkeit, es parallel zu machen.

Gibt es parallele Implementierungen für die Funktion ndarray.sort() ? Das Numexpr-Modul bietet eine parallele Implementierung für die meisten mathematischen Operationen auf numpigen Arrays, aber es fehlen Sortiermöglichkeiten.

Vielleicht ist es möglich, einen einfachen Wrapper um eine C ++ - Implementierung der parallelen Sortierung zu erstellen und sie über Cython zu verwenden.

    
Maxim Imakaev 18.12.2014, 16:32
quelle

2 Antworten

4

Ich habe GCC-Parallelsortierung abgeschlossen. Hier ist der Code:

parallelSort.pyx

%Vor%

Zusätzliche Compilerargumente: -fopenmp (Kompilieren) und -lgomp (Verknüpfen)

Dieses Makefile wird es tun:

%Vor%

Und das zeigt, dass es funktioniert:

%Vor%

edit: behobene Fehler im Kommentar unten bemerkt

    
Maxim Imakaev 22.02.2015 21:18
quelle
2

Mergesort parallelisiert sich ganz natürlich. Lassen Sie jeden Worker einen beliebigen Chunk vorsortieren, und führen Sie dann einen einzigen Merge-Durchlauf für ihn aus. Das abschließende Zusammenführen sollte nur O (N) -Operationen erfordern, und es ist trivial, eine Funktion dafür in numba oder so zu schreiben.

Wikipedia stimmt zu

    
Eelco Hoogendoorn 27.12.2014 10:40
quelle

Tags und Links