PERFORMANCE
Sunday, 24. February 2008, 08:20:00
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
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...









Anonymous # 24. February 2008, 16:46
Hola,
otro criterio mas general para saber que tan complejo es un algoritmos es usar la "complejidad computacional":
http://en.wikipedia.org/wiki/Computational_complexity_theory
en general, es una medida abstracta del numero de instrucciones a ejecutar en terminos de n, donde n es el tamaño del conjunto de busqueda u ordenamiento (aunque puede ser aplicado a cualquier algoritmo).
Anonymous # 24. February 2008, 23:58
Iba a comentar lo mismo que el wey de arriba.
Solo como respuesta corta son mejores los if, (basandose en la complejidad computacional).
Anonymous # 25. February 2008, 01:48
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.exe
Eso 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
hreyes # 25. February 2008, 03:10
Anonymous # 26. February 2008, 22:01
Del manual de unix:
time(1)
NAME
time - time a simple command or give resource usage
DESCRIPTION
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.