L'état de l'art dans le tri des GPU n'est pas particulièrement encourageant. Pour le tri des entiers 32 bits, le document suivant de 2009 (avec 2 auteurs qui sont des chercheurs chez Nvidia) ne réclame que 23% d'augmentation pour le meilleur tri CUDA sur GTX280 par rapport au meilleur tri CPU sur un Yorkfield 4 cœurs.
http://www.mgarland.org/files/papers/gpusort-ipdps09.pdf
Cette utilisé une sorte de base sur le GPU, et le tri par fusion sur le processeur. Vous auriez besoin d'un tri basé sur la comparaison pour construire un tableau de suffixes, donc au lieu de trier la base GPU, le meilleur de ceux dans le papier serait le tri par fusion GPU, qui a atteint environ la moitié de la vitesse du type GPU. clés) - c'est-à-dire environ 40% plus lent que le tri par fusion du processeur. L'ajout de clés de longueur variable risque d'entraîner une désynchronisation des threads dans un GPU, ce qui réduirait davantage les performances du GPU que du CPU.
Dans l'ensemble, si votre but est de construire un système efficace, je vous recommande d'utiliser une implémentation de CPU pour ce problème car il sera plus rapide et plus facile à écrire.
Mais, si votre but est d'expérimenter ou tout simplement pour en apprendre davantage sur GPU, alors vous pouvez trouver l'application CUDA de tri fusion du papier dans le kit de développement CUDA:
http://developer.download.nvidia.com/compute/cuda/sdk/website/Data-Parallel_Algorithms.html
'1M' caractères par string (avg '.5M'?),' 1M' chaînes, 2 octets/char (plus commun) donne: '.5 * 1 * 2 = 1TB' mémoire. Vous avez besoin de quelque chose de spécial pour cela (peut-être une base de données?), Car très peu de machines existent avec ce type de mémoire, sans parler de la mémoire GPU. http://blogs.technet.com/b/markrussinovich/archive/2008/07/21/3092070.aspx – Abel
La longueur de chaîne maximale ne dit rien sur la moyenne. Je suppose que les chaînes sont déjà en mémoire et en cours de tri, mais l'affiche est mécontente des performances du processeur sur la tâche. –
Il peut être pertinent/utile d'entendre comment les données sont structurées. Est-ce un tas de chaînes contiguës séparées par '\ 0'? Les chaînes sont-elles précédées d'un en-tête contenant un nombre d'octets? Ou y a-t-il un tableau de pointeurs dans un tas? Parlons-nous des chaînes ASCII ou Unicode? –