16#include "arcane/utils/TraceInfo.h"
17#include "arcane/utils/Observable.h"
34 static const int FUNCTOR_CLASS_SIZE =
sizeof(
TaskType);
44 m_functor = f->clone(functor_buf,FUNCTOR_CLASS_SIZE);
59 for( Integer i=0,n=
tasks.size(); i<n; ++i )
67 ITaskFunctor* m_functor;
68 char functor_buf[FUNCTOR_CLASS_SIZE];
149 o <<
"NullTaskImplementation";
156NullTaskImplementation NullTaskImplementation::singleton;
157ITaskImplementation* TaskFactory::m_impl = &NullTaskImplementation::singleton;
158IObservable* TaskFactory::m_created_thread_observable = 0;
159IObservable* TaskFactory::m_destroyed_thread_observable = 0;
160Int32 TaskFactory::m_verbose_level = 0;
161ParallelLoopOptions TaskFactory::m_default_loop_options;
169 if (m_impl && m_impl!=&NullTaskImplementation::singleton)
170 ARCANE_FATAL(
"TaskFactory already has an implementation");
180 if (!m_created_thread_observable)
181 m_created_thread_observable =
new Observable();
182 return m_created_thread_observable;
191 if (!m_destroyed_thread_observable)
192 m_destroyed_thread_observable =
new Observable();
193 return m_destroyed_thread_observable;
203 if (m_impl==&NullTaskImplementation::singleton)
207 m_impl = &NullTaskImplementation::singleton;
#define ARCANE_FATAL(...)
Macro envoyant une exception FatalErrorException.
Classes, Types et macros pour gérer la concurrence.
Interface d'un observable.
Interface d'un fonctor sur un interval d'itération.
virtual void executeFunctor(Integer begin, Integer size)=0
Exécute la méthode associée.
Interface d'un fonctor pour une tâche.
Implémentation d'une fabrique de tâches.
Interface d'une tâche concourante.
Lecteur des fichiers de maillage via la bibliothèque LIMA.
void executeParallelFor(const ComplexForLoopRanges< 1 > &loop_ranges, const ParallelLoopOptions &options, IMDRangeFunctor< 1 > *functor) override
Exécute une boucle 1D en concurrence.
void executeParallelFor(const ComplexForLoopRanges< 3 > &loop_ranges, const ParallelLoopOptions &options, IMDRangeFunctor< 3 > *functor) override
Exécute une boucle 3D en concurrence.
void printInfos(std::ostream &o) const final
Affiche les informations sur le runtime utilisé
Int32 currentTaskIndex() const override
Implémentation de TaskFactory::currentTaskIndex()
void executeParallelFor(const ComplexForLoopRanges< 4 > &loop_ranges, const ParallelLoopOptions &options, IMDRangeFunctor< 4 > *functor) override
Exécute une boucle 4D en concurrence.
Int32 nbAllowedThread() const override
Nombre de threads utilisés au maximum pour gérer les tâches.
void executeParallelFor(Integer begin, Integer size, IRangeFunctor *f) override
Exécute le fonctor f en concurrence.
void executeParallelFor(const ComplexForLoopRanges< 2 > &loop_ranges, const ParallelLoopOptions &options, IMDRangeFunctor< 2 > *functor) override
Exécute une boucle 2D en concurrence.
void executeParallelFor(const ParallelFor1DLoopInfo &loop_info) override
Exécute la boucle loop_info en concurrence.
ITask * createRootTask(ITaskFunctor *f) override
Créé une tâche racine. L'implémentation doit recopier la valeur de f qui est soit un TaskFunctor,...
bool isActive() const override
Indique si l'implémentation est active.
void executeParallelFor(Integer begin, Integer size, Integer block_size, IRangeFunctor *f) override
Exécute le fonctor f en concurrence.
void terminate() override
Int32 currentTaskThreadIndex() const override
Implémentation de TaskFactory::currentTaskThreadIndex()
void executeParallelFor(Integer begin, Integer size, const ParallelLoopOptions &options, IRangeFunctor *f) override
Exécute le fonctor f en concurrence.
void initialize(Int32 nb_thread) override
Classe de base d'un observable.
Caractéristiques d'un boucle 1D multi-thread.
Options d'exécution d'une boucle parallèle en multi-thread.
void launchAndWait() override
Lance la tâche et bloque jusqu'à ce qu'elle se termine.
void launchAndWait(ConstArrayView< ITask * > tasks) override
Lance les tâches filles tasks et bloque jusqu'à ce qu'elles se terminent.
Contexte d'éxecution d'une tâche.
static IObservable * destroyThreadObservable()
Observable appelé lors de la destruction d'un thread pour une tâche.
static void terminate()
Indique qu'on n'utilisera plus les threads. Cette méthode ne doit pas être appelée lorsque des tâches...
static IObservable * createThreadObservable()
Observable appelé lors de la création d'un thread pour une tâche.
static void _internalSetImplementation(ITaskImplementation *task_impl)
-*- tab-width: 2; indent-tabs-mode: nil; coding: utf-8-with-signature -*-