Algorithme de tri bitonique parallèle. Plus de détails...
#include <arcane/core/parallel/BitonicSort.h>
Fonctions membres publiques | |
BitonicSort (IParallelMng *parallel_mng) | |
void | sort (ConstArrayView< KeyType > keys) override |
Trie en parallèle les éléments de keys sur tous les rangs. | |
ConstArrayView< KeyType > | keys () const override |
Après un tri, retourne la liste des éléments de ce rang. | |
Int32ConstArrayView | keyRanks () const override |
Après un tri, retourne le tableau des rangs d'origine des éléments de keys(). | |
Int32ConstArrayView | keyIndexes () const override |
Après un tri, retourne le tableau des indices dans la liste d'origine des éléments de keys(). | |
void | setNeedIndexAndRank (bool want_index_and_rank) |
Fonctions membres publiques hérités de Arccore::TraceAccessor | |
TraceAccessor (ITraceMng *m) | |
Construit un accesseur via le gestionnaire de trace m. | |
TraceAccessor (const TraceAccessor &rhs) | |
Constructeur par recopie. | |
TraceAccessor & | operator= (const TraceAccessor &rhs) |
Opérateur de recopie. | |
virtual | ~TraceAccessor () |
Libère les ressources. | |
ITraceMng * | traceMng () const |
Gestionnaire de trace. | |
TraceMessage | info () const |
Flot pour un message d'information. | |
TraceMessage | pinfo () const |
Flot pour un message d'information en parallèle. | |
TraceMessage | info (char category) const |
Flot pour un message d'information d'une catégorie donnée. | |
TraceMessage | pinfo (char category) const |
Flot pour un message d'information parallèle d'une catégorie donnée. | |
TraceMessage | info (bool v) const |
Flot pour un message d'information. | |
TraceMessage | warning () const |
Flot pour un message d'avertissement. | |
TraceMessage | pwarning () const |
TraceMessage | error () const |
Flot pour un message d'erreur. | |
TraceMessage | perror () const |
TraceMessage | log () const |
Flot pour un message de log. | |
TraceMessage | plog () const |
Flot pour un message de log. | |
TraceMessage | logdate () const |
Flot pour un message de log précédé de la date. | |
TraceMessage | fatal () const |
Flot pour un message d'erreur fatale. | |
TraceMessage | pfatal () const |
Flot pour un message d'erreur fatale en parallèle. | |
TraceMessageDbg | debug (Trace::eDebugLevel=Trace::Medium) const |
Flot pour un message de debug. | |
Trace::eDebugLevel | configDbgLevel () const |
Niveau debug du fichier de configuration. | |
TraceMessage | info (Int32 verbose_level) const |
Flot pour un message d'information d'un niveau donné | |
TraceMessage | linfo () const |
Flot pour un message d'information avec le niveau d'information local à cette instance. | |
TraceMessage | linfo (Int32 relative_level) const |
Flot pour un message d'information avec le niveau d'information local à cette instance. | |
void | fatalMessage (const StandaloneTraceMessage &o) const |
Membres hérités additionnels | |
Fonctions membres protégées hérités de Arccore::TraceAccessor | |
void | _setLocalVerboseLevel (Int32 v) |
Int32 | _localVerboseLevel () const |
Algorithme de tri bitonique parallèle.
Le type de la clé peut être quelconque, mais il doit posséder un opérateur de comparaison. Les caractéristiques nécessaires sont données par la classe KeyTypeTraints. . L'implémentation fournit les opérations pour les type Int32, Int64 et Real via la classe BitonicSortDefaultTraits. Pour les autres types, il est nécessaire de spécialiser cette classe.
La méthode sort() procède au tri. Après appel à cette méthode, il est possible de récupérer la liste des clés via keys() et les rangs et indices dans la liste d'origine de chaque élément de la clé via les méthodes keyRangs() et keyIndexes(). Si ces informations ne sont pas utiles, il est possible d'appeler setNeedIndexAndRank() pour les désactiver ce qui permet d'accéler quelque peu le tri.
Le tri se fait de telle sorte que les éléments sont triés dans l'ordre croissant en commençant par le processeur de rang 0, puis de rang 1 et ainsi de suite jusqu'à la fin. Par exemple, pour une liste de 5000 éléments répartis sur 4 rangs, le processeur de rang 0 possédera à la fin du tri les 1250 éléments les plus petits, le processeur de rang 1 les 1250 éléments suivantes et ainsi de suite.
Pour accélérer l'algorithme, il est préférable que tous les processeurs aient environ le même nombre d'éléments dans leur liste au départ. A la fin du tri, il est possible que tous les processeurs n'aient pas le même nombre d'éléments dans la liste et notamment les processeurs de rang les plus élevés peuvent ne pas avoir d'éléments.
Définition à la ligne 99 du fichier BitonicSort.h.
|
explicit |
Définition à la ligne 29 du fichier BitonicSortT.H.
|
inlineoverridevirtual |
Après un tri, retourne le tableau des indices dans la liste d'origine des éléments de keys().
Implémente Arcane::Parallel::IParallelSort< KeyType >.
Définition à la ligne 123 du fichier BitonicSort.h.
|
inlineoverridevirtual |
Après un tri, retourne le tableau des rangs d'origine des éléments de keys().
Implémente Arcane::Parallel::IParallelSort< KeyType >.
Définition à la ligne 120 du fichier BitonicSort.h.
|
inlineoverridevirtual |
Après un tri, retourne la liste des éléments de ce rang.
Implémente Arcane::Parallel::IParallelSort< KeyType >.
Définition à la ligne 117 du fichier BitonicSort.h.
|
inline |
Définition à la ligne 127 du fichier BitonicSort.h.
|
overridevirtual |
Trie en parallèle les éléments de keys sur tous les rangs.
Tri bitonique de la variable m_key.
Cette opération est collective.
En sortie de l'appel, la variable key est entièrement classée par ordre croissant : les premiers éléments sont situés par ordre croissant sur le processeur 0, les suivants sur le processeur 1, etc... Le rangement se fait 'en place', de sorte que la taille des tableaux sur les différents processeurs n'est pas modifiée.
Implémente Arcane::Parallel::IParallelSort< KeyType >.
Définition à la ligne 86 du fichier BitonicSortT.H.