Я попробовал следующий код «hello world», сначала в своей системе (8 ядер), затем на сервере (160 ядер):
int main(int argc, char *argv[]) {
int numprocs, rank, namelen;
char processor_name[MPI_MAX_PROCESSOR_NAME];
double t;
t=MPI_Wtime();
MPI_Init(&argc, &argv);
MPI_Comm_size(MPI_COMM_WORLD, &numprocs);
MPI_Comm_rank(MPI_COMM_WORLD, &rank);
MPI_Get_processor_name(processor_name, &namelen);
//printf("Process %d on %s out of %d\n", rank, processor_name, numprocs);
printf("%f---%d---%s\n",MPI_Wtime()-t,rank,processor_name);
sleep(.5);//to make sure, each process needs a significant amount of time to finish
MPI_Finalize();
}
Я запускаю программу со 160 процессами, используя mpirun -np 160 ./hello
. Я ожидал, что работа сервера будет более эффективной, поскольку в начальной точке для каждого процесса доступно одно ядро, но результат оказался противоположным.
8 cores : 2.25 sec
160 cores : 5.65 sec
Пожалуйста, поправьте меня, если я запутался в отношении основного назначения каждому процессу. Также, пожалуйста, объясните, как сопоставление выполняется по умолчанию? Я знаю, что есть несколько способов сделать это вручную, либо с помощью ранжированного файла, либо с помощью некоторых параметров, связанных с привязкой сокета/ядра. Я хочу знать, как обрабатываются процессы в openMPI и как им выделяются ресурсы по умолчанию?
MPI_Wtime()
передMPI_Init()
приводит к нестандартной программе MPI. Стандарт позволяет реализациям предоставлять синхронизированные глобальные часы, и для них требуется, чтобы сначала вызывалсяMPI_Init()
. Запомните это замечание. - person Hristo Iliev   schedule 10.07.2013MPI_Init()
занимает все больше времени с увеличением количества процессов, и это поведение не ограничивается только Open MPI. - person Hristo Iliev   schedule 10.07.2013