close Warning: Can't synchronize with repository "(default)" (/var/svn/tolp does not appear to be a Subversion repository.). Look in the Trac log for more information.

Opened 13 years ago

Closed 13 years ago

#1510 closed task (fixed)

benchmark para TOL

Reported by: apalonso Owned by: Humberto Carralero
Priority: normal Milestone: Mantainance
Component: User config Version: 3.1
Severity: trivial Keywords:
Cc:

Description

Necesitamos un programa bien simple que ejecute tareas intensivas de cálculo para evaluar el rendimiento de los equipos con los procesos de TOL.
Pueden ser una o varias tareas, es importante que al final salga un informe de los tiempos de ejecución.

Change History (2)

comment:1 Changed 13 years ago by apalonso

Owner: changed from Humberto Carralero to Humberto Carralero
Status: newassigned

comment:2 Changed 13 years ago by Humberto Carralero

Resolution: fixed
Status: assignedclosed

Se ha definido un mecanismo simple para ejecutar una función que contiene un código TOL y medir el tiempo de ejecución.
El código tiene 3 elementos:
Función benchmark: Set benchmark(Code fun, Real trace) { ...}
Esta función toma dos parámetros:
fun que es una función que devuelve un Real y toma como parámetro un Real (trace) cuyo valor será 1 si se quiere una traza de la ejecución o 0 en caso contrario.
trace que es una valor que se utiliza para indicar si se quiere una traza de la ejecución, 0 indica que no se desea la traza y 1 que se desea la traza.
Esta función (benchmark) retorna un Set con tres elementos, tini que es el tiempo inicial, tfin que es el tiempo de finalización y tdur que es el tiempo de duración de la ejecución. Cuando se pide la traza (trace==1) se imprimen tres mensajes con los tres valores ya indicados en el momento en que se obtienen.
Función test_sim: Real test_sim(Real trace) { ... }
Esta función es un ejemplo del tipo de función que se debe emplear como 1er argumento a la función benchmark; este ejemplo carga un fichero OZA que contiene un objeto MMS::@Forecast, construye un escenario de simulación y la ejecuta. Si se requiere probar otro código sólo habría que hacer una función similar a ésta en cuanto al prototipo poniendo dentro el código que se quiere probar.
Llamada para ejecutar el benchmark: Set res= benchmark(test_sim, 1);
Esta llamada ejecuta la función de prueba, imprime la traza y retorna un Set con los tres tiempos ya descritos.

CÓDIGO TOL:
Set benchmark(Code fun, Real trace) {

Real tini = Copy(Time);
Real If(trace==1, {WriteLn(Text "Inicio: "<<tini); Real 1},{Real 1});
Real fun(trace);
Real tfin = Copy(Time);
Real If(trace==1, {WriteLn(Text "Fin: "<<tfin); Real 1},{Real 1});
Real dur= tfin-tini;
Real If(trace==1, {WriteLn(Text "Duración: "<<dur); Real 1},{Real 1});
Real tini, Real tfin, Real dur?

};

#Require MmsInBws;
Real test_sim(Real trace)
{

MMS::@Forecast for_sim= MMS::Container::LoadFile("/home/hcarralero/tol/For.HeiEsp_MVACru2012059.oza");
MmsInBws::@BWSForecast bwsForecast= MmsInBws::@BWSForecast::Default(for_sim);
Set inputs= bwsForecast::GetSInputs(?);
Set inputs.Forecast= EvalSet(inputs, Serie (Set info) { WithName(info::Name, Serie info::Data.Forecast )});
Real PutSerDat(inputs.Forecast[2], y2012m04d16, 200);
Serie output.Forecast= bwsForecast::Simulate_Output("Cruzcampo.HeiEsp", inputs.Forecast);
Real If(trace==1, {WriteLn(Text ""<<Name(output.Forecast)); Real 1},{Real 1});
Real MMS::Container::RemoveForecast(Real Card(MMS::Container::_.forecasts))

};

Set benchmark(test_sim, 1);

Note: See TracTickets for help on using tickets.