При попытке запустить первый пример из учебника boost :: mpi я не смог запустить более двух машин.В частности, это, кажется, работает нормально:
mpirun -hostfile hostnames -np 4 boost1
с каждым именем хоста в именах хостов как <node_name> slots=2 max_slots=2
.Но когда я увеличиваю количество процессов до 5, он просто зависает.Я уменьшил число slots
/ max_slots
до 1 с тем же результатом, когда я превышаю 2 машины.На узлах это отображается в списке заданий:
<user> Ss orted --daemonize -mca ess env -mca orte_ess_jobid 388497408 \
-mca orte_ess_vpid 2 -mca orte_ess_num_procs 3 -hnp-uri \
388497408.0;tcp://<node_ip>:48823
Кроме того, когда я его убиваю, я получаю следующее сообщение:
node2- daemon did not report back when launched
node3- daemon did not report back when launched
Кластер настроен с помощью *Доступны библиотеки 1015 * и boost
на диске, смонтированном по NFS.Я захожу в тупик с NFS?Или что-то еще происходит?
Обновление: Для ясности, программа буста, которую я запускаю,
#include <boost/mpi/environment.hpp>
#include <boost/mpi/communicator.hpp>
#include <iostream>
namespace mpi = boost::mpi;
int main(int argc, char* argv[])
{
mpi::environment env(argc, argv);
mpi::communicator world;
std::cout << "I am process " << world.rank() << " of " << world.size()
<< "." << std::endl;
return 0;
}
Из рекомендаций @Dirk Eddelbuettel, я скомпилировал и запустил пример mpi hello_c.c
, как показано ниже
#include <stdio.h>
#include "mpi.h"
int main(int argc, char* argv[])
{
int rank, size;
MPI_Init(&argc, &argv);
MPI_Comm_rank(MPI_COMM_WORLD, &rank);
MPI_Comm_size(MPI_COMM_WORLD, &size);
printf("Hello, world, I am %d of %d\n", rank, size);
MPI_Barrier(MPI_COMM_WORLD);
MPI_Finalize();
return 0;
}
Он отлично работает на одной машине с несколькими процессами, включая sshing на любой из узлов и работает.Каждый вычислительный узел идентичен рабочему и mpi / boost каталогам, смонтированным с удаленной машины через NFS.При запуске программы boost с файлового сервера (идентичного узлу, кроме boost / mpi локального), я могу работать на двух удаленных узлах.Однако для «hello world», запустив команду mpirun -H node1,node2 -np 12 ./hello
, я получаю
[<node name>][[2771,1],<process #>] \
[btl_tcp_endpoint.c:638:mca_btl_tcp_endpoint_complete_connect] \
connect() to <node-ip> failed: No route to host (113)
, пока печатаются все «Hello World's», и в конце она зависает.Однако поведение при запуске с вычислительного узла на удаленном узле отличается.
И "Hello world", и код повышения просто зависают с mpirun -H node1 -np 12 ./hello
при запуске из узла 2 и наоборот.(Зависание в том же смысле, что и выше: orted работает на удаленной машине, но не общается обратно.)
Тот факт, что поведение отличается от работы на файловом сервере, где библиотеки mpi являются локальными по сравнению с вычислительным узломпредполагает, что я могу столкнуться с тупиком NFS.Это разумный вывод?Предполагая, что это так, как я могу настроить mpi, чтобы позволить мне статически связать его?Кроме того, я не знаю, что делать с ошибкой, которую я получаю при запуске с файлового сервера, какие-либо мысли?