cuello de botella de ancho de banda de memoria

cuello de botella de ancho de banda de memoria

Tengo un programa de pandas en Python. Cuando ejecuto AWS Ec2 con 8 núcleos. Obtuve una utilización del 100 % de la CPU y el programa finalizó en 8 minutos. Luego, si uso 16 núcleos, solo puedo obtener un 50% de utilización de la CPU y el programa aún finaliza en 8 minutos. Sospecho que alcanza el cuello de botella del ancho de banda de la memoria, así que seleccioné la instancia X1,16xlarge que tiene 64 núcleos y reclamó un ancho de banda de memoria de 300 GB/s. Sin embargo, no ayudó. el programa utilizó un pequeño porcentaje de los 64 núcleos y no terminó ni siquiera después de 10 minutos. instancia ec2 x1

¿Tienes idea de lo que está pasando?

(por cierto, el mismo programa ejecutándose en mi antigua torre de escritorio con 4 núcleos terminó en 16 minutos)

más detalles: el programa usa GridSearchCV que luego usabiblioteca de trabajopara ejecutar multiprocesamiento en paralelo. El número de procesos siempre es igual al número de núcleos del sistema.

Respuesta1

Python tiene un "bloqueo de intérprete global" que limita su capacidad para utilizar múltiples subprocesos de manera eficiente. Unorespondióen este sitio que debería considerar escribir funciones críticas en C/C++.

Si es posible, considere dividir su análisis en partes más pequeñas y luego ejecutarlas como procesos separados para evitar el problema del bloqueo global del intérprete.

información relacionada