El estado del arte en la clasificación de GPU no es particularmente alentador.
Para clasificar enteros de 32 bits el siguiente artículo de 2009 (con 2 autores que son investigadores de Nvidia) solo afirma un aumento del 23% para el mejor tipo de CUDA en GTX280 en comparación con la mejor ordenación de CPU en un Yorkfield de 4 núcleos.
http://www.mgarland.org/files/papers/gpusort-ipdps09.pdf
Esta utilizaron una especie radix en la GPU, y ordenamiento por mezcla en la CPU. Necesitaría una ordenación basada en comparación para construir una matriz de sufijos, por lo que en lugar del ordenamiento de GPU radix, el mejor de los del documento sería la fusión de GPU, que logró aproximadamente la mitad de la velocidad del ordenamiento de la GPU (con 1 millón teclas), es decir, aproximadamente un 40% más lento que la ordenación por fusión de CPU.
La adición de claves de longitud variable parece causar que los hilos en una urdimbre se desincronicen en una GPU, por lo que reduciría el rendimiento en la GPU más que en la CPU.
En general, si su propósito es construir un sistema eficiente, le recomendaría que utilice una implementación de CPU para este problema, ya que será más rápido y fácil de escribir.
Pero, si su propósito es experimentar o simplemente para aprender acerca de la GPU, a continuación, puede encontrar la aplicación CUDA de fusión tipo del papel en el SDK de CUDA:
http://developer.download.nvidia.com/compute/cuda/sdk/website/Data-Parallel_Algorithms.html
'1M' caracteres por string (avg '.5M'?),' 1M' strings, 2 bytes/char (más común) produce: '.5 * 1 * 2 = 1TB' memory. Necesita algo especial para esto (¿tal vez una base de datos?), Ya que existen muy pocas máquinas con ese tipo de memoria, y mucho menos con la memoria GPU. http://blogs.technet.com/b/markrussinovich/archive/2008/07/21/3092070.aspx – Abel
La longitud máxima de la cadena no dice nada sobre el promedio. Supongo que las cadenas ya están en la memoria y se ordenan, pero el póster no está satisfecho con el rendimiento de la CPU en la tarea. –
Puede ser relevante/útil escuchar cómo se estructuran los datos. ¿Es un grupo de cadenas contiguas separadas por '\ 0'? ¿Las cadenas van precedidas de un encabezado que contiene un recuento de bytes? ¿O hay una serie de indicadores en un montón? ¿Estamos hablando de cadenas ASCII o Unicode? –