Este foro usa cookies
Este foro utiliza cookies para almacenar su información de inicio de sesión si está registrado y su última visita si no lo está. Las cookies son pequeños documentos de texto almacenados en su computadora; las cookies establecidas por este foro solo se pueden usar en este sitio web y no representan ningún riesgo de seguridad. Las cookies en este foro también rastrean los temas específicos que ha leído y la última vez que los leyó. Si Ud. continúa navegando, entenderemos que acepta todas las cookies.

Se almacenará una cookie en su navegador, independientemente de la elección, para evitar que se le vuelva a hacer esta pregunta. Podrá cambiar la configuración de sus cookies en cualquier momento utilizando el enlace en el pie de página.

El foro antiguo se encuentra accesible desde https://foro.gambas-es.org en modo de solo lectura.

Calificación:
  • 0 voto(s) - 0 Media
  • 1
  • 2
  • 3
  • 4
  • 5

Test Benchmark que muestra la web de Gambas
#1

Buenas!.

Después de actualizar las fuentes de Gambas, fui a probar el test de velocidad que en su día publicó Benoit en la web.
Lo podéis encontrar en las opciones de "About"

Por mi parte es que tenía y tengo curiosidad por JIT, como usarlo con Gambas, ejemplos.
Y decidí probar el benchmark que se incluye en las fuentes de Gambas desarrollo. Podéis ejecutarlo en vuestro
ordenador.

Lo extraño fue que en este ordenador tengo instalado Python3 y la Python2, pero me mostraba unos datos muy raros
con Python, todo lo contrario, era super rápido.Y no me convencía esos resultado. 0.2s, 0.3s...pasaba algo.

Lo que no sé es como con Python2 funciona ciertos códigos del test donde la indentación no es "propia" de un código Python.
Como es el caso de mandelbrot.py. Tanto las funciones, como las condicionales, los dos puntos no están bien situados y
el código no está bien indentado.

Entonces lo que hice fue modificar los códigos y logré que funcionase con Python3.

Aclaro:

El código fuente no ha sido renovado en "seis años!". Confused
Python2 está obsoleto. Y cambiar el código no cuesta tanto. Al menos, adecentarlo, pasar el plumero.

Si se pretende demostrar que Gambas es más rápido que Python (usando JIT o sin este), hay que demostrarlo
y que mejor que actualizando el código de Python. Mostrando un código mas limpio. Para que se pueda ejecutar.

Benoit parecía más interesado en ver "cuanto" tardaba la ejecución del programa que en el propio código. Confused

Ejemplo con mandelbrot.py

La fuentes que bajamos de la versión de desarrollo:

Fijaros en los ":" en las condicionales, en los for, en la función y el "else" de la línea 39.

Python
  1. #!/usr/bin/python
  2.  
  3. import sys
  4.  
  5. MAXITER = 50
  6. LIMIT = 4
  7. out = sys.stdout;
  8.  
  9. def mandelbrot(w, h) :
  10.  
  11.   xmin = -1.5
  12.   ymin = -1
  13.   invN = 2.0 / w
  14.  
  15.   checknext = True
  16.  
  17.   for y in range(h) :
  18.     Ci = y * invN + ymin
  19.  
  20.     for x in range(w) :
  21.       Zr = 0.0
  22.       Zi = 0.0
  23.       Tr = 0.0
  24.       Ti = 0.0
  25.       Cr = x * invN + xmin
  26.       if (checknext) :
  27.     for k in range(MAXITER) :
  28.       Zi = 2 * Zr * Zi + Ci
  29.       Zr = Tr - Ti + Cr
  30.       Ti = Zi * Zi
  31.       Tr = Zr * Zr
  32.       if (Tr + Ti) > LIMIT :
  33.         break
  34.     if k == MAXITER :
  35.       out.write("1")
  36.     else :
  37.       out.write("0")
  38.       checknext = False
  39.       else :
  40.     for k in range(MAXITER) :
  41.       Zi = 2 * Zr * Zi + Ci
  42.       Zr = Tr - Ti + Cr
  43.       Ti = Zi * Zi
  44.       Tr = Zr * Zr
  45.     if (Tr + Ti) < LIMIT :
  46.       out.write("1")
  47.     else :
  48.       out.write("0")
  49.       checknext = True
  50.  
  51.     out.write("\n")
  52.  
  53. for i in range(20) :
  54.   mandelbrot(200, 200)



Aquí el mismo pero lo he modificado:

Python
  1. #!/usr/bin/env python3
  2.  
  3. import sys
  4.  
  5. MAXITER = 50
  6. LIMIT = 4
  7. out = sys.stdout
  8.  
  9.  
  10. def mandelbrot(w, h):
  11.  
  12.     xmin = -1.5
  13.     ymin = -1
  14.     invN = 2.0 / w
  15.  
  16.     checknext = True
  17.  
  18.     for y in range(h):
  19.         Ci = y * invN + ymin
  20.  
  21.         for x in range(w):
  22.             Zr = 0.0
  23.             Zi = 0.0
  24.             Tr = 0.0
  25.             Ti = 0.0
  26.             Cr = x * invN + xmin
  27.             if (checknext):
  28.                 for k in range(MAXITER):
  29.                     Zi = 2 * Zr * Zi + Ci
  30.                     Zr = Tr - Ti + Cr
  31.                     Ti = Zi * Zi
  32.                     Tr = Zr * Zr
  33.                     if (Tr + Ti) > LIMIT:
  34.                         break
  35.                 if k == MAXITER:
  36.                     out.write("1")
  37.                 else:
  38.                     out.write("0")
  39.                     checknext = False
  40.             else:
  41.                 for k in range(MAXITER):
  42.                     Zi = 2 * Zr * Zi + Ci
  43.                     Zr = Tr - Ti + Cr
  44.                     Ti = Zi * Zi
  45.                     Tr = Zr * Zr
  46.             if (Tr + Ti) < LIMIT:
  47.                 out.write("1")
  48.             else:
  49.                 out.write("0")
  50.                 checknext = True
  51.  
  52.         out.write("\n")
  53.  
  54.  
  55. for i in range(20):
  56.     mandelbrot(200, 200)



He modificado todos los códigos fuente del benchmark de hace seis años para hacerlo funcionar con Python3.
Hay alguno como el código nbody.py solo funciona con Python2, pero el resto se puede cambiar con facilidad.
Y nbody solo hay que cambiar una línea. Ahora ya me funciona bien.

[Imagen: NmAGFIu.png]
Imagino que Benoit no conoce Python.

¿ Merece la pena que se lo comuniquemos ?. Si en la web de Gambas se sigue haciendo publicidad con este test de comparación. Puede que interese mejorarlo.
Como funciona pues nadie lo echa de menos. Pero en que han pasado seis años y ni "pio" sobre como está el código. Undecided
Luego queremos que funcione y probarlo.

A ver, los que habéis estudiado algo de Python, probar el código original, sin modificar y os llevareis una sorpresa.
Recordar que necesitáis bajar las fuentes de Gambas.

Saludos

"El lobo siempre será malo si sólo escuchamos a Caperucita.". El lobo.
    ¡Gracias!


Posibles temas similares…
Tema / Autor Respuestas Vistas Último mensaje
Último mensaje por mansso
13-04-2022, 11:00
Último mensaje por tincho
16-05-2021, 13:16

Salto de foro:


Usuarios navegando en este tema: 1 invitado(s)