diff --git a/eo/src/apply.h b/eo/src/apply.h index 2cd977b08..41d96adba 100644 --- a/eo/src/apply.h +++ b/eo/src/apply.h @@ -26,6 +26,7 @@ #ifndef _apply_h #define _apply_h +#include #include #include @@ -37,7 +38,8 @@ template void apply(eoUF& _proc, std::vector& _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]); } @@ -52,8 +54,9 @@ void apply(eoUF& _proc, std::vector& _pop) template void omp_apply(eoUF& _proc, std::vector& _pop) { -#pragma omp parallel for default(none) shared(_proc, _pop) - for (unsigned i = 0; i < _pop.size(); ++i) + size_t size = _pop.size(); +#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]); } @@ -67,8 +70,9 @@ void omp_apply(eoUF& _proc, std::vector& _pop) template void omp_dynamic_apply(eoUF& _proc, std::vector& _pop) { -#pragma omp parallel for default(none) shared(_proc, _pop) schedule(dynamic) - for (unsigned i = 0; i < _pop.size(); ++i) + size_t size = _pop.size(); +#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]); } diff --git a/eo/src/utils/eoParser.cpp b/eo/src/utils/eoParser.cpp index f6c81f14a..f7c2aac4c 100644 --- a/eo/src/utils/eoParser.cpp +++ b/eo/src/utils/eoParser.cpp @@ -61,6 +61,9 @@ eoParameterLoader::~eoParameterLoader() } } +//multithreading +eoValueParam eo::parallelizeLoopParam = eoValueParam(false, "parallelize-loop", "Enable memory shared parallelization into evaluation's loops", '\0'); +//multithreading ends eoParser::eoParser ( unsigned _argc, char **_argv , string _programDescription, string _lFileParamName, char _shortHand) : @@ -99,6 +102,10 @@ eoParser::eoParser ( unsigned _argc, char **_argv , string _programDescription, readFrom(stream); processParam(needHelp); processParam(stopOnUnknownParam); + + //multithreading + processParam(eo::parallelizeLoopParam); + //multithreading ends } diff --git a/eo/src/utils/eoParser.h b/eo/src/utils/eoParser.h index bb8e5811a..073d1a3e3 100644 --- a/eo/src/utils/eoParser.h +++ b/eo/src/utils/eoParser.h @@ -93,6 +93,12 @@ private : }; +//multithreading +namespace eo +{ + extern eoValueParam parallelizeLoopParam; +} +//multithreading ends /** eoParser: command line parser and configuration file reader