mpiexe c: почему моя python программа работает только на одном процессоре? - PullRequest
0 голосов
/ 15 января 2020

Я пытаюсь распараллелить программу python (program_to_parallelize.py) на 16 подпроцессов на моем 16-ядерном компьютере. Я использую этот код, который является частью сценария Python:

import subprocess
subprocess.call("mpiexec -n 16 python program_to_parallelize.py", shell=True)

. Он выполняется без каких-либо ошибок, но когда я смотрю на использование ЦП, я вижу, что все подпроцессы работают на одном ЦП. (Нажмите здесь , чтобы увидеть, что я получу, набрав «top 1» в командной строке). Но я бы предпочел, чтобы каждый из 16 процессов занимал 100% одного ЦП, а не все разделял первый.

Я работаю на 16 ядрах Ubuntu 16.04.6 LTS. Я использую версию 3.0.3 mpi4py Я использую версию 3.3.2 mpiexe c

Ответы [ 2 ]

0 голосов
/ 17 января 2020

Я понял это на самом деле. Одним из решений является привязка каждого процесса к процессору после начала выполнения. Для этого вы можете использовать эту команду:

taskset -pc [CPU number] [process ID]

, например:

taskset -pc 2 3039

Более подробную информацию о том, как назначить процесс процессору, можно найти на этом веб-сайте: https://www.hecticgeek.com/2012/03/assign-process-cpu-ubuntu-linux/

0 голосов
/ 15 января 2020

subprocess модуль не предназначен для параллельных вычислений. Для этого следует использовать модуль multiprocessing, см. Также: https://docs.python.org/3/library/multiprocessing.html

По вопросу Что такое разница между многопроцессорностью и подпроцессом? :

Модуль подпроцесса позволяет запускать и контролировать другие программы. Все, что вы можете запустить из командной строки на компьютере, может запускаться и управляться с помощью этого модуля. Используйте это для интеграции внешних программ в ваш код Python.

Многопроцессорный модуль позволяет разделять задачи, написанные в python, на несколько процессов, чтобы повысить производительность. Он предоставляет API, очень похожий на модуль потоков; он предоставляет методы для обмена данными между процессами, которые он создает, и упрощает задачу управления несколькими процессами для выполнения кода (1019) * Другими словами, многопроцессорность позволяет вам использовать преимущества нескольких процессов, чтобы выполнять задачи быстрее, выполняя код параллельно.

...