PARALLEL.RU

Дискуссионный клуб по параллельным вычислениям
Текущее время: 21 июл 18 9:00

Часовой пояс: UTC + 4 часа [ Летнее время ]




Начать новую тему Ответить на тему  [ Сообщений: 4 ] 
Автор Сообщение
СообщениеДобавлено: 3 дек 11 1:51 
Не в сети

Зарегистрирован: 3 дек 11 0:45
Сообщения: 13
Доброго времени суток
Решил поэкспериментировать с параллельными вычислениями. На компьютере при помощи Virtual Box собрал виртуальную сеть из W Vista, w2k3, Linux OpenSuse 11.0, двух FreeBSD 7.0. Хостовая машина w2k3. На все машины установил MPICH2-1.4.1p1
Для теста пока использовал простейший "Hello, World!":
Код:
#include <stddef.h>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include "mpi.h"
int main(int argc, char **argv)
{
  char message[20];
  int  i, rank, size, type = 99;
  MPI_Status status;    
  MPI_Init(&argc, &argv);
  MPI_Comm_size(MPI_COMM_WORLD, &size);
  MPI_Comm_rank(MPI_COMM_WORLD, &rank); 
 if (rank == 0)
  {
    strcpy(message, "Hello, World!");
    for (i = 1; i < size; i++)       
       MPI_Send(message, 14, MPI_CHAR, i, type, MPI_COMM_WORLD);      
      }
  else
     MPI_Recv(message, 20, MPI_CHAR, 0, type, MPI_COMM_WORLD, &status);
  printf( "Message from process = %d : %.14s\n", rank,message);
  MPI_Finalize();
  return 0;
}

На данный момент тест без проблем выполняется на всех машинах, кроме FreeBSD. На FreeBSD ситуация следующая:
1. При запуске теста на обоих машинах с FreeBSD с любой из машин виртуальной сети тест выполняется.
2. При запуске, когда первый (нулевой) процесс выполняется под FreeBSD, а второй на любой машине с Windows тест выполняется.
3. При обратном же запуске, когда нулевой процесс выполняется под Виндоус, а следующий под ФриБСД, система входит в бесконечное ожидание. Никакие сообщения не выводятся. После прекращения выполнения по Ctrl+C выводится статус завершения процессов. Для процесса под Виндоус 123, для процесса под ФриБСД -2.
4. При запуске, когда нулевой процесс выполняется под Линукс, а следующий под ФриБСД тест выполняется.
5. При обратном запуске выполнение завершается с ошибкой:
Цитата:
Fatal error in MPI_Send: Other MPI error, error stack:
MPI_Send(173)...............................: MPI_Send(buf=0xbfbfec64, count=14, MPI_CHAR, dest=1, tag=99, MPI_COMM_WORLD) failed
MPIDI_CH3i_Progress_wait(213)...............: an error occurred while handling an event returned by MPIDU_Sock_Wait()
MPIDI_CH3I_Progress_handle_sock_event(629)..:
MPIDI_CH3_Sockconn_handle_connect_event(597): [ch3:sock] failed to connnect to remote process
MPIDU_Sock_post_connect_ifaddr(174).........: unexpected operating system error (set=0,sock=1,errno=49:Can't assign requested address)

job aborted:
rank: node: exit code[: error message]
0: 192.168.244.5: -2: Fatal error in MPI_Send: Other MPI error, error stack:
MPI_Send(173)...............................: MPI_Send(buf=0xbfbfec64, count=14, MPI_CHAR, dest=1, tag=99, MPI_COMM_WORLD) failed
MPIDI_CH3i_Progress_wait(213)...............: an error occurred while handling an event returned by MPIDU_Sock_Wait()
MPIDI_CH3I_Progress_handle_sock_event(629)..:
MPIDI_CH3_Sockconn_handle_connect_event(597): [ch3:sock] failed to connnect to remote process
MPIDU_Sock_post_connect_ifaddr(174).........: unexpected operating system error (set=0,sock=1,errno=49:Can't assign requested address)
1: 192.168.244.2: -2

Т.е., если кратко, при исполнении теста на ФриБСД и Виндоус благополучно проходит отправка межпроцессных сообщений с ФриБСД и их приём процессом под Виндоус. Но обратная операция не проходит и происходит зависание в ожидании. При запуске же теста на ФриБСД и Линукс ситуация противоположная. Отправка сообщений процессом под ФриБСД завершается ошибкой. Но приём сообщений процессом под ФриБСД работает.
Файрволы на всех машинах отключени, антивирусы не установлены. Имена и адреса всех машин прописаны в hosts на всех системах. Пинг по адресам и именам везде проходит. Для машины с Линуксом пробовал перейти на второй уровень запуска, с него запустив поддержку сети и smpd, на результаты выполнения это не повлияло.
На Юниксовых системах MPICH2 сконфигурирован:
./configure --with-device=ch3:sock --with-pm=smpd --with-pmi=smpd --disable-fc --disable-f77
Для запуска mpiexec использовались опции: -plaintext -channel sock
Прошу поделиться соображениями по решению данной проблемы


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: 4 дек 11 18:54 
Не в сети

Зарегистрирован: 2 ноя 11 19:40
Сообщения: 26
Откуда: Владивосток
Здесь пишут, что
MPICH2 currently does not support heterogeneous platforms. Users who need to run applications on such platforms are advised to use MPICH-1 instead.

Либо пробовать MPICH-1, либо еще попробовать пересобрать без указания device.
Поидее в виртуалке у вас нет других интерефейсов кроме virtual ethernet, конфигуратор должен определить работу через сокеты.

Кстати на этой же страниц указана на скачивание под FreeBSD ветка 1.3 (предыдущая). Видимо разработчики забросили этот порт.


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: 4 дек 11 21:18 
Не в сети

Зарегистрирован: 3 дек 11 0:45
Сообщения: 13
Коммуникация Linux-FreeBSD заработала. Запуск smpd -d 3 помог выявить источник проблемы. При автоматическом конфигурировании сетевого интерфейса OpenSUSE конфигуратор добовлял в /etc/hosts запись типа:
127.0.0.2 opensuse
192.168.56.3 opensuse
opensuse - здесь имя узла с opensuse
процессы же передавали 127.0.0.2 в качестве своего адреса другой системе. И естественно, она с ними установить соединение не могла. Причём, происходило это только при соединении с юниксовой системой. При соединении с виндоусом передавался адрес сетевого интерфейса. Комментирование петли привело к нормальной коммуникации с фрибсд и ещё одной системой под линуксом.
А коммуникация виндоус-фрибсд по прежнему работает в одну сторону
Насчёт гетерогенных платформ, то где-то в у разработчиков читал, что их неподдержка относится к платформам 32-64, коммуникацию между которыми поддерживал MPICH1, но в следствии дополнительных накладных расходов на преобразование данных в MPICH2 эта поддержка реализована пока не была. А про поддержку систем Linux-Windows у них же читал, что такая связка возможна. Для этого только надо в линукс использовать менеджер процессов smpd, так как только он реализован для виндоус, и для smpd в качестве интерфейса межпроцессного взаимодействия указать интерфейс smpd, так как по умолчанию там используется другой. И в качестве каналов надо использовать sock || nemesis. У меня получилась коммуникация по сок, с немезисом зависало в ожидании.


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: 4 дек 11 22:01 
Не в сети

Зарегистрирован: 3 дек 11 0:45
Сообщения: 13
Коммуникация FreeBSD-Windows заработала в обе стороны.
Причина неработоспособности была такая:
При конфигурировании сетевого интерфейса ФриБСД без надобности указал домен workgroup. И конфигуратор внёс в /etc/hosts следующие записи:
192.168.56.6 freebsd.workgroup
192.168.56.6 freebsd
Ну я подумал, пусть первая запись будет, чем она повредит?
Как то не подумав, что имя машины будет freebsd.workgroup. И не догадался вызвать hostname. Под линуксом системы тоже настроены как члены домена workgroup, их имена возвращаются без этого суффикса. А на машине с виндоус в хостс запись, соответствующая первой строчке добавлена не была. И mpiexec зависал в ожидании. Добавление её в хостс на виндоус решило проблему. Причём, на системах с линуксом эта запись также не добавлена в хостс, но коммуникация между ними и фрибсд работает в обе стороны. При межпроцессной коммуникации используются как имена систем, так и адреса, и под виндоусом и юниксом эта информация обрабатывается по разному.

И ещё насчёт файрволов.
У меня нормальная комманикация наступает только при снятии галочки с используемого виртуального интерфейса. Добавление в список исключений smpd, mpiexec, и самой исполняемой программы не помогает. Прочитал, что ряд используемых портов можно задать через установку переменной окружения MPICH_PORT_RANGE, но что-то результата не заметил. Wireshark по прежнему показывает интенсивное использование портов за пределами ряда.


Вернуться к началу
 Профиль  
 
Показать сообщения за:  Поле сортировки  
Начать новую тему Ответить на тему  [ Сообщений: 4 ] 

Часовой пояс: UTC + 4 часа [ Летнее время ]


Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 2


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Найти:
Перейти:  
cron
Создано на основе phpBB® Forum Software © phpBB Group
Русская поддержка phpBB