увеличение количества процессоров в mpi увеличивает время обработки?

0

Я новичок в параллельных вычислениях, поэтому решил начать с компиляции Hello World с помощью Mpich2. Вот код:

/* helloworld.c */

#include <stdio.h>

/* You MUST include this for the MPI_* functions */
#include "mpi.h"

int main(int argc, char **argv) {
   int rank;
   char host[150];
   int namelen;

   /* Initialize MPI. This handles mpich-specific command line arguments */
   MPI_Init(&argc, &argv);

   /* Get my rank. My rank number gets stored in the 'rank' variable */
   MPI_Comm_rank(MPI_COMM_WORLD, &rank);

   /* Look up what computer I am running on. Store it in 'host' */
   MPI_Get_processor_name(host,&namelen);

   printf("Hello world (Rank: %d / Host: %s)\n", rank, host);
   fflush(stdout);

   /* Finalize: Close connections to the other children, clean up memory
    * the MPI library has allocated, etc */
   MPI_Finalize();
   return 0;
}

Я компилирую и запускаю его следующим образом:

mpicc helloworld.c -o myhello 
mpirun -nc 2 ./myhello

Оно работает. Однако я заметил, увеличив количество процессоров, увеличивая время настенных часов, которое я ожидаю, что оно уменьшится?! Кроме того, нет ограничений на количество процессоров. Однако мой ноутбук имеет 5 ядер, но я могу установить количество процессоров в коде столько, сколько захочу. Я ожидаю некоторую ошибку, если я превышу количество реальных процессоров.

  • 1
    Это не «количество процессоров», это «количество процессов», и вы можете иметь намного больше процессов, работающих в системе, чем у вас процессоров (даже сейчас у вас, вероятно, около 100 процессов, работающих в вашей системе). Можете ли вы поделиться своим программным кодом Hello World? Это может помочь с ответом на вопрос, но я предполагаю, что MPI должен создавать процессы и синхронизировать их, что увеличит время выполнения.
  • 1
    если вы действительно новичок и серьезно относитесь к этому, я предлагаю почитать книгу. В вашем случае, попросту говоря, n процессов, выполняющих одно и то же, займет столько же времени, сколько 1 процесс, выполняющий это. Распечатывая что-то в каждом процессе, вы не распределяете какую-либо работу и фактически конкурируете за такие ресурсы, как, например, ввод / вывод.
Показать ещё 1 комментарий
Теги:
mpi
parallel-processing
fortran
mpich

1 ответ

2
Лучший ответ

Во-первых, параллельная обработка в теории должна делать, как вы говорите:

  • Процесс, выполняемый одним, должен быть быстрее, если сделать два.

Это, хотя хорошо думать в теории, на практике это на самом деле совершенно другая история.

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

То, что я бы посоветовал сделать, - это то, что действительно может показать полезность процесса parrllel, например, разбиение массива на разные сегменты и вычисление каждого сегмента с помощью другого процессора (т.е. Должен быть огромным массивом) или чтение разных текстовых файлов при одном и том же время и некоторые работы над ними.

В заключение вы должны действительно изучить закон Амдала, который объясняет, насколько система может ускориться при параллельной обработке.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню