MPI распознает только 1 процесс в C?

Вопрос: Я изучаю MPI для параллельного программирования в C, и я использую процессор с 4 ядрами. Я пытаюсь сделать пример из учебника, в котором должен быть выход: Hello world! I'm process 0 out of 4 processes Hello world! I'm process 2 out of 4 processes Hello world! I'm process 1 out of 4 processes Hello

Вопрос:

Я изучаю MPI для параллельного программирования в C, и я использую процессор с 4 ядрами. Я пытаюсь сделать пример из учебника, в котором должен быть выход:

Hello world! I’m process 0 out of 4 processes Hello world! I’m process 2 out of 4 processes Hello world! I’m process 1 out of 4 processes Hello world! I’m process 3 out of 4 processes

В любом порядке.

Вот мой код:

#include <stdio.h> #include <mpi.h> int main(int argc, char** argv) { int ierr, num_procs, my_id; ierr = MPI_Init(&argc, &argv); ierr = MPI_Comm_rank(MPI_COMM_WORLD, &my_id); ierr = MPI_Comm_size(MPI_COMM_WORLD, &num_procs); printf(«Hello world! I’m process %i out of %i processesn», my_id, num_procs); ierr = MPI_Finalize(); }

Я скомпилирую его, используя:

mpicc helloworld.c -o helloworld

И я запускаю его, используя:

mpirun -np 4 helloworld

Это то, что выдается:

Hello world! I’m process 0 out of 1 processes Hello world! I’m process 0 out of 1 processes Hello world! I’m process 0 out of 1 processes Hello world! I’m process 0 out of 1 processes

Он выводит его 4 раза, что является относительно хорошей новостью, я думаю, но программа не распознает количество потоков и каждого идентификатора потока.

Это даже работает параллельно или просто работает 4 раза в серийном режиме? Как я могу заставить программу правильно определить количество потоков и идентификатор потока?

Заранее спасибо!

Ответ №1mpicc helloworld.c -o helloworld mpirun -np 4 helloworld Hello world! I’m process 0 out of 1 processes Hello world! I’m process 0 out of 1 processes Hello world! I’m process 0 out of 1 processes Hello world! I’m process 0 out of 1 processes

Эта последовательность наглядно показывает нам, что среда выполнения MPI не смогла обнаружить параллельный запуск, вероятно, из-за неправильной конфигурации: ваш mpicc – из одной реализации MPI, а ваш mpirun – из другого. Например, как MPICH и OpenMPI имеют mpicc скрипты для компиляции программ MPI, но их mpiexec/mpirun программы несовместимы. Скомпилируйте с помощью MPICH, начиная с запуска OpenMPI и среды исполнения MPICH, не будут получать требуемые переменные среды для определения параллельного запуска и его параметров.

Вы должны пересмотреть список установленных пакетов (dpkg -l|egrep ‘mpich|openmpi’) и проверить, какой файл из какой библиотеки (dpkg -l mpich, dpkg -l openmpi-bin; dpkg -l libmpich-dev, dpkg -l libopenmpi-dev). Ubuntu/Debian также система “альтернатив”, которые будут устанавливать символические ссылки mpicc и mpirun фактических сценариев (у ls -l/usr/bin/mpicc/usr/bin/mpirun, чтобы увидеть текущее состояние ссылок). Проверьте инструмент update-alternatives, его страницу руководства и документы, чтобы узнать, как сбросить все сценарии, названные galternatives в одну реализацию (и для нее есть графический интерфейс galternatives).

Согласно спискам файлов в пакетах, mpich и openmpi имеют варианты mpirun/mpiexec с суффиксами http://packages.ubuntu.com/yakkety/amd64/openmpi-bin/filelist http://packages.ubuntu.com/yakkety/amd64/mpich/filelist:

/usr/bin/mpiexec.openmpi /usr/bin/mpirun.openmpi /usr/bin/mpiexec.hydra /usr/bin/mpiexec.mpich /usr/bin/mpirun.mpich

Такая же ситуация для сценариев mpicc: http://packages.ubuntu.com/yakkety/amd64/libopenmpi-dev/filelist http://packages.ubuntu.com/yakkety/amd64/libmpich-dev/filelist

/usr/bin/mpicc.openmpi /usr/bin/mpicc.mpich

Всегда используйте mpicc и mpirun (или mpiexec) из той же самой реализации. Вы также можете использовать варианты с суффиксом: mpicc.openmpi & mpiexec.openmpi pair или mpicc.mpich & mpiexec.mpich pair.

И чтобы использовать некоторую реализацию MPI, вы должны полностью ее установить, как для bin, lib, так и для dev-пакетов.

Оцените статью
Добавить комментарий