No tienes acceso a esta clase

¡Continúa aprendiendo! Únete y comienza a potenciar tu carrera

Profiling

19/30
Recursos

Aportes 10

Preguntas 0

Ordenar por:

Los aportes, preguntas y respuestas son vitales para aprender en comunidad. Regístrate o inicia sesión para participar.

Para evitar la fatiga

12586269025

Para ver el uso de CPU del codigo que testeamos, usamos

$ go test -cpuprofile=cpu.out

Para ver el resumen del uso del CPU:

$ go tool pprof cpu.out

Dentro de pprof escribimos top para ver como se han comportado los programas en nuestro test

(pprof) top

Además, dentro de pprof podemos inspeccionar el tiempo promedio de ejecución de cada línea de una función, usando el comando list <nombre_funcion>

(pprof) list Fibonacci

Tambien podemos ver el reporte del promedio de ejecución:

  • en el navegador usando web
  • o exportarlo en pdf usando pdf
(pprof) web
(pprof) pdf

Para salir de (pprof) puedes usar quit o Ctrl + D

Para los que estén en Mac OS pueden instalar Graphviz mediante HomeBrew

brew install graphviz

https://formulae.brew.sh/formula/graphviz

Para los que tengan el Error y estén en linux (basado en debian):

failed to execute dot. Is Graphviz installed? Error: exec: "dot": executable file not found in $PATH

Lo unico que deben de hacer es un:

$ sudo apt install graphviz

Estas herramientas están OP. Go está potente,

Aqui una version del fib, de manera iterativa 😄

func Fibonacci(n int) int {
	fib := make([]int, n+1)
	fib[0] = 0
	fib[1] = 1
	for i := 2; i <= n; i++ {
		fib[i] = fib[i-1] + fib[i-2]
	}
	return fib[n]
}

Esta implementación de Fibonacci es lenta principalmente porque calcula los valores de la sucesión dos veces, dentro de la pila de llamadas, se repite la función con los mismos argumentos. Una forma de mejorar el tiempo y llevarlo a prácticamente la mitad, es cambiar la recursión por un ciclo. Haciendo las sumas de menor a mayor, en lugar de mayor a menor.

func ComputeOnceFibonacci(n int) int {
	size := math.Max(2, float64(n+1))
	values := make([]int, size)
	values[0] = 0
	values[1] = 1

	for i := 2; i <= n; i++ {
		values[i] = values[i-1] + values[i-2]
	}

	return values[n]
}

Les comparto un articulo publicado en el blog de golang que trata sobre que es profiling y como se implementa y los usos a detalle
https://go.dev/blog/pprof

Go es increíble

Esto esta genial