14#include "arcane/utils/ArcanePrecomp.h"
15#include "arcane/utils/TraceAccessor.h"
16#include "arcane/utils/NotImplementedException.h"
17#include "arcane/utils/TraceInfo.h"
18#include "arcane/utils/String.h"
19#include "arcane/utils/PlatformUtils.h"
21#include "arcane/IParallelMng.h"
23#include "arcane/parallel/IMultiReduce.h"
36class PostProcessingMng;
53 virtual void execute();
54 virtual bool isStrict()
const {
return m_is_strict; }
55 virtual void setStrict(
bool is_strict) { m_is_strict = is_strict; }
61 ReduceSumOfRealHelperMap::const_iterator i = m_sum_helpers.find(name);
63 if (i==m_sum_helpers.end()){
65 m_sum_helpers.insert(std::make_pair(name,v));
74 typedef std::map<String,ReduceSumOfRealHelper*> ReduceSumOfRealHelperMap;
78 ReduceSumOfRealHelperMap m_sum_helpers;
88IMultiReduce* IMultiReduce::
89create(IParallelMng* pm)
91 return new MultiReduce(pm);
101MultiReduce(IParallelMng* pm)
102: TraceAccessor(pm->traceMng())
106 if (!platform::getEnvironmentVariable(
"ARCANE_STRICT_REDUCE").null())
116 ReduceSumOfRealHelperMap::const_iterator i = m_sum_helpers.begin();
117 for( ; i!=m_sum_helpers.end(); ++i )
119 m_sum_helpers.clear();
129 ReduceSumOfRealHelperMap::const_iterator i = m_sum_helpers.begin();
130 for( ; i!=m_sum_helpers.end(); ++i )
131 _execStrict(i->second);
145 ReduceSumOfRealHelperMap::const_iterator i = m_sum_helpers.begin();
146 for( ; i!=m_sum_helpers.end(); ++i ){
148 values[index] = i->second->values()[0];
154 m_parallel_mng->
reduce(Parallel::ReduceSum,values);
158 ReduceSumOfRealHelperMap::const_iterator i = m_sum_helpers.begin();
159 for( ; i!=m_sum_helpers.end(); ++i ){
161 i->second->setReducedValue(values[index]);
179 std::sort(std::begin(all_values),std::end(all_values));
181 for( Integer i=0, n=all_values.
size(); i<n; ++i )
182 sum += all_values[i];
Gestion de réductions multiples.
Interface du gestionnaire de parallélisme pour un sous-domaine.
virtual void gatherVariable(ConstArrayView< char > send_buf, Array< char > &recv_buf, Int32 rank)=0
Effectue un regroupement sur tous les processeurs.
virtual char reduce(eReduceType rt, char v)=0
Effectue la réduction de type rt sur le réel v et retourne la valeur.
virtual bool isStrict() const
Indique si on utilise le mode strict.
virtual ReduceSumOfRealHelper * getSumOfReal(const String &name)
Retourne le gestionnaire de nom name. S'il n'existe pas de gestionnaire de nom name il est créé....
virtual void setStrict(bool is_strict)
Positionne le mode strict.
virtual void execute()
Exécute les réductions.
Classe gérant une réduction d'une somme de valeur.
RealConstArrayView values() const
Liste des valeurs accumulées.
void setReducedValue(Real v)
Positionne la valeur réduite.
Integer size() const
Nombre d'éléments du vecteur.
Chaîne de caractères unicode.
Classe d'accès aux traces.
Vecteur 1D de données avec sémantique par valeur (style STL).
Integer arcaneCheckArraySize(unsigned long long size)
Vérifie que size peut être converti dans un 'Integer' pour servir de taille à un tableau....
ArrayView< Real > RealArrayView
Equivalent C d'un tableau à une dimension de réels.