python multithreading numpy gil python-multithreading

python - Bloqueo de intérprete global y numpy



subplot title python (3)

Algunas rutinas numpy lanzan GIL, por lo que pueden ser eficientemente paralelas en hilos ( info ). ¡Quizás no necesites hacer nada especial!

Puede usar esta pregunta para saber si las rutinas que necesita están entre las que liberan GIL. En resumen, busque ALLOW_THREADS o nogil en la fuente.

(También tenga en cuenta que MKL tiene la capacidad de utilizar varios subprocesos para una rutina, por lo que es otra forma fácil de obtener el paralelismo, aunque posiblemente no sea el más rápido).

Estoy a punto de escribir un código de Python intensivo en computación que casi con toda seguridad pasará la mayor parte de su tiempo dentro de las funciones de álgebra lineal de numpy .

El problema en cuestión es vergonzosamente paralelo . En pocas palabras, la forma más fácil de aprovechar eso sería usar varios subprocesos. La barrera principal es casi seguro que será el bloqueo global de intérpretes (GIL).

Para ayudar a diseñar esto, sería útil tener un modelo mental para el cual se pueda esperar que numpy operaciones numpy liberen el GIL por su duración. Con este fin, agradecería cualquier regla de oro, lo que debe y lo que no debe hacer, punteros, etc.

En caso de que importe, estoy usando Python 2.7.1 de 64 bits en Linux, con numpy 1.5.1 y scipy 0.9.0rc2, construido con Intel MKL 10.3.1.


Probablemente encontrará respuestas a todas sus preguntas relacionadas con NumPy y la programación paralela en la wiki oficial .

Además, eche un vistazo a esta página de recetas : contiene un código de ejemplo sobre cómo usar NumPy con varios subprocesos.


Vergonzoso paralelo? Numpy? Suena como un buen candidato para PyCUDA o PyOpenCL .