¿Qué tan rápido es el algoritmo de clasificación altamente paralelo más rápido, teóricamente? Quiero decir, la clasificación puede hacer tantos hilos separados como desee y todos se ejecutan simultáneamente. ¿Mejoraría sobre el límite [math] \ Omega (n \ log n) [/ math] para un solo subproceso?

La primera pregunta es difícil: encontrar el algoritmo de clasificación altamente paralelo más rápido, teóricamente, requiere una prueba matemática de que no hay una mejora asintótica posible.

La segunda pregunta es mucho más fácil: aunque existe una prueba de que no puede mejorar el resultado O (n log n) para un tipo de comparación, en el número de comparaciones, sí … puede distribuir esta carga de trabajo para mejorar el rendimiento.

Puede hacerlo sincronizando sus subprocesos para operar en diferentes partes de la misma memoria compartida, en épocas de cierta profundidad. Cada subproceso necesita solo una cantidad constante de memoria para el mantenimiento (saber qué índices comparar). La teoría aquí es la de una red de clasificación.

Se sabe que varios enfoques proporcionan una profundidad (número de épocas) de “tiempo paralelo” (con hilos ilimitados) de [matemáticas] O ((log (n)) ^ 2) [/ matemáticas]. Por ejemplo, Batcher impar-incluso mergesort – Wikipedia y clasificador Bitonic – Wikipedia documentan dos de estos bien.

En la práctica, si no tiene los hilos (bueno, los núcleos), puede o no obtener una aceleración, con este tipo de enfoque. El número de comparaciones es [matemáticas] O (n (log (n)) ^ 2) [/ matemáticas]. En el peor de los casos, con 1 subproceso, esto aumenta el tiempo en un factor de log n.

No creo que al ordenar usando varios procesadores (subprocesos) se mejore desde O (nlogn). La complejidad del algoritmo se calcula utilizando el número de operaciones que se necesitan para completar. Entonces, incluso si se paraleliza, el tiempo de ejecución general se reducirá, pero no el orden de complejidad. Puede aumentar ya que se requiere una operación de fusión después de la finalización de múltiples procesadores (hilos).

Para la reducción del tiempo de ejecución, el límite teórico se puede obtener de la ley de Amdhal o de la ley de Gustafson.

Consulte el artículo de Wikipedia sobre lo anterior.

La ordenación de matrices 2D es mejor para las matrices de procesadores 2D.

Verifique cómo hacer un ” ShearSort” en mallas 2D. Si tiene N núcleos, esto debería ser rápido. Asegúrese de que todos los procesadores puedan comunicarse tanto vertical como horizontalmente (no solo en software sino también por soporte de hardware).

O (Nlog (sqrt (N))) para 1 núcleo.

O (log (sqrt (N))) para N núcleos

Introducción a la clasificación paralela en topologías basadas en malla

Algoritmo de clasificación de corte para ordenar una matriz * n en O (n ^ 2logn) en orden de serpiente

Depende de los datos. Si conoce el rango y la distribución (en condiciones ideales, distribuidas de manera uniforme). La ordenación de contador te dará Ω (n). La mejor clasificación de cubos se acercará a eso (paralela o no).

Parece que esto podría ser en cualquier lugar tan efectivo como la clasificación de burbujas para un oráculo, dependiendo del significado de “tener” y si los hilos son independientes. Si está altamente paralelizado, podría depender más de la velocidad de comunicación que un mísero O (log n) número de “pasos”. Perdón por una respuesta informal.

Creo que un tipo de comparación usando n procesadores se ejecuta en tiempo de registro (n). Eso es solo fuerza bruta. Puede haber formas más rápidas.

Compruebe el método paralelo de Batcher en Knuth vol. 3)