2012-05-03 2 views
1

У меня проблема при запуске скрипта с помощью python. Я не делал никаких распараллеливаний в python и не вызывал mpi для запуска скрипта. Я просто выполняю «python myscript.py», и он должен использовать только 1 процессор.Остановить Python от использования более чем одного процессора

Однако, когда я смотрю на результаты команды «top», я вижу, что на python используется почти 390% моего процессора. У меня есть четырехъядерный ядро, поэтому 8 потоков. Я не думаю, что это помогает моему сценарию работать быстрее. Итак, я хотел бы понять, почему python использует более одного процессора и не позволяет ему это делать.

Интересно, когда я запускаю второй скрипт, который также занимает 390%. Если я запускаю третий скрипт, использование процессора для каждого из них падает до 250%. Некоторое время назад у меня была аналогичная проблема с Matlab, и так, как я решил, это было запустить matlab с -singlecompthread, но я не знаю, что делать с python.

Если это помогает, я решаю уравнение Пуассона (которое совсем не распараллелено) в моем сценарии.


UPDATE: Мой друг побежал код на своем собственном компьютере и занимает всего 100% CPU. Я не использую BLAS, MKL или любую другую вещь. Я до сих пор не знаю, в чем причина использования 400% процессора. В библиотеке SLATEC есть фрагмент алгоритма fortran, который решает систему Ax = b. Эта часть, я думаю, использует много процессора.

+0

Мы могли бы помочь больше, если бы смогли увидеть код – huon

ответ

2

Ваш код может вызывать некоторые функции, которые используют C/C++/etc. под. В этом случае возможно использование нескольких потоков.

Вы звоните в какие-либо библиотеки, которые являются только связями python с некоторыми более эффективно реализованными функциями?

+0

Да, мой код вызывает функции C, но эти функции C не имеют никакой распараллеливания. Я в замешательстве, почему эти функции C используют несколько потоков? – solora

1

Вы всегда можете настроить свою сродство к процессу, чтобы он работал только на одном процессоре. Используйте команду «taskset» в linux или обработчик процесса в окнах.

Таким образом, вы должны знать, имеет ли ваш сценарий такую ​​же производительность, используя один процессор или более.

+0

Спасибо, tasket отлично работал. Я буду тестировать и посмотреть, помогала ли работа на серверном процессоре или нет. – solora

+0

Я провел несколько тестов, и производительность не сопоставима. Если я запустил код на 1 процессор, для запуска моего кода потребуется много времени. Это довольно странно. – solora

0

Может ли быть, что ваш код использует SciPy или другую числовую библиотеку для Python, которая связана с Intel MKL или другой предоставленной поставщиком библиотекой, которая использует OpenMP? Если основной C код/​​C++ является запараллеленными с использованием OpenMP, вы можете ограничить его в одном потоке, установив переменную окружения OMP_NUM_THREADS в 1:

OMP_NUM_THREADS=1 python myscript.py

Intel MKL наверняка параллельно во многих местах (LAPACK, BLAS и FFT), если они связаны с соответствующим параллельным драйвером (поведение по умолчанию по умолчанию) и по умолчанию запускает столько же потоков, сколько количество доступных ядер процессора.

+0

Thanjs для ваших предложений. Я подробно изучаю это. Я вернусь к вам снова. – solora

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