2016-11-16 2 views
0

Окружающая среда: Openstack Ubuntu14.04vm 16 виртуальных процессоров. Я написал программу python с интенсивным процессором. Он использовал инструменты scipy.optimize. Я не использовал многопроцессорную/многопоточность. Но при его запуске процесс python генерирует 17 потоков, и все процессоры почти полностью используются. Командаpython запускает многопоточное многопоточное автоматическое

Run «сверху», и вы можете увидеть 4152 процесс питона PID и используются все процессоры, как this

Run «топ -H -p 4152», и вы можете увидеть темы, как this

Итак, почему python работает на multicores и multithreads, учитывая, что я ничего не сделал с этим?

ответ

2

Это происходит потому, что scipy.optimize использует BLAS для матричного умножения и т. Д. Ubuntu 14.04 использует OpenBLAS по умолчанию, а OpenBLAS по умолчанию использует все доступные ядра.

Я думаю, вы можете установить переменную среды OPENBLAS_NUM_THREADS=1, если хотите, чтобы она была однопоточной.

+0

Установка OPENBLAS_NUM_THREADS = 1 в ~/.bashrc не работает. Все еще работает на многоядерном. Как я могу проверить, пользуюсь ли я OpenBLAS или другими библиотеками? – fringsoo

+0

Хм, возможно, я ошибаюсь, и OpenBLAS не является дефолтом. Чтобы проверить библиотеку numpy, используйте http://stackoverflow.com/questions/9000164/how-to-check-blas-lapack-linkage-in-numpy-scipy –

+0

ОК, спасибо! Задача решена. Кажется, BLAS/LAPACK по умолчанию. – fringsoo

2

scipy использует внешние библиотеки (в первую очередь BLAS и LAPACK) для множества общих операций. В зависимости от реализации этих библиотек в вашей системе большое количество операций оптимизировано для многопроцессорности.

Смежные вопросы