Algorithmes avancée en mode multi-thread. Plus de détails...
#include <arcane/accelerator/MultiThreadAlgo.h>
Fonctions membres publiques | |
template<bool IsExclusive, typename DataType , typename Operator , typename InputIterator , typename OutputIterator > | |
void | doScan (ForLoopRunInfo run_info, Int32 nb_value, InputIterator input, OutputIterator output, DataType init_value, Operator op) |
Algorithme de scan multi-thread. | |
template<bool InPlace, typename InputIterator , typename OutputIterator , typename SelectLambda > | |
Int32 | doFilter (ForLoopRunInfo run_info, Int32 nb_value, InputIterator input, OutputIterator output, SelectLambda select_lambda) |
Algorithmes avancée en mode multi-thread.
Pour l'instant seule l'opération de Scan est implémentée.
Définition à la ligne 36 du fichier MultiThreadAlgo.h.
|
inline |
Définition à la ligne 134 du fichier MultiThreadAlgo.h.
|
inline |
Algorithme de scan multi-thread.
Cet algorithme basique utilise deux passes pour le calcul. L'interval d'itération est divisé en N blocs. On prend N = 2*nb_thread.
Le calcul donne toujours la même valeur pour un nombre de bloc donné.
TODO: Utilise du padding pour conserver les valeurs partielles par bloc. TODO: Faire des versions spécialisées si DataType est un type de base tel que 'Int32', 'Int64', 'float' ou 'double'.
Définition à la ligne 60 du fichier MultiThreadAlgo.h.
Références Arcane::arcaneParallelFor(), et Arcane::ParallelLoopOptions::setGrainSize().