[IRC-DEV] Vuelvo a mandar la prueba de rendimiento

Jesus Cea Avion jcea at argo.es
Tue Feb 3 18:56:46 CET 2004


> Resultados:
[...]
> user    2m18.315s
[...]
> real    1m41.474s

El código que proporcionas no está comparando algoritmos, sino código
muy distinto. Es decir:

- En el código "viejo" hay código innecesario para esta prueba, pero que
se ejecuta. En tu código esa "carga" no existe.

- En tu rutina de búsqueda pones el algoritmo "inline" directamente. En
la rutina original hay una llamada a una función externa. Esa es carga
que tampoco tienes.

- Tu función "strCasecmp" es "inlined" automáticamente por el compilador
de C, con optimizaciones alta. En cambio la rutina "strcmp" "normal" es
una llamada a una librería.

Haciendo esos cambios y limitando la prueba EXCLUSIVAMENTE a comparar
"strcmp" y "strCasecmp", que aparentemente es lo que realmente quieres,
obtengo los siguientes resultados:

* P4 a 1.4Ghz:
Método viejo: user    0m5.530s
Método nuevo: user    0m5.880s (más lento!!)

* UltraSparc 1, 143Mhz:
Método viejo: user        7.9
Método nuevo: user        7.5 (más rápido!!)

Se puede ver que la diferencia es inapreciable y no merece ningún
cambio.

El problema es que funciones como "strlen" o "strcmp" no son "inlined"
por las versiones modernas del GCC. Se podría ganar mucho simplemente
definiendo esas en el propio código del ircd.

Ver, por ejemplo:

   http://gcc.gnu.org/ml/gcc/2003-01/msg00601.html

Compilando el código original con "-minline-all-stringops" debería
suponer una gran mejora. Pero con gcc 3.3.2 no veo que esa opción haga
nada en absoluto.

Así pues, la hipotética mejora de RyDeN desaparece con una función
"strcmp" propia, mientras la gente del GCC no se ponga las pilas.

Si alguien sabe cómo hacer que el GCC actual (3.3.2) meta código
"inline" para esas funciones, como hacían las antiguas versiones, le
agradecería el apunte.

PS: Para ver el código ensamblador que genera el compilador, simplemente
compila con la opción "-S".

-- 
Jesus Cea Avion                         _/_/      _/_/_/        _/_/_/
jcea at argo.es http://www.argo.es/~jcea/ _/_/    _/_/  _/_/    _/_/  _/_/
                                      _/_/    _/_/          _/_/_/_/_/
PGP Key Available at KeyServ   _/_/  _/_/    _/_/          _/_/  _/_/
"Things are not so easy"      _/_/  _/_/    _/_/  _/_/    _/_/  _/_/
"My name is Dump, Core Dump"   _/_/_/        _/_/_/      _/_/  _/_/
"El amor es poner tu felicidad en la felicidad de otro" - Leibniz




More information about the IRC-Dev mailing list