Quel algorithme de tri parallèle a la meilleure performance moyenne?
Tri prend O (N log n) dans le cas de série. Si nous avons des processeurs O(n), Nous espérons une accélération linéaire. O (log n) les algorithmes parallèles existent mais ils ont une constante très élevée. Ils ne sont pas non plus applicables sur le matériel commodity qui n'a pas de processeurs O(n) proches. Avec les processeurs p, des algorithmes raisonnables devraient prendre du temps O (N / P log n).
dans le cas de série, quick sort A la meilleure complexité d'exécution en moyenne. Un tri rapide parallèle l'algorithme est facile à implémenter (voir ici et ici ). Cependant, il ne fonctionne pas bien puisque la toute première étape est de diviser l'ensemble de la collection sur un seul noyau. J'ai trouvé des informations sur de nombreux parallèles algorithmes de tri mais jusqu'à présent je n'ai rien vu indiquant clairement le gagnant.
je cherche à trier des listes de 1 à 100 millions d'éléments dans un langage JVM de 8 à 32 cœurs.
4 réponses
l'article suivant (PDF download) est une étude comparative des algorithmes de tri parallèle sur diverses architectures:
algorithmes de tri en parallèle sur diverses architectures
Selon l'article, "151970920 de l'échantillon" tri semble être la meilleure sur de nombreux parallèles types d'architecture.
mise à Jour de l'adresse de Marque de l'inquiétude de l'âge:
voici plus récent articles présentant quelque chose de plus nouveau (à partir de 2007, qui, btw, encore obtenir comparé avec tri d'échantillon):
amélioration du tri des échantillons
AA-Sort
La bord de saignement (circa 2010, certains vieux de quelques mois seulement):
schéma de tri parallèle
tri parallèle à base de GPU multicentriques
tri parallèle CPU/GPU Hybride
algorithme aléatoire de tri parallèle avec étude expérimentale
tri parallèle hautement évolutif
tri des N-Éléments en utilisant L'ordre naturel: une nouvelle approche adaptative de tri
Mise à jour pour 2013:
Voici le bord de saignement autour de janvier, 2013. (Note: quelques-uns des liens sont à des papiers chez Citeseer et exigent l'enregistrement qui est gratuit):
conférences universitaires:
cloisonnement parallèle pour la sélection et le tri
Conférence sur les Algorithmes de tri parallèle
Tri parallèle Conférence Sur Les Algorithmes 2
Conférence Sur Les Algorithmes De Tri Parallèle 3
Autres sources et articles:
un nouvel algorithme de tri pour les architectures à plusieurs noyaux basé sur le tri bitonique adaptatif
Tri parallèle hautement évolutif 2
Fusion parallèle
Fusion parallèle 2
système D'Auto-Tri parallèle pour les objets
comparaison des performances des algorithmes de tri rapide séquentiel et de tri rapide parallèle
la mémoire partagée, le passage de messages et les sortes de fusion hybrides pour les PME autonomes et groupées
divers algorithmes parallèles (tri et al), y compris les implémentations
Sources et documents hybrides GPU et CPU/GPU:
an OpenCL Method of Parallel Sorting Algorithms for GPU Architecture
tri des données à L'aide D'Unités de traitement graphique
algorithmes efficaces pour le tri sur GPU
concevoir des algorithmes de tri efficaces pour les GPU de manycore
Tri D'échantillons déterministes pour les GPU
tri rapide en place avec CUDA basé sur le tri bitonique
tri parallèle GPU rapide à l'aide d'un algorithme hybride
Tri parallèle rapide Algorithmes sur GPUs
tri rapide sur CPUs et GPUs: un cas pour la bande passante Oblivious SIMD tri
GPU tri des échantillons
GPU-ABiSort: tri en parallèle Optimal sur les Architectures Stream
GPUTeraSort: co-processeur graphique haute performance pour le tri pour la gestion de grandes bases de données
" high performance comparison-based sorting algorithm on many-core GPUs
tri externe parallèle pour les GPU à commande CUDA avec équilibrage de la charge et transfert de charge faible
tri sur GPUs pour les ensembles de données à grande échelle: une comparaison approfondie
j'ai travaillé à la fois avec un algorithme Quicksort parallèle et un algorithme PSRS qui combine essentiellement quicksort en parallèle avec la fusion.
avec l'algorithme Quicksort parallèle, j'ai démontré une vitesse quasi linéaire avec jusqu'à 4 noyaux (double noyau avec Hyper-filetage), ce qui est attendu étant donné les limites de l'algorithme. Un Quicksort parallèle pur s'appuie sur une ressource de pile partagée qui aboutira à la discorde entre les threads, réduisant ainsi tout gain dans la performance. L'avantage de cet algorithme est qu'il trie "en place", ce qui réduit la quantité de mémoire nécessaire. Vous voudrez peut-être tenir compte de cela lors du tri de plus de 100m d'éléments comme vous l'avez déclaré.
je vois que vous cherchez à trier sur un système avec 8-32 cœurs. L'algorithme du SRFP évite la discorde à la ressource partagée, permettant une accélération à un plus grand nombre de processus. J'ai démontré l'algorithme avec jusqu'à 4 noyaux comme ci-dessus, mais les résultats expérimentaux d'autres signalez une vitesse quasi linéaire avec un nombre beaucoup plus grand de noyaux, 32 et au-delà. L'inconvénient de la SRFP algorithme est qu'il n'est pas en place, et exigera beaucoup plus de mémoire.
si vous êtes intéressé, vous pouvez utiliser ou consulter mon code Java pour chacun de ces algorithmes. Vous pouvez le trouver sur github: https://github.com/broadbear/sort . Le code est destiné à remplacer les Collections Java.sorte.)( Si vous êtes à la recherche pour la capacité pour effectuer un tri parallèle dans une JVM comme vous le mentionnez ci-dessus, le code dans ma repo peut vous aider. L'API est entièrement généralisée pour les éléments mettant en œuvre comparables ou mettant en œuvre votre propre comparateur.
puis-je vous demander pourquoi vous cherchez à trier autant d'éléments? Je suis intéressé de connaître des applications potentielles pour mon paquet de tri.
jetez un coup d'oeil à ce papier: un algorithme de tri parallèle évolutif utilisant la Division exacte . Il concerne beaucoup plus de 32 cœurs. Cependant, il décrit en détail un algorithme, qui a une complexité de durée D'exécution de O(n/p * log(n) + p * log(n)**2) et est applicable pour les comparateurs arbitraires.
Le papier , "Comparaison des Parallèles sur les Différents Algorithmes de Tri Architectures " peut être un bon endroit pour commencer.