Quicksort o Mergesort multiproceso

¿Cómo puedo implementar un algoritmo concurrente de combinación rápida o combinación para Java?

Hemos tenido problemas en una Mac de 16 núcleos (virtuales) en la que solo un núcleo (!) Funcionaba usando el algoritmo de clasificación predeterminado de Java y, bueno, no era bueno ver que una máquina muy fina estaba completamente subutilizada. Así que escribimos el nuestro (lo escribí) y, de hecho, obtuvimos buenas aceleraciones (escribí un resumen rápido multiproceso y debido a su naturaleza de partición, se paraleliza muy bien, pero también podría haber escrito un agrupamiento combinado) ... Pero mi implementación solo escala hasta 4 subprocesos, es código patentado, y prefiero usar uno que provenga de una fuente confiable en lugar de usar mi rueda reinventada.

El único que encontré en la Web es un ejemplo de cómono para escribir un ordenamiento rápido de subprocesos múltiples en Java, está ocupado (lo que es realmente terrible) usando un:

while (helpRequested) { }

http://broadcast.oreilly.com/2009/06/may-column-multithreaded-algor.html

Entonces, además de perder un hilo sin ninguna razón, se está asegurando de matar las perforaciones haciendo un bucle ocupado en ese bucle while (que es alucinante).

De ahí mi pregunta: ¿sabe de alguna implementación de multiproceso rápido o fusión combinada en Java que provenga de una fuente confiable?

Puse el énfasis en el hecho de que sé que la complejidad sigue siendo O (n log n) pero aún así me gustaría mucho ver que todos estos núcleos comienzan a funcionar en lugar de estar inactivos. Tenga en cuenta que para otras tareas, en los mismos 16 núcleos virtuales Mac, vi una aceleración de hasta x7 al paralelizar el código (y de ninguna manera soy un experto en concurrencia).

Entonces, incluso si la complejidad sigue siendo O (n log n), realmente agradecería una aceleración x7 o x8 o incluso x16.

Respuestas a la pregunta(8)

Su respuesta a la pregunta