Le tri prend O (n log n) dans le cas série. Si nous avons des processeurs O (n), nous espérons une accélération linéaire. Des algorithmes parallèles O (log n) existent mais ils ont une constante très élevée. Ils ne sont pas non plus applicables sur le matériel de base qui n'a nulle part près de processeurs O (n). Avec p processeurs, des algorithmes raisonnables devraient prendre un temps O (n / p log n).
Dans le cas des séries, le tri rapide présente en moyenne la meilleure complexité d'exécution. Un algorithme de tri rapide parallèle est facile à implémenter (voir ici et ici ). Cependant, cela ne fonctionne pas bien car la toute première étape consiste à partitionner toute la collection sur un seul cœur. J'ai trouvé des informations sur de nombreux algorithmes de tri parallèle, mais jusqu'à présent, je n'ai rien vu d'indiquer un gagnant clair.
Je cherche à trier des listes de 1 à 100 millions d'éléments dans un langage JVM fonctionnant sur 8 à 32 cœurs.
la source
Réponses:
L'article suivant (téléchargement PDF) est une étude comparative d'algorithmes de tri parallèle sur différentes architectures:
Algorithmes de tri parallèle sur différentes architectures
Selon l'article, le tri des échantillons semble être le meilleur sur de nombreux types d'architecture parallèle.
Mise à jour pour répondre aux préoccupations de Mark concernant l'âge:
Voici des articles plus récents présentant quelque chose de plus nouveau (à partir de 2007, qui, d'ailleurs, est toujours comparé au tri des échantillons):
Améliorations du tri des échantillons Tri
AA
À la pointe de la technologie (vers 2010, certains ne datent que de quelques mois):
Modèle de tri
parallèle Tri parallèle basé sur GPU à plusieurs cœurs Tri parallèle
CPU / GPU hybride
Algorithme de tri parallèle aléatoire avec une étude expérimentale Tri
parallèle hautement évolutif
Tri des N-éléments à l'aide de l'ordre naturel: une nouvelle approche de tri adaptatif
Mise à jour pour 2013: Voici la pointe de la technologie vers janvier 2013. (Remarque: certains des liens renvoient aux articles de Citeseer et nécessitent une inscription gratuite):
Cours universitaires:
Partitionnement parallèle pour la sélection et le tri
Algorithmes de tri parallèle Cours Algorithmes de tri
parallèle Cours 2
Algorithmes de tri parallèle Cours 3
Autres sources et articles:
Un nouvel algorithme de tri pour les architectures à plusieurs cœurs basé sur le tri bitonique adaptatif Tri
parallèle hautement évolutif 2
Parallel Merging
Parallel Fusion de 2
systèmes d'auto-tri parallèles pour les objets
Comparaison des performances des algorithmes de tri rapide séquentiel et de tri rapide parallèle
Mémoire partagée, passage de messages et tris hybrides de fusion pour les SMP autonomes et en cluster
Divers algorithmes parallèles (tri et al), y compris les implémentations
Sources et documents hybrides GPU et CPU / GPU:
Une méthode OpenCL d'algorithmes de tri parallèle pour l'architecture GPU
Tri des données à l'aide d'unités de traitement graphique
Algorithmes efficaces pour le tri sur les GPU
Conception d'algorithmes de tri efficaces pour de nombreux GPU
Tri déterministe des échantillons pour les GPU Tri
rapide sur place avec CUDA basé sur le tri bitonique Tri
rapide par GPU parallèle à l'aide d'un algorithme hybride Algorithmes de
tri parallèle rapide sur GPU
Tri rapide sur CPU et GPU: un cas pour la bande passante inconsciente Tri SIMD Tri d'
échantillons
GPU GPU-ABiSort: Tri parallèle optimal sur les architectures de flux
GPUTeraSort: élevé tri par coprocesseur graphique de performance pour la gestion de grandes bases de données
Algorithme de tri basé sur une comparaison haute performance sur des GPU à plusieurs cœurs
Tri externe parallèle pour les GPU compatibles CUDA avec équilibrage de charge et faible surcharge de transfert
Tri sur GPU pour des ensembles de données à grande échelle: une comparaison approfondie
la source
J'ai travaillé avec un algorithme de tri rapide parallèle et un algorithme PSRS qui combine essentiellement le tri rapide en parallèle avec la fusion.
Avec l'algorithme Parallel Quicksort, j'ai démontré une accélération presque linéaire avec jusqu'à 4 cœurs (dual core avec hyper-threading), ce qui est attendu compte tenu des limitations de l'algorithme. Un tri rapide parallèle pur repose sur une ressource de pile partagée qui entraînera des conflits entre les threads, réduisant ainsi tout gain de performances. L'avantage de cet algorithme est qu'il trie «sur place», ce qui réduit la quantité de mémoire nécessaire. Vous voudrez peut-être en tenir compte lorsque vous triez plus de 100 millions d'éléments comme vous l'avez indiqué.
Je vois que vous cherchez à trier sur un système avec 8-32 cœurs. L'algorithme PSRS évite les conflits au niveau de la ressource partagée, permettant une accélération à un plus grand nombre de processus. J'ai démontré l'algorithme avec jusqu'à 4 cœurs comme ci-dessus, mais les résultats expérimentaux d'autres rapportent une accélération presque linéaire avec un nombre beaucoup plus grand de cœurs, 32 et au-delà. L'inconvénient de l'algorithme PSRS est qu'il n'est pas en place et nécessitera beaucoup plus de mémoire.
Si vous êtes intéressé, vous pouvez utiliser ou parcourir mon code Java pour chacun de ces algorithmes. Vous pouvez le trouver sur github: https://github.com/broadbear/sort . Le code est conçu comme un remplacement de Java Collections.sort (). Si vous recherchez la possibilité d'effectuer un tri parallèle dans une JVM comme vous l'indiquez ci-dessus, le code de mon dépôt peut vous aider. L'API est entièrement générique pour les éléments mettant en œuvre Comparable ou implémentant votre propre comparateur.
Puis-je vous demander pourquoi vous cherchez à trier autant d'éléments? Je suis intéressé de connaître les applications potentielles pour mon package de tri.
la source
Jetez un œil à cet article: Un algorithme de tri parallèle évolutif utilisant la division exacte . Il concerne plus de 32 cœurs. Cependant, il décrit en détail un algorithme, qui a une complexité de temps d'exécution de O (n / p * log (n) + p * log (n) ** 2) et est applicable pour des comparateurs arbitraires.
la source
Le document «Comparaison des algorithmes de tri parallèle sur différentes architectures» peut être un bon point de départ.
la source