Как заставить MPI работать на многих ядрах? - PullRequest
2 голосов
/ 28 октября 2019

Я новичок в MPI и вообще в параллельном программировании, так что это может быть слишком очевидно для некоторых из вас.

Я хочу запустить простую программу hello world, используя все мои ядра.

В настоящее время я установил и настроил MPICH3, как показано здесь (я знаю, что руководство посвящено MPICH2, но это наиболее близко, что я нашел).

Я скопировал этот код:

#include <mpi.h>
#include <stdio.h>

int main(int argc, char** argv) {
    // Initialize the MPI environment
    MPI_Init(NULL, NULL);

    // Get the number of processes
    int world_size;
    MPI_Comm_size(MPI_COMM_WORLD, &world_size);

    // Get the rank of the process
    int world_rank;
    MPI_Comm_rank(MPI_COMM_WORLD, &world_rank);

    // Get the name of the processor
    char processor_name[MPI_MAX_PROCESSOR_NAME];
    int name_len;
    MPI_Get_processor_name(processor_name, &name_len);

    // Print off a hello world message
    printf("Hello world from processor %s, rank %d out of %d processors\n",
           processor_name, world_rank, world_size);

    // Finalize the MPI environment.
    MPI_Finalize();
}

И я попытался скомпилировать это так mpicc mpi_implementation.c. Пока все хорошо. Проблема в том, что когда я запускаю его, используя mpiexec -np 4 ./a.out, я получаю следующий вывод:

Hello world from processor grodeBase, rank 0 out of 1 processors
Hello world from processor grodeBase, rank 0 out of 1 processors
Hello world from processor grodeBase, rank 0 out of 1 processors
Hello world from processor grodeBase, rank 0 out of 1 processors

Практически это верно, поскольку у меня только один процессор, но я хочу запустить программу на многих ядрахи я понятия не имею, как это сделать. Это происходит автоматически, а я просто не вижу этого? Есть ли способ убедиться, что все мои ядра используются? А также, как я могу обратиться к одному из них конкретно?

PS Если вам нужна дополнительная информация, дайте мне знать.

...