added variable time measure
This commit is contained in:
parent
c7a34a6a5e
commit
d6b566b538
1 changed files with 87 additions and 56 deletions
|
|
@ -24,6 +24,66 @@ typedef eoReal< eoMinimizingFitness > EOT;
|
||||||
|
|
||||||
//-----------------------------------------------------------------------------
|
//-----------------------------------------------------------------------------
|
||||||
|
|
||||||
|
double variable_time_function(const std::vector<double>&)
|
||||||
|
{
|
||||||
|
::srand( ::time( NULL ) );
|
||||||
|
::usleep( 10 * ( rand() / RAND_MAX ) );
|
||||||
|
return 0.0;
|
||||||
|
}
|
||||||
|
|
||||||
|
double measure_apply( size_t p,
|
||||||
|
void (*fct)(eoUF<EOT&, void>&, std::vector<EOT>&),
|
||||||
|
eoInitFixedLength< EOT >& init,
|
||||||
|
eoEvalFuncCounter< EOT >& eval )
|
||||||
|
{
|
||||||
|
eoPop< EOT > pop( p, init );
|
||||||
|
double t1 = omp_get_wtime();
|
||||||
|
fct( eval, pop );
|
||||||
|
double t2 = omp_get_wtime();
|
||||||
|
return t2 - t1;
|
||||||
|
}
|
||||||
|
|
||||||
|
void measure( size_t p,
|
||||||
|
eoInitFixedLength< EOT >& init,
|
||||||
|
eoEvalFuncCounter< EOT >& eval,
|
||||||
|
std::ofstream& speedupFile,
|
||||||
|
std::ofstream& efficiencyFile,
|
||||||
|
std::ofstream& dynamicityFile,
|
||||||
|
size_t nbtask )
|
||||||
|
{
|
||||||
|
// sequential scope
|
||||||
|
double Ts = measure_apply( p, apply< EOT >, init, eval );
|
||||||
|
// parallel scope
|
||||||
|
double Tp = measure_apply( p, omp_apply< EOT >, init, eval );
|
||||||
|
// parallel scope dynamic
|
||||||
|
double Tpd = measure_apply( p, omp_dynamic_apply< EOT >, init, eval );
|
||||||
|
|
||||||
|
double speedup = Ts / Tp;
|
||||||
|
|
||||||
|
if ( speedup > nbtask ) { return; }
|
||||||
|
|
||||||
|
double efficiency = speedup / nbtask;
|
||||||
|
|
||||||
|
speedupFile << speedup << ' ';
|
||||||
|
efficiencyFile << efficiency << ' ';
|
||||||
|
|
||||||
|
eo::log << eo::debug;
|
||||||
|
eo::log << "Ts = " << Ts << std::endl;
|
||||||
|
eo::log << "Tp = " << Tp << std::endl;
|
||||||
|
eo::log << "S_p = " << speedup << std::endl;
|
||||||
|
eo::log << "E_p = " << efficiency << std::endl;
|
||||||
|
|
||||||
|
double dynamicity = Tp / Tpd;
|
||||||
|
|
||||||
|
if ( dynamicity > nbtask ) { return; }
|
||||||
|
|
||||||
|
eo::log << "Tpd = " << Tpd << std::endl;
|
||||||
|
eo::log << "D_p = " << dynamicity << std::endl;
|
||||||
|
|
||||||
|
dynamicityFile << dynamicity << ' ';
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
int main(int ac, char** av)
|
int main(int ac, char** av)
|
||||||
{
|
{
|
||||||
eoParserLogger parser(ac, av);
|
eoParserLogger parser(ac, av);
|
||||||
|
|
@ -47,6 +107,9 @@ int main(int ac, char** av)
|
||||||
uint32_t seedParam = parser.getORcreateParam((uint32_t)0, "seed", "Random number seed", 0).value();
|
uint32_t seedParam = parser.getORcreateParam((uint32_t)0, "seed", "Random number seed", 0).value();
|
||||||
if (seedParam == 0) { seedParam = time(0); }
|
if (seedParam == 0) { seedParam = time(0); }
|
||||||
|
|
||||||
|
unsigned int measureConstTime = parser.getORcreateParam((unsigned int)1, "measureConstTime", "Toggle measure of constant time", 'm', "Results").value();
|
||||||
|
unsigned int measureVarTime = parser.getORcreateParam((unsigned int)1, "measureVarTime", "Toggle measure of variable time", 'M', "Results").value();
|
||||||
|
|
||||||
if (parser.userNeedsHelp())
|
if (parser.userNeedsHelp())
|
||||||
{
|
{
|
||||||
parser.printHelp(std::cout);
|
parser.printHelp(std::cout);
|
||||||
|
|
@ -61,16 +124,24 @@ int main(int ac, char** av)
|
||||||
eoEvalFuncPtr< EOT, double, const std::vector< double >& > mainEval( real_value );
|
eoEvalFuncPtr< EOT, double, const std::vector< double >& > mainEval( real_value );
|
||||||
eoEvalFuncCounter< EOT > eval( mainEval );
|
eoEvalFuncCounter< EOT > eval( mainEval );
|
||||||
|
|
||||||
|
eoEvalFuncPtr< EOT, double, const std::vector< double >& > mainEval_variable( variable_time_function );
|
||||||
|
eoEvalFuncCounter< EOT > eval_variable( mainEval_variable );
|
||||||
|
|
||||||
eoUniformGenerator< double > gen(-5, 5);
|
eoUniformGenerator< double > gen(-5, 5);
|
||||||
|
|
||||||
std::ostringstream params;
|
std::ostringstream params;
|
||||||
params << "_p" << popMin << "_pS" << popStep << "_P" << popMax
|
params << "_p" << popMin << "_pS" << popStep << "_P" << popMax
|
||||||
<< "_d" << dimMin << "_dS" << dimStep << "_D" << dimMax
|
<< "_d" << dimMin << "_dS" << dimStep << "_D" << dimMax
|
||||||
<< "_r" << nRun << "_s" << seedParam;
|
<< "_r" << nRun << "_s" << seedParam;
|
||||||
|
|
||||||
std::ofstream speedupFile( std::string( fileNamesPrefix + speedupFileName + params.str() ).c_str() );
|
std::ofstream speedupFile( std::string( fileNamesPrefix + speedupFileName + params.str() ).c_str() );
|
||||||
std::ofstream efficiencyFile( std::string( fileNamesPrefix + efficiencyFileName + params.str() ).c_str() );
|
std::ofstream efficiencyFile( std::string( fileNamesPrefix + efficiencyFileName + params.str() ).c_str() );
|
||||||
std::ofstream dynamicityFile( std::string( fileNamesPrefix + dynamicityFileName + params.str() ).c_str() );
|
std::ofstream dynamicityFile( std::string( fileNamesPrefix + dynamicityFileName + params.str() ).c_str() );
|
||||||
|
|
||||||
|
std::ofstream speedupFile_variable( std::string( fileNamesPrefix + "variable_" + speedupFileName + params.str() ).c_str() );
|
||||||
|
std::ofstream efficiencyFile_variable( std::string( fileNamesPrefix + "variable_" + efficiencyFileName + params.str() ).c_str() );
|
||||||
|
std::ofstream dynamicityFile_variable( std::string( fileNamesPrefix + "variable_" + dynamicityFileName + params.str() ).c_str() );
|
||||||
|
|
||||||
size_t nbtask = 1;
|
size_t nbtask = 1;
|
||||||
#pragma omp parallel
|
#pragma omp parallel
|
||||||
{
|
{
|
||||||
|
|
@ -89,67 +160,27 @@ int main(int ac, char** av)
|
||||||
{
|
{
|
||||||
eoInitFixedLength< EOT > init( d, gen );
|
eoInitFixedLength< EOT > init( d, gen );
|
||||||
|
|
||||||
double Ts;
|
// for constant time measure
|
||||||
double Tp;
|
if ( measureConstTime == 1 )
|
||||||
double Tpd;
|
|
||||||
|
|
||||||
// sequential scope
|
|
||||||
{
|
{
|
||||||
eoPop< EOT > pop( p, init );
|
measure( p, init, eval, speedupFile, efficiencyFile, dynamicityFile, nbtask );
|
||||||
double t1 = omp_get_wtime();
|
|
||||||
apply< EOT >(eval, pop);
|
|
||||||
double t2 = omp_get_wtime();
|
|
||||||
Ts = t2 - t1;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
// parallel scope
|
// for variable time measure
|
||||||
|
if ( measureVarTime == 1 )
|
||||||
{
|
{
|
||||||
eoPop< EOT > pop( p, init );
|
measure( p, init, eval_variable, speedupFile_variable, efficiencyFile_variable, dynamicityFile_variable, nbtask );
|
||||||
double t1 = omp_get_wtime();
|
|
||||||
omp_apply< EOT >(eval, pop);
|
|
||||||
double t2 = omp_get_wtime();
|
|
||||||
Tp = t2 - t1;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
// parallel scope dynamic
|
|
||||||
{
|
|
||||||
eoPop< EOT > pop( p, init );
|
|
||||||
double t1 = omp_get_wtime();
|
|
||||||
omp_dynamic_apply< EOT >(eval, pop);
|
|
||||||
double t2 = omp_get_wtime();
|
|
||||||
Tpd = t2 - t1;
|
|
||||||
}
|
|
||||||
|
|
||||||
double speedup = Ts / Tp;
|
|
||||||
|
|
||||||
if ( speedup > nbtask ) { continue; }
|
|
||||||
|
|
||||||
double efficiency = speedup / nbtask;
|
|
||||||
|
|
||||||
speedupFile << speedup << ' ';
|
|
||||||
efficiencyFile << efficiency << ' ';
|
|
||||||
|
|
||||||
eo::log << eo::debug;
|
|
||||||
eo::log << "Ts = " << Ts << std::endl;
|
|
||||||
eo::log << "Tp = " << Tp << std::endl;
|
|
||||||
eo::log << "S_p = " << speedup << std::endl;
|
|
||||||
eo::log << "E_p = " << efficiency << std::endl;
|
|
||||||
|
|
||||||
double dynamicity = Tp / Tpd;
|
|
||||||
|
|
||||||
if ( dynamicity > nbtask ) { continue; }
|
|
||||||
|
|
||||||
eo::log << "Tpd = " << Tpd << std::endl;
|
|
||||||
eo::log << "D_p = " << dynamicity << std::endl;
|
|
||||||
|
|
||||||
dynamicityFile << dynamicity << ' ';
|
|
||||||
|
|
||||||
} // end of runs
|
} // end of runs
|
||||||
|
|
||||||
speedupFile << std::endl;
|
speedupFile << std::endl;
|
||||||
efficiencyFile << std::endl;
|
efficiencyFile << std::endl;
|
||||||
dynamicityFile << std::endl;
|
dynamicityFile << std::endl;
|
||||||
|
|
||||||
|
speedupFile_variable << std::endl;
|
||||||
|
efficiencyFile_variable << std::endl;
|
||||||
|
dynamicityFile_variable << std::endl;
|
||||||
|
|
||||||
} // end of dimension
|
} // end of dimension
|
||||||
|
|
||||||
} // end of population
|
} // end of population
|
||||||
|
|
|
||||||
Reference in a new issue