PERFORMANCE

Estos dias en la uni nos han pedido medir el "performance" de algunos algoritmos de busqueda y ordenamiento.

Pero como nos dan la libertad de desarrollar en "lo que es usted guste" desarrollo en Perl y pues me di a la tarea de investigar como medir el rendimiento y uso de cpu del algoritmo y se hace asi:

use Benchmark;

$Tinicial = new Benchmark;

print "HOLA MUNDO";

$Tfinal = new Benchmark;

$Ttotal = timediff($Tinicial, $Tfinal);

print "tiempo de ejecucion: ",timestr($Ttotal),"n";

Su salida es algo como esto

2 wallclock secs (-0.20 usr + 0.00 sys = -0.20 CPU)

donde:

*2 wallclock secs: es el tiempo que tardo en ejecutar el codigo.

*0.20 usr: ni idea que quiere decir :(.

*0.00 sys: lo mismo que el anterior :(:(.

*0.20 CPU: uso de cpu para ejecutar el codigo.

Esto se logra con Benchmark

Pero como mis compañeros no desarrollan en Perl :( lo estan haciendo en java, pero por el momento no me interesa saber como se hace en java, asi que busque como se logra esto en mono (C#) y buscando y buscando me encontre con un namespace llamado System.Diagnostics y pues la forma en la que lo implemente me muestra el resultado en milisegundos.

using System;
using System.Diagnostics ;

namespace primos
{
 class MainClass
 {
  public static void Main(string[] args)
  {
    System.Diagnostics.Stopwatch watch = new System.Diagnostics.Stopwatch();
    watch.Start();

    Console.WriteLine ("Hola Mundo");

    System.Threading.Thread.Sleep(100);
    watch.Stop();
    System.Console.WriteLine("Tiempo de ejecucion: {0}", watch.ElapsedMilliseconds);
  }
 }
}

El motivo del cual lo investige para mono es que queria comparar 2 codigos, uno con varias comparaciones (if) y otro con ciclos (for) pero que hacen lo mismo, y conclui que los if ocupan un poco mas de procesador que las iteraciones, a pesar de que con el if se hacen la mitad (+ o -) de iteraciones, ¿que es mejor? iteraciones o comparaciones…

5 comentarios en “PERFORMANCE

  1. Not so anonymous writes:

    Iba a comentar lo mismo que el wey de arriba.Solo como respuesta corta son mejores los if, (basandose en la complejidad computacional).

  2. Gustavo writes:

    Creo que una buena forma de medir tiempos es utilizando un profiler ya que tienen mas optimizaciones para esas tareas.Si desarrollas en .Net bajo windows hay uno muy bueno, propietario que es de JetBrains, los que hacen intellidea y refactor pro, se llama jetbrains profiler.Para mono, creo que tiene integrado uno en el core, para medir el tiempo puedes pasarle un parametro profile:mono –profile=default:stat aplicacion.exeEso debería darte información de tiempos que según lo que leí es lo que te interesa. Hay mas información para hacer profilings en mono aquí:http://www.mono-project.com/Performance_Tips

  3. Turbo writes:

    Del manual de unix:time(1)NAME time – time a simple command or give resource usageDESCRIPTION The time command runs the specified program command with the given arguments. When command finishes, time writes a message to standard error giving timing statistics about this program run. These statis- tics consist of (i) the elapsed real time between invocation and termi- nation, (ii) the user CPU time (the sum of the tms_utime and tms_cutime values in a struct tms as returned by times(2)), and (iii) the system CPU time (the sum of the tms_stime and tms_cstime values in a struct tms as returned by times(2)).Y bueno, times(2) dice lo demás.

Replica a hreyes Cancelar la respuesta