Concurrencia, GIL y multi-núcleo

Francesc Alted faltet en pytables.org
Mie Jun 3 14:28:43 CEST 2009


A Tuesday 02 June 2009 21:02:18 Pau Freixes escrigué:
> Ahora que sale el tema de Python en entornos científicos que os parece el
> enfoque que esta dando python a la multiconcurrència y el modulo
> multiprocessing para evitar los "problemas" endémicos de arquitectura del
> lenguaje con GIL ?

Bueno, pues la pregunta es bastante general, pero intentaré responder.  
Personalmente pienso que existen todavia muchas maneras de sacar rendimiento a 
las CPUs multi-núcleo sin necesidad de acudir a temas de concurrencia.  Por 
ejemplo, hacer un uso óptimo del ancho de banda de memoria es una cosa crítica 
y muy poca gente es consciente de ello.  Si nuestros cálculos están limitados 
por el acceso a memoria (y hoy en día la mayoría lo están), un sistema multi-
núcleo poco podrá hacer por acelerarlos.

Otro tema importante es hacer uso de las capacidades de cálculo vectorial que 
vienen en las CPUs modernas (instrucciones SSE[2-4] o VMX en el futuro 
próximo) y que estan bastante desaprovechadas en general.  Creo que si los 
desarrolladores hicieran un mejor aprovechamiento de las instrucciones 
vectoriales, se podrian conseguir velocidades bastante superiores en muchas 
situaciones.

Así es que me da la impresión que, debido a que la industria ha derivado hacia 
la construcción de procesadores con núcleos múltiples (básicamente por razones 
de imposibilidad técnica de seguir por los caminos tradicionales de subir la 
frecuencia de los procesadores), existe una fiebre un poco desmesurada por 
parte de los usuarios en poder usar todos los procesadores de forma paralela, 
cuando la realidad es que conseguir esto no es posible en general.  Por esta 
razón coincido con GvR en que no veo demasiado crítico la limitación del GIL.

Dicho esto, es cierto que hay problemas que pueden sacar rendimiento a varios 
procesadores simultáneamente (codificación de vídeo, por ejemplo), aunque en 
mi opinión, son áreas bastante restringidas y no afectan a la mayoría de 
desarrollos.

Para la gente interesada en estos temas, hay un par de presentaciones bastante 
interesantes que dió Jesse Noller en el último PyCon de Chicago.  En [1], 
describe el paquete ``multiprocessing`` incluido en las últimas versiones de 
Python, y cómo se compara con los threads clásicos.  En [2], hace una 
introducción bastante básica y asequible sobre los sistemas concurrentes hoy 
en día, haciendo especial énfasis en aclarar unas cuantas falsedades sobre la 
percepción que la gente tiene de ellos.  La encuentro bastante esclarecedora, 
pues desmitifica un poco las expectativas puestas en el paralelismo.

[1] http://us.pycon.org/2009/conference/schedule/event/31/
[2] http://us.pycon.org/2009/conference/schedule/event/69/

Saludos,

-- 
Francesc Alted
_______________________________________________
Lista de correo Python-es 
http://listas.aditel.org/listinfo/python-es
FAQ: http://listas.aditel.org/faqpyes





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