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