Saltar al contenido

Uso de OMP_NUM_THREADS = 1 para multiprocesamiento de Python

Solución:

Como dijiste en un comentario que tu programa Python está llamando a un módulo C que usa OpenMP:

OpenMP realiza múltiples subprocesos dentro de un proceso, y el número predeterminado de subprocesos suele ser el número que la CPU puede ejecutar simultáneamente. (Este es generalmente el número de núcleos de CPU, o un múltiplo de ese número si la CPU tiene una función SMT como Hyper-Threading de Intel). Por lo tanto, si tiene, por ejemplo, una CPU de cuatro núcleos sin hiperproceso, OpenMP desea ejecutar 4 subprocesos de forma predeterminada.

Cuando usas Python multiprocessing módulo, su programa inicia múltiples procesos de Python que pueden ejecutarse simultáneamente. Puede controlar el número de procesos, pero a menudo querrá que sea el número de núcleos / subprocesos de CPU, por ejemplo, devuelto por multiprocessing.cpu_count().

Entonces, ¿qué sucede en esa CPU de cuatro núcleos si ejecuta un multiprocessing programa que ejecuta 4 procesos de Python, y cada uno llama a una función OpenMP ejecuta 4 subprocesos? Terminas ejecutando 16 hilos en 4 núcleos. Eso funcionará, pero no con la máxima eficiencia, ya que cada núcleo tendrá que pasar algún tiempo cambiando de tarea.

Configuración OMP_NUM_THREADS=1 básicamente desactiva el subproceso múltiple de OpenMP, por lo que cada uno de sus procesos de Python sigue siendo de un solo subproceso.

Sin embargo, asegúrese de estar iniciando suficientes procesos de Python si hace esto. Si tiene 4 núcleos de CPU y solo ejecuta 2 procesos de Python de un solo subproceso, tendrá 2 núcleos utilizados y los otros 2 inactivos. (En este caso, es posible que desee configurar OMP_NUM_THREADS=2.)

¡Haz clic para puntuar esta entrada!
(Votos: 0 Promedio: 0)



Utiliza Nuestro Buscador

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *