Lo stato dell'arte nell'ordinamento GPU non è particolarmente incoraggiante.
Per classificare 32 bit interi seguente carta dal 2009 (con 2 autori che sono ricercatori Nvidia) sostiene solo aumento del 23% per la migliore CUDA ordinamento su GTX280 rispetto ai migliori ordinamento CPU su un nucleo 4 Yorkfield.
http://www.mgarland.org/files/papers/gpusort-ipdps09.pdf
Questo usato un ordinamento di radice sulla GPU e unire ordinamento CPU. Avresti bisogno di un ordinamento basato su confronto per costruire un suffisso array, quindi al posto di GPX radix sort il meglio di quelli nella carta sarebbe l'ordinamento di merge GPU, che ha ottenuto circa la metà della velocità di GPX radix sort (con 1 milione chiavi) - cioè circa il 40% più lento rispetto all'ordinamento di fusione della CPU.
L'aggiunta di chiavi di lunghezza variabile sembra probabile che i thread in una curvatura non saranno sincronizzati su una GPU, quindi ridurrebbe le prestazioni sulla GPU più della CPU.
In generale se il tuo scopo è quello di costruire un sistema efficiente, ti consiglio di utilizzare un'implementazione della CPU per questo problema perché sarà più veloce e più facile da scrivere.
Ma, se il vostro scopo è quello di sperimentare o semplicemente per conoscere GPU, allora si può trovare l'attuazione CUDA di merge sort dalla carta nel CUDA SDK:
http://developer.download.nvidia.com/compute/cuda/sdk/website/Data-Parallel_Algorithms.html
'1M' caratteri per string (avg '.5M'?), stringhe' 1M', 2 byte/char (più comuni) produce: '.5 * 1 * 2 = 1TB' di memoria. Hai bisogno di qualcosa di speciale per questo (forse un database?), Poiché esistono pochissime macchine con quel tipo di memoria, per non parlare della memoria della GPU. http://blogs.technet.com/b/markrussinovich/archive/2008/07/21/3092070.aspx – Abel
La lunghezza massima della stringa non dice nulla sulla media. Presumo che le stringhe siano già in memoria e ordinate, ma il poster non è soddisfatto delle prestazioni della CPU sull'attività. –
Potrebbe essere rilevante/utile sentire come sono strutturati i dati. È un mucchio di stringhe contigue separate da '\ 0'? Le stringhe sono precedute da un'intestazione che contiene un conteggio dei byte? O c'è una serie di puntatori in un mucchio? Stiamo parlando di stringhe ASCII o Unicode? –