2014-09-05 2 views
0

У меня есть программа MPI, которая создает файл, который имеет время на итерацию определенного количества вычислений. Когда я запускаю этот код без отправки в очередь (этот кластер работает с SGE), он дает следующее время в секундах. Я захватил 8 процессоров, используя mpirun -np8.Сроки программы MPI резко меняются после отправки в очередь

STEP ITIME  
------------- 
1 0.868128 
2 0.426714 
3 0.409768 
4 0.427312 
5 0.412737 
6 0.413256 
7 0.414480 
8 0.414984 
9 0.415683 
10 0.416826 

Но когда я представляю такое же количество работы на 8 процессоров и представить его в очередь, программа займет больше времени для вычисления итераций. Время на шаг почти в четыре раза.

STEP ITIME  
------------- 
1 3.189155 
2 1.594365 
3 1.600892 
4 1.589424 
5 1.605402 
6 1.589136 
7 1.599425 
8 1.591966 
9 1.601557 
10 1.603447 

Для отправки задания использовался следующий сценарий bash.

#!/bin/sh 
#$ -S /bin/bash 
#$ -pe orte 8 
export PATH=~:$PATH 
/opt/openmpi/bin/mpirun -np 8 ./exec 

Буду признателен, если кто-то может указать мне, что может вызвать эту проблему?

ответ

2

В вашем первом случае (запустите этот код без отправки в очередь) вы, вероятно, запускаете 8 процессов на одном узле. В наши дни это нормально: у вас, вероятно, есть 8 ядер.

Попробуйте это:

$ /opt/openmpi/bin/mpirun -np 8 uname -a 

вы получите 8 идентичных строк?

В случае SGE вы можете получить 8 физических машин, так что теперь есть сетевая связь. Подтвердите, как указано выше. Я не знаю SGE, но у вашей среды, без сомнения, есть «как назначить процесс mpi», чтобы указать, хотите ли вы сначала назначить первый или первый шаг.

+0

Я пробовал $/opt/openmpi/bin/mpirun -np 8 uname -a. Когда я запускаю его в командной строке, я получил 8 одинаковых строк. Но, когда я пытаюсь отправить его в очередь, я получил 8 разных строк. Похоже, он работал на 8 разных хостах. – Madisz

+0

хорошо там вы идете: ваша командная строка выполняется на одной машине, и процессы обмениваются сообщениями через разделяемую память или очень быстрый локальный loopback. ваша подача очереди запросила 8 узлов и пробежала по этим 8 узлам. ничего плохого в этом - вы можете направить на более высокий уровень параллелизма таким образом - но это то, что происходит. –

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