Re: Benchmarking en distintos lenguajes [ Era algo así como cliente en jabber... ]
Franco Catrin L.
fcatrin en tuxpan.com
Vie Nov 16 17:03:42 CLST 2007
Xavier Andrade escribió:
> On Fri, 16 Nov 2007, Franco Catrin L. wrote:
>>
>> El problema esta cuando el nivel de abstracci�n te oculta lo que esta
>> sucediendo por debajo, y se hacen cosas dem�s en forma involuntaria.
>> Recuerdo que Federico Mena comentaba que muchos problemas de
>> performance se habian resuelto simplemente aplicando strace para ver
>> qu� estaba sucediendo por debajo y ahi encontraron que en
>> aplicaciones como OpenOffice (y tambien en GNOME) se abrian y
>> procesaban archivos inmutables una y otra vez, en vez de una sola vez
>> al principio. Es facil tener ese problema, cuando las aplicaciones
>> crecen y tienes una gran base de c�digo te comienzas (al fin) a
>> enfocar mas en el qu� y no en el c�mo, pero si te descuidas comienzas
>> a mal usar lo que ya tienes.
>>
>
> Bueno, por ejemplo si se llama repetidamente a rutinas chicas que hacen
> poco, el rendimiento se reduce en al menos un orden de magnitud en
> comparacion al mismo codigo "inlined".
>
> Es decir:
>
> for(i=0; i<N; i++) a[i] = b[i] + c[i];
>
> es muchisimo mas rapido que
>
> for(i=0; i<N; i++) a[i] = sum(b[i], c[i]);
>
> con double sum(double a, double b){ return a + b;}. Y al final muchos
> codigos OO terminan haciendo cosas por el estilo (probablemente no
> para este
> ejemplo, claro).
Supongo que es porque rompen el principio de localidad [1].
Yo me refería a otros casos pero igual es interesante:
La máquina virtual de Java puede aplicar inline en algunos métodos
siempre y cuando estos métodos no sean sobreescritos, por ejemplo todos
aquellos que sean static o final... pero... además en tiempo de
ejecución puede deducir que un método puede ser "inlined" de forma
segura, porque ya sabe que no esta sobreescrito. De esta forma el
programador no necesita cambiar su código y es la máquina virtual quien
se hace la astuta, lo malo es que hay programadores que declaran todo
como public. [2]
Si no me equivoco los compiladores de C tambien son capaces de reconocer
código que conviene dejar como inline.
Y finalmente.. los problemas de rendimiento en aplicaciones de las que
me toca ver a mi casi siempre son debido a latencias por I/O :(
[1] http://en.wikipedia.org/wiki/Locality_of_reference
[2] http://java.sun.com/products/hotspot/docs/general/hs2.html
--
Franco
Más información sobre la lista de distribución Linux