Неправильное число процессоров в mpi - PullRequest
2 голосов
/ 03 апреля 2012

Извините, я уверен, что сделал глупую ошибку, но не сработало.

Я собираю простой привет mpi world:

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

int main (argc, argv)
     int argc;
     char *argv[];
{
  int rank, size;

  MPI_Init (&argc, &argv);      /* starts MPI */
  MPI_Comm_rank (MPI_COMM_WORLD, &rank);        /* get current process id */
  MPI_Comm_size (MPI_COMM_WORLD, &size);        /* get number of processes */
  printf( "Hello world from process %d of %d\n", rank, size );
  MPI_Finalize();
  return 0;
}

И

> mpicc -o hello_world_c hello_world.c
> mpirun -np 4 hello_world_c

Но возвращает:

Hello world from process 0 of 1
Hello world from process 0 of 1
Hello world from process 0 of 1
Hello world from process 0 of 1

Но мой компьютер - это ядро ​​i7 с 4 ядрами. И все вроде бы нормально, т.е. cat / proc / cpuinfo показывает 4 процессора

что происходит ??? Заранее спасибо !!!!

Ответы [ 4 ]

5 голосов
/ 03 апреля 2012

В вашем коде нет ничего плохого.Единственная проблема, которая может быть связана с вашей установкой mpi.

Примечание:

Существует разница между процессором и ядром.это не то же самое.

1 голос
/ 09 апреля 2014

В этом случае вам нужен mpiexec из пакета 'mpich2'.

Во-первых, удалите все пакеты mpi, которые установлены на вашем компьютере. Если ваш сервер Ubuntu, вы можете использовать команду:

sudo apt-get purge mpi mpich2 openmpi-common

Чтобы убедиться, что вы удалили все пакеты, попробуйте эту команду

which mpiexec

Если вы ничего не получили в ответ, вы уже удалили все пакеты.

Затем переустановите пакет mpich2

sudo apt-get install mpich2

Попробуйте скомпилировать и снова запустить свой код! Надеюсь, что это поможет!

0 голосов
/ 12 февраля 2017

УСТАНОВИТЬ

sudo apt-get install libopenmpi-dev openmpi-bin openmpi-doc

Теперь скомпилировать и выполнить код

enter image description here

0 голосов
/ 03 апреля 2012

Я не знаю, как вы можете скомпилировать его:

 int main (argc, argv)
 int argc;
 char *argv[];

будет изменено на

 int main (int argc, char *argv[])

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

...