Portal    Foro    Buscar    FAQ    Registrarse    Conectarse


Publicar nuevo tema  Responder al tema 
Página 1 de 1
 
 
Dos Tiempos De 1 Mil Millones De Ciclos
Autor Mensaje
Responder citando   Descargar mensaje  
Mensaje Dos Tiempos De 1 Mil Millones De Ciclos 
 
" Quid est ergo tempus? Si nemo ex me quaerat scio, si quaerenti explicare velim nescio. "
(¿Qué es, pues el tiempo? Si nadie me lo pregunta, lo sé; pero si quiero explicarlo a quien me lo pregunte, no lo sé.)
(San Agustín, Conf. Lib. XI, c. 17)


Bueno, hermanos neo-latinos,
vamos ahora a ver cuánto tiempo emplea el código Assembly para cumplir un ciclo de 1 mil millones de ciclos, y cuanto tiempo emplea Gambas.

Propono este codigo:
Private Extern Test_asm(bI As Integer) As Integer In "/tmp/C_asm"


Public Sub Main()

  Dim i As Integer
  Dim dt1, dt2 As Date

    Creaso()
  
    dt1 = Time
      i = Test_asm(1000000000)
    dt2 = Time
    If i <> 1000000000 Then Error.Raise("Error al ejecutar el ciclo !")
    
    Print "Ciclo con Assembly:"
    Print CStr(Date(0, 0, 0, 0, 0, 0, DateDiff(dt1, dt2, gb.Millisecond)));; "ms"
    
    Test_Gambas()

End


Private Procedure Creaso()

File.Save("/tmp/C_asm.c", "int Test_asm(int b) {" &
          "\nint a;" &
          "\n__asm__(\"xor %%eax, %%eax;\"" &
          "\n\"ciclo: inc %%eax;\"" &
          "\n\"dec %%ebx;\"" &
          "\n\"jne ciclo;\"" &
          "\n\n: \"=a\" (a)" &
          "\n: \"b\" (b)" &
          "\n); }")
  
  Shell "gcc -o /tmp/C_asm.so /tmp/C_asm.c -shared" Wait
  
End



Private Procedure Test_Gambas()
  
  Dim i As Integer = 1000000000
  Dim a As Integer
  Dim dt1, dt2 As Date

   Print "\nEspera, ahora estoy en el ciclo de gambas......"
    dt1 = Time
    While i > 0
      Inc a
      Dec i
    Wend
    dt2 = Time
  
    If a <> 1000000000 Then Error.Raise("Error al ejecutar el ciclo !")
    Print "Ciclo con Gambas:"
    Print CStr(Date(0, 0, 0, 0, 0, 0, DateDiff(dt1, dt2, gb.Millisecond)));; "ms"
  
End

 



 
última edición por vuott el Martes, 28 Julio 2015, 21:11; editado 6 veces 
vuott - Ver perfil del usuarioEnviar mensaje privado 
Volver arribaPágina inferior
Responder citando   Descargar mensaje  
Mensaje Re: Dos Tiempos De 1 Mil Millones De Ciclos 
 
Vuot:

Muy interesante

En mi ordenador me dá, el siguiente resultado:
Ciclo con Assembly:
00:00:00.63 ms

Ciclo con Gambas:
00:02:32.061 ms


Los datos de mi cpu: (que los he sacado con el comando $cat /proc/cpuinfo)
 Intel(R) Pentium(R) Dual  CPU  T2330  @ 1.60GHz
Spoiler: [ Mostrar ]



El problema es: hacer un programa (o libreria) "util" en ensamblador debe de ser muy dificil
 




===================
Blog personal
Web: SoloGambas seleccion de articulos dedicados a Gambas
Visita el Curso de Gambas3 ¡¡¡Gratuito!!!
 
jsbsan - Ver perfil del usuarioEnviar mensaje privadoVisitar sitio web del usuario 
Volver arribaPágina inferior
Responder citando   Descargar mensaje  
Mensaje Re: Dos Tiempos De 1 Mil Millones De Ciclos 
 
jsbsan escribió: [Ver mensaje]
En mi ordenador me dá, el siguiente resultado:
Ciclo con Assembly:
00:00:00.63 ms

Ciclo con Gambas:
00:02:32.061 ms

        

A mi:
Ciclo con Assembly:
00:00:00.562 ms

Ciclo con Gambas:
00:01:19.457 ms


gambas sale un po' maltrecho.    


jsbsan escribió: [Ver mensaje]
El problema es: hacer un programa (o libreria) "util" en ensamblador debe de ser muy dificil

Yo creo que el codigo Assembly puede ser util, en efecto, cuando se debe utilizar un ciclo muuuuuy largo.
 



 
vuott - Ver perfil del usuarioEnviar mensaje privado 
Volver arribaPágina inferior
Responder citando   Descargar mensaje  
Mensaje Re: Dos Tiempos De 1 Mil Millones De Ciclos 
 
Vuott:

¿que microprocesador CPU tiene tu ordenador?

Es que es curioso que en Ensamblador, los tiempos son muy parecidos, los tuyos con los mios, pero en gambas (que es lenguaje interpretado) es casi la mitad de tiempo.

Saludos

Julio
 




===================
Blog personal
Web: SoloGambas seleccion de articulos dedicados a Gambas
Visita el Curso de Gambas3 ¡¡¡Gratuito!!!
 
jsbsan - Ver perfil del usuarioEnviar mensaje privadoVisitar sitio web del usuario 
Volver arribaPágina inferior
Responder citando   Descargar mensaje  
Mensaje Re: Dos Tiempos De 1 Mil Millones De Ciclos 
 
jsbsan escribió: [Ver mensaje]
que microprocesador CPU tiene tu ordenador?


El mio es un AMD, 4 core.



Haciendo el test con el mi portatil (AMD Athlon 64, 3000+), obtengo este resultado:
Ciclo con Assembly:
00:00:01.392

Ciclo con Gambas:
00:05:51.827    
 



 
última edición por vuott el Miercoles, 29 Julio 2015, 12:44; editado 1 vez 
vuott - Ver perfil del usuarioEnviar mensaje privado 
Volver arribaPágina inferior
Responder citando   Descargar mensaje  
Mensaje Re: Dos Tiempos De 1 Mil Millones De Ciclos 
 
Usando Fast con el procedimiento de gambas los tiempos son más o menos los mismos:

En ensamblador 00:00:02.311 ms
En gambas con Fast 00:00:03.446 ms

En mi AMD E2-2000

Saludos.
 



 
angelhjose - Ver perfil del usuarioEnviar mensaje privado 
Volver arribaPágina inferior
Responder citando   Descargar mensaje  
Mensaje Re: Dos Tiempos De 1 Mil Millones De Ciclos 
 
angelhjose escribió: [Ver mensaje]
Usando Fast con el procedimiento de gambas los tiempos son más o menos los mismos

Sì, Fast es una optima solución. Probablemente se basa en Assembly.


Pero con ciclos muuuuy grandes, el Assembly resulta vencedor.

Prueba en mi ordenador con 10 mil millones de ciclos:
Ciclo con Assembly:
00:00:05.564

Ciclo con Gambas:
00:00:18.536


Prueba en mi ordenador con 100 mil millones de ciclos:
Ciclo con Assembly:
00:00:55.703

Ciclo con Gambas:
00:01:18.628


Tengo que decir que la prueba con Fast no me dio siempre resultados más o menos estables, es decir parecidos, similares. Con Assembly sì.
 



 
última edición por vuott el Jueves, 30 Julio 2015, 14:30; editado 1 vez 
vuott - Ver perfil del usuarioEnviar mensaje privado 
Volver arribaPágina inferior
Responder citando   Descargar mensaje  
Mensaje Re: Dos Tiempos De 1 Mil Millones De Ciclos 
 
Si queréis hacer la prueba con el C tambien:
Private Extern Test_C(valore As Integer) As Integer In "/tmp/test_c"


Public Sub Main()

  Dim i As Integer
  Dim dt1, dt2 As Date

    creaso_C()
    
    dt1 = Time
    i = Test_C(1000000000)
    dt2 = Time

    If i <> 1000000000 Then Error.Raise("Error al ejecutar el ciclo: 'i' = " & i)
    
    Print "Ciclo con C:"
    Print CStr(Date(0, 0, 0, 0, 0, 0, DateDiff(dt1, dt2, gb.Millisecond)))

End


Private Procedure creaso_C()
  
  File.Save("/tmp/test_c.c", "\nint Test_C(int i) {" &
            "\n int n=0;" &
            "\n while (i != 0) {" &
            "\n ++n;" &
            "\n --i;\n};"
            "\n return n;\n}")
  
  
  Shell "gcc -o /tmp/test_c.so /tmp/test_c.c -shared" Wait
  
End

 



 
vuott - Ver perfil del usuarioEnviar mensaje privado 
Volver arribaPágina inferior
Responder citando   Descargar mensaje  
Mensaje Re: Dos Tiempos De 1 Mil Millones De Ciclos 
 
Las pruebas que estan realizando no son validas. Deben ordenarle a GCC que no realice ninguna optimización con el código que estan queriendo compilar. Lo más probable es que se esté dando cuenta de que el ciclo no está haciendo nada, y lo elimine del hilo de ejecución. Lo más facil para darse cuenta de esto es ejecutar objdump sobre el binario que escupe GCC y compararlo con el código que ustedes estaban queriendo compilar.
 



 
sebikul - Ver perfil del usuarioEnviar mensaje privado 
Volver arribaPágina inferior
Responder citando   Descargar mensaje  
Mensaje Re: Dos Tiempos De 1 Mil Millones De Ciclos 
 
sebikul escribió: [Ver mensaje]
Deben ordenarle a GCC que no realice ninguna optimización con el código que estan queriendo compilar.


No obtuve ningún cambio de resultado.
 



 
vuott - Ver perfil del usuarioEnviar mensaje privado 
Volver arribaPágina inferior
Mostrar mensajes anteriores:    
 
OcultarTemas parecidos
Tema Autor Foro Respuestas último mensaje
No hay nuevos mensajes Problema Con Ciclos cyberx0x General 0 Sabado, 13 Noviembre 2010, 18:04 Ver último mensaje
cyberx0x
No hay nuevos mensajes Que Tiempos Se Manejan En El Perfilado De ... v3ctor General 2 Domingo, 23 Noviembre 2014, 14:09 Ver último mensaje
jguardon
No hay nuevos mensajes Tiempos De Carga De Texto Grandamakulo General 4 Sabado, 03 Febrero 2018, 22:04 Ver último mensaje
Grandamakulo
 

Publicar nuevo tema  Responder al tema  Página 1 de 1
 

Usuarios navegando en este tema: 0 registrados, 0 ocultos y 1 invitado
Usuarios registrados conectados: Ninguno


 
Lista de permisos
No puede crear mensajes
No puede responder temas
No puede editar sus mensajes
No puede borrar sus mensajes
No puede votar en encuestas
No puede adjuntar archivos
Puede descargar archivos
No puede publicar eventos en el calendario



  

 

cron