+ now you are able to enable or not parallelization with the option --parallelize-loops=1|0
This commit is contained in:
parent
fbc212f80d
commit
07c22771cf
3 changed files with 22 additions and 5 deletions
|
|
@ -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]);
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -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
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -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
|
||||||
|
|
|
||||||
Reference in a new issue