Fecha actual Lun Dic 23, 2024 10:26 pm

Todos los horarios son UTC + 1 hora [ DST ]




Nuevo tema Responder al tema  [ 6 mensajes ] 
Autor Mensaje
NotaPublicado: Mar May 27, 2014 5:05 pm 

Registrado: Mar May 27, 2014 4:56 pm
Mensajes: 14
Ante todo debo felicitar a Bruno por el esfuerzo en tirar adelante con C3, después de tanto tiempo inactivo.

No tocaba Clipper desde los tiempos de DOS, incluso llegué a probar una RC del difunto dc3.exe.

El caso es que viendo que el proyecto se retomaba, he decidido echarle un vistazo, esta vez sobre Windows.

Me ha llamado poderosamente la atención lo ágiles que son los ejemplo, y lo fluida que se ve la GUI. Además el tamaño resultante de los ejecutables es tremendamente compacto. Algo totalmente opuesto a los tiempos de Clipper.

Animado por ello, decidí portar el Sieve de Eratóstenes que tenía escrito en otros lenguajes a C3.

Los resultados han sido bastante pobres, del orden de 50 veces más lento que Javascript. Soy consciente que el fuerte de xBase no han sido nunca los cálculos intensivos de CPU, pero no esperaba ese rendimiento tan pobre.

Estoy bastante oxidado en xBase, así que es posible que haya cometido algún tipo de error de codificación. Os dejo a continuación el código fuente por si lo encontráis, o tenéis alguna explicación al respecto:

Código:
#define MAXITER 10000

procedure main
   local i, k
   local found, iter
   local flags[MAXITER]
   local start, finish

   ? str(MAXITER) + " iterations"
   start := seconds()
   for iter := 1 to MAXITER
           found := 0
           for i := 1 to MAXITER
                  flags[i] := 0
           next i
           for i := 2 to MAXITER
         if flags[i] = 0      // found a prime
                      found++
            for k := i+i to MAXITER step i
               flags[k] := 1
            next
                  endif
           next
   next
   finish := seconds()
   ? str(found) + " primes in " + str((finish-start)*1) + " seconds "
return


Es chocante también que la compilación de 64 bits, haya resultado incluso algo más lenta que la de 32 bits.

Conociendo que Clipper, no deja de ser un p-code que se interpreta, se explicaría una gran parte de la diferencia de rendimiento.

Si tenéis curiosidad, aquí lo publiqué con otros lenguajes:

- http://www.javiergutierrezchamorro.com/ ... izado/1489
- http://www.javiergutierrezchamorro.com/sieve-en-c/1482
- http://www.javiergutierrezchamorro.com/ ... ascal/1485
- http://www.javiergutierrezchamorro.com/ ... basic/1488
- http://www.javiergutierrezchamorro.com/ ... -java/1610

Muchas gracias.

_________________
Visita mi bitácora


Arriba
 Perfil  
Responder citando  
NotaPublicado: Mar May 27, 2014 7:01 pm 
Avatar de Usuario

Registrado: Dom Oct 09, 2005 11:26 am
Mensajes: 362
Ubicación: Salamanca - España
nikkho escribió:
Ante todo debo felicitar a Bruno por el esfuerzo en tirar adelante con C3, después de tanto tiempo inactivo.

No tocaba Clipper desde los tiempos de DOS, incluso llegué a probar una RC del difunto dc3.exe.

El caso es que viendo que el proyecto se retomaba, he decidido echarle un vistazo, esta vez sobre Windows.

Me ha llamado poderosamente la atención lo ágiles que son los ejemplo, y lo fluida que se ve la GUI. Además el tamaño resultante de los ejecutables es tremendamente compacto. Algo totalmente opuesto a los tiempos de Clipper.

Animado por ello, decidí portar el Sieve de Eratóstenes que tenía escrito en otros lenguajes a C3.

Los resultados han sido bastante pobres, del orden de 50 veces más lento que Javascript. Soy consciente que el fuerte de xBase no han sido nunca los cálculos intensivos de CPU, pero no esperaba ese rendimiento tan pobre.

Estoy bastante oxidado en xBase, así que es posible que haya cometido algún tipo de error de codificación. Os dejo a continuación el código fuente por si lo encontráis, o tenéis alguna explicación al respecto:

Código:
#define MAXITER 10000

procedure main
   local i, k
   local found, iter
   local flags[MAXITER]
   local start, finish

   ? str(MAXITER) + " iterations"
   start := seconds()
   for iter := 1 to MAXITER
           found := 0
           for i := 1 to MAXITER
                  flags[i] := 0
           next i
           for i := 2 to MAXITER
         if flags[i] = 0      // found a prime
                      found++
            for k := i+i to MAXITER step i
               flags[k] := 1
            next
                  endif
           next
   next
   finish := seconds()
   ? str(found) + " primes in " + str((finish-start)*1) + " seconds "
return


Es chocante también que la compilación de 64 bits, haya resultado incluso algo más lenta que la de 32 bits.

Conociendo que Clipper, no deja de ser un p-code que se interpreta, se explicaría una gran parte de la diferencia de rendimiento.

Si tenéis curiosidad, aquí lo publiqué con otros lenguajes:

- http://www.javiergutierrezchamorro.com/ ... izado/1489
- http://www.javiergutierrezchamorro.com/sieve-en-c/1482
- http://www.javiergutierrezchamorro.com/ ... ascal/1485
- http://www.javiergutierrezchamorro.com/ ... basic/1488
- http://www.javiergutierrezchamorro.com/ ... -java/1610

Muchas gracias.


Hola.
Pues parece que tu rutina con 10.000 iteraciones en mi máquina tarda 119,43 (i5)
Bueno pues parece que C3 no es adecuado para hacer iteraciones, pues vale.
Como bien dices en comentario, Clipper no fue pensado para este tipo de trabajo, ahora
para mis aplicaciones de BD NO LO CAMBIO.
Conclusión: nunca he necesitado este tipo de trabajo.

_________________
Un saludo.
Jesús P. Melgar Velasco


Arriba
 Perfil  
Responder citando  
NotaPublicado: Mar May 27, 2014 7:30 pm 

Registrado: Mar May 27, 2014 4:56 pm
Mensajes: 14
trueSoft escribió:
Hola.
Pues parece que tu rutina con 10.000 iteraciones en mi máquina tarda 119,43 (i5)
Bueno pues parece que C3 no es adecuado para hacer iteraciones, pues vale.
Como bien dices en comentario, Clipper no fue pensado para este tipo de trabajo, ahora
para mis aplicaciones de BD NO LO CAMBIO.
Conclusión: nunca he necesitado este tipo de trabajo.


Gracias por responder. Esas han sido más o menos mis cifras.

Me sorprenden, porque el propio IDE, entiendo que hará bastantes bucles y operaciones similares, y va tremendamente suelto. Eso por no hablar de uno de los ejemplos, Tetris, que me dejó bastante sorprendido al respecto del rendimiento.

_________________
Visita mi bitácora


Arriba
 Perfil  
Responder citando  
NotaPublicado: Mié May 28, 2014 10:20 am 
Avatar de Usuario

Registrado: Dom Oct 09, 2005 11:26 am
Mensajes: 362
Ubicación: Salamanca - España
nikkho escribió:
trueSoft escribió:
Hola.
Pues parece que tu rutina con 10.000 iteraciones en mi máquina tarda 119,43 (i5)
Bueno pues parece que C3 no es adecuado para hacer iteraciones, pues vale.
Como bien dices en comentario, Clipper no fue pensado para este tipo de trabajo, ahora
para mis aplicaciones de BD NO LO CAMBIO.
Conclusión: nunca he necesitado este tipo de trabajo.


Gracias por responder. Esas han sido más o menos mis cifras.

Me sorprenden, porque el propio IDE, entiendo que hará bastantes bucles y operaciones similares, y va tremendamente suelto. Eso por no hablar de uno de los ejemplos, Tetris, que me dejó bastante sorprendido al respecto del rendimiento.


Ah, se me olvidaba, para tareas "penosas" siempre está la posibilidad de C y en este caso los resultados serian MUY distintos.

_________________
Un saludo.
Jesús P. Melgar Velasco


Arriba
 Perfil  
Responder citando  
NotaPublicado: Jue May 29, 2014 9:16 am 

Registrado: Mar May 27, 2014 4:56 pm
Mensajes: 14
Sí, seguro. Si C3 era del orden de 50 veces más lento que Javascript, mientras que la de C era del orden de 50 veces más rápido que Javascript. Grosso modo unas 2500 veces más rápido que C3 por tanto.

Lo que sigo si explicarme es porque la versión x64 es más lenta. Es decir, x64 tiene más registros, por lo que aunque no se use aritmética de 64 bits, los ejecutables suelen ser igual, o más rápidos, pero no más lentos.

_________________
Visita mi bitácora


Arriba
 Perfil  
Responder citando  
NotaPublicado: Dom Jul 13, 2014 9:03 am 

Registrado: Mar May 27, 2014 4:56 pm
Mensajes: 14
Os actualizo con los resultados equivalentes sobre Harbour, con hasta donde yo se, un código equivalente para Sieve: http://www.javiergutierrezchamorro.com/ ... ment-31309

Sorprendentemente se ha mostrado el doble de veloz, a pesar de generar unos ejecutables 3 veces más grandes, lo que indica que hay posibilidades de mejora en C3, especialmente en el compilador x64.

_________________
Visita mi bitácora


Arriba
 Perfil  
Responder citando  
Mostrar mensajes previos:  Ordenar por  
Nuevo tema Responder al tema  [ 6 mensajes ] 

Todos los horarios son UTC + 1 hora [ DST ]


No puede abrir nuevos temas en este Foro
No puede responder a temas en este Foro
No puede editar sus mensajes en este Foro
No puede borrar sus mensajes en este Foro
No puede enviar adjuntos en este Foro

Buscar:
Saltar a: