Я новичок в 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 Если вам нужна дополнительная информация, дайте мне знать.