[Python-es] [OT] Artículo sobre CPUs hambrientas

Francesc Alted faltet en pytables.org
Vie Mar 26 10:40:13 CET 2010


Iep, Pau,

A Thursday 25 March 2010 22:16:06 Pau Freixes escrigué:
> Interesante Francesc, buena introducción a un problema latente y más
> que actual - y que discutimos tiempo aca.

Si, la verdad es que tomé 'prestados' varios elementos de nuestras discusiones 
pasadas para el artículo.  Cuando recapacitas, es increible la cantidad de 
cosas que se aprenden en los foros como éste.

> Quizá la explosión de
> lenguajes interpretados como lenguajes de uso habitual ha alejado un
> poco más al programador de las tecnicas habituales de optimización ?

Probablemente, aunque los principios son igual de generales, así que también 
se pueden aplicar a lenguajes interpretados (y a Python en particular).  La 
idea que queria comunicar era doble: la disposición de datos en nuestros 
programas es importante, y que hay que hacer uso de las mejores herramientas 
disponibles a nuestro alcance.

Por ejemplo, todos sabemos cuán importante es, dependendiendo de nuestras 
necesidades, el uso apropiado de listas, diccionarios o conjuntos en nuestros 
programas para lograr las mejores prestaciones.  O, cómo usando librerias como 
NumPy junto con BLAS optimizados nos puede llevar a obtener prestaciones 
quasi-óptimas en nuestros programas.

Pero si tú tienes que hacerte tu propio algoritmo y éste no está ya 
implementado de manera eficiente, aquí si que los lenguajes interpretados no 
son tan flexibles y probablemente hayas de bajar al nivel de lenguajes 
compilados para aplicar las optimizaciones.

> Por ejemplo podemos con Python aplicar tecnicas para reducir las malas
> prediciones de salto por parte de la CPU ? tiene sentido hablar de
> esto cuando es la maquina virtual i no el codigo de usuario quien
> realiza las operaciones envueltas en una instrucción "simulada" de
> salto ? si es el caso el branch prediction de la CPU se vuelve más
> "estupido" ?

No, no creo que sea el caso.  Como he dicho antes, cuando estas tratando de 
extraer la última gota de las prestaciones de un procesador, los lenguajes 
compilados (en particular C o Fortran) son mucho más apropiados.  Pero de 
nuevo, asegúrate que lo que quieres hacer no está ya disponible en tu lenguaje 
interpretado preferido.  Por ejemplo, usar numexpr te va a permitir evaluar 
expresiones algebraicas a una velocidad muy similar a hacer tu el programa en 
C, con la ventaja de que numexpr te permite compilar 'al vuelo' (es un JIT), y 
todos sabemos lo que eso significa en términos de comodidad (y por tanto, 
productividad, que al final es lo que se trata de obtener).

Saludos,

-- 
Francesc Alted



Más información sobre la lista de distribución Python-es