+ now you are able to enable or not parallelization with the option --parallelize-loops=1|0

This commit is contained in:
Caner Candan 2010-12-23 18:09:25 +01:00 committed by Caner Candan
commit 07c22771cf
3 changed files with 22 additions and 5 deletions

View file

@ -26,6 +26,7 @@
#ifndef _apply_h #ifndef _apply_h
#define _apply_h #define _apply_h
#include <utils/eoParser.h>
#include <eoFunctor.h> #include <eoFunctor.h>
#include <vector> #include <vector>
@ -37,7 +38,8 @@
template <class EOT> template <class EOT>
void apply(eoUF<EOT&, void>& _proc, std::vector<EOT>& _pop) void apply(eoUF<EOT&, void>& _proc, std::vector<EOT>& _pop)
{ {
for (unsigned i = 0; i < _pop.size(); ++i) size_t size = _pop.size();
for (size_t i = 0; i < size; ++i)
{ {
_proc(_pop[i]); _proc(_pop[i]);
} }
@ -52,8 +54,9 @@ void apply(eoUF<EOT&, void>& _proc, std::vector<EOT>& _pop)
template <class EOT> template <class EOT>
void omp_apply(eoUF<EOT&, void>& _proc, std::vector<EOT>& _pop) void omp_apply(eoUF<EOT&, void>& _proc, std::vector<EOT>& _pop)
{ {
#pragma omp parallel for default(none) shared(_proc, _pop) size_t size = _pop.size();
for (unsigned i = 0; i < _pop.size(); ++i) #pragma omp parallel for if(eo::parallelizeLoopParam.value()) //default(none) shared(_proc, _pop, size)
for (size_t i = 0; i < size; ++i)
{ {
_proc(_pop[i]); _proc(_pop[i]);
} }
@ -67,8 +70,9 @@ void omp_apply(eoUF<EOT&, void>& _proc, std::vector<EOT>& _pop)
template <class EOT> template <class EOT>
void omp_dynamic_apply(eoUF<EOT&, void>& _proc, std::vector<EOT>& _pop) void omp_dynamic_apply(eoUF<EOT&, void>& _proc, std::vector<EOT>& _pop)
{ {
#pragma omp parallel for default(none) shared(_proc, _pop) schedule(dynamic) size_t size = _pop.size();
for (unsigned i = 0; i < _pop.size(); ++i) #pragma omp parallel for if(eo::parallelizeLoopParam.value()) schedule(dynamic) //default(none) shared(_proc, _pop, size)
for (size_t i = 0; i < size; ++i)
{ {
_proc(_pop[i]); _proc(_pop[i]);
} }

View file

@ -61,6 +61,9 @@ eoParameterLoader::~eoParameterLoader()
} }
} }
//multithreading
eoValueParam<bool> eo::parallelizeLoopParam = eoValueParam<bool>(false, "parallelize-loop", "Enable memory shared parallelization into evaluation's loops", '\0');
//multithreading ends
eoParser::eoParser ( unsigned _argc, char **_argv , string _programDescription, eoParser::eoParser ( unsigned _argc, char **_argv , string _programDescription,
string _lFileParamName, char _shortHand) : string _lFileParamName, char _shortHand) :
@ -99,6 +102,10 @@ eoParser::eoParser ( unsigned _argc, char **_argv , string _programDescription,
readFrom(stream); readFrom(stream);
processParam(needHelp); processParam(needHelp);
processParam(stopOnUnknownParam); processParam(stopOnUnknownParam);
//multithreading
processParam(eo::parallelizeLoopParam);
//multithreading ends
} }

View file

@ -93,6 +93,12 @@ private :
}; };
//multithreading
namespace eo
{
extern eoValueParam<bool> parallelizeLoopParam;
}
//multithreading ends
/** /**
eoParser: command line parser and configuration file reader eoParser: command line parser and configuration file reader