|
Página 1 de 1
|
Dos Tiempos De 1 Mil Millones De Ciclos
Autor |
Mensaje |
vuott
Analista Programador
Registrado: Agosto 2013
Mensajes: 2086
Edad: 60 Ubicación:
|
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
|
#1 Martes, 28 Julio 2015, 00:20 |
|
|
jsbsan
Analista Programador
Registrado: Septiembre 2009
Mensajes: 4175
Edad: 51 Ubicación: dos hermanas, sevilla
|
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
processor : 0
vendor_id : GenuineIntel
cpu family : 6
model : 15
model name : Intel(R) Pentium(R) Dual CPU T2330 @ 1.60GHz
stepping : 13
microcode : 0xa4
cpu MHz : 800.000
cache size : 1024 KB
physical id : 0
siblings : 2
core id : 0
cpu cores : 2
apicid : 0
initial apicid : 0
fdiv_bug : no
f00f_bug : no
coma_bug : no
fpu : yes
fpu_exception : yes
cpuid level : 10
wp : yes
flags : fpu vme de pse tsc msr pae mce cx8 apic sep mtrr pge mca cmov pat pse36 clflush dts acpi mmx fxsr sse sse2 ss ht tm pbe nx lm constant_tsc arch_perfmon pebs bts aperfmperf pni dtes64 monitor ds_cpl est tm2 ssse3 cx16 xtpr pdcm lahf_lm dtherm
bogomips : 3192.34
clflush size : 64
cache_alignment : 64
address sizes : 36 bits physical, 48 bits virtual
power management:
processor : 1
vendor_id : GenuineIntel
cpu family : 6
model : 15
model name : Intel(R) Pentium(R) Dual CPU T2330 @ 1.60GHz
stepping : 13
microcode : 0xa4
cpu MHz : 800.000
cache size : 1024 KB
physical id : 0
siblings : 2
core id : 1
cpu cores : 2
apicid : 1
initial apicid : 1
fdiv_bug : no
f00f_bug : no
coma_bug : no
fpu : yes
fpu_exception : yes
cpuid level : 10
wp : yes
flags : fpu vme de pse tsc msr pae mce cx8 apic sep mtrr pge mca cmov pat pse36 clflush dts acpi mmx fxsr sse sse2 ss ht tm pbe nx lm constant_tsc arch_perfmon pebs bts aperfmperf pni dtes64 monitor ds_cpl est tm2 ssse3 cx16 xtpr pdcm lahf_lm dtherm
bogomips : 3192.34
clflush size : 64
cache_alignment : 64
address sizes : 36 bits physical, 48 bits virtual
power management:
El problema es: hacer un programa (o libreria) "util" en ensamblador debe de ser muy dificil
|
#2 Martes, 28 Julio 2015, 18:18 |
|
|
vuott
Analista Programador
Registrado: Agosto 2013
Mensajes: 2086
Edad: 60 Ubicación:
|
Re: Dos Tiempos De 1 Mil Millones De Ciclos
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.
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.
|
#3 Martes, 28 Julio 2015, 21:02 |
|
|
jsbsan
Analista Programador
Registrado: Septiembre 2009
Mensajes: 4175
Edad: 51 Ubicación: dos hermanas, sevilla
|
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
|
#4 Miercoles, 29 Julio 2015, 10:31 |
|
|
vuott
Analista Programador
Registrado: Agosto 2013
Mensajes: 2086
Edad: 60 Ubicación:
|
Re: Dos Tiempos De 1 Mil Millones De Ciclos
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
|
#5 Miercoles, 29 Julio 2015, 12:29 |
|
|
angelhjose
Usuario
Registrado: Noviembre 2014
Mensajes: 8
Edad: 54
|
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.
|
#6 Jueves, 30 Julio 2015, 06:51 |
|
|
vuott
Analista Programador
Registrado: Agosto 2013
Mensajes: 2086
Edad: 60 Ubicación:
|
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
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
|
#7 Jueves, 30 Julio 2015, 14:28 |
|
|
vuott
Analista Programador
Registrado: Agosto 2013
Mensajes: 2086
Edad: 60 Ubicación:
|
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
|
#8 Lunes, 03 Agosto 2015, 11:50 |
|
|
sebikul
Sebastian
Programador
Registrado: Julio 2012
Mensajes: 113
Edad: 30 Ubicación:
|
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.
|
#9 Lunes, 03 Agosto 2015, 18:00 |
|
|
vuott
Analista Programador
Registrado: Agosto 2013
Mensajes: 2086
Edad: 60 Ubicación:
|
Re: Dos Tiempos De 1 Mil Millones De Ciclos
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.
|
#10 Lunes, 03 Agosto 2015, 21:01 |
|
|
|
Temas parecidos
Temas parecidos
|
Página 1 de 1
|
Usuarios navegando en este tema: 0 registrados, 0 ocultos y 1 invitado Usuarios registrados conectados: Ninguno
|
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
|
|
|
|
|