Почему время выполнения многопроцессорного кода такое же, как у разных ядер? - PullRequest
0 голосов
/ 21 июня 2019

У меня что-то странное с моим кодом.На самом деле у меня есть многопроцессорный код.

Так что, когда я запускаю этот код с 1 процессором, это занимает около 218 минут.С 32 процессорами и 12 ГБ на процессор это занимает около 35 минут.И с 10 процессорами и 12 ГБ это займет около 35 минут.Отмечая, что мой код загружает два файла, которые вместе имеют 10 ГБ.

Может кто-нибудь помочь с помощью диагностики, как я могу проверить, почему время работы одинаково для 10 и 32 ядер?

Обычно, с32 процессора это должно занять меньше времени, не так ли?

код выполняется через такой скрипт:

#!/bin/bash
#SBATCH --account=def-hmcheick
#SBATCH --cpus-per-task 32
#SBATCH --mem-per-cpu=12G
#SBATCH --time=02:00:00
module load python/3.5.4
source "/project/ENV3.5.4/bin/activate"

time mpirun python /project/myproject/executor.py

В executor.py у меня есть словарь, в котором у каждого ключа есть списокзначения, которые я хочу сравнить ключ с каждым значением в этом списке.Как я могу это сделать?другими словами, как я могу передать ключ и список значений, которые будут вычислены параллельно.Я сделал следующее:

with concurrent.futures.ProcessPoolExecutor(32) as executor:
            for key, vector in executor.map(unwrap_self_alignment, zip([self]*len(keyList), keyList)):
...