PARALLEL.RU

Дискуссионный клуб по параллельным вычислениям
Текущее время: 8 дек 19 23:57

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




Начать новую тему Ответить на тему  [ Сообщений: 5 ] 
Автор Сообщение
 Заголовок сообщения: Ошибка в функции Sendrecv. MPICH win32 1.2.5
СообщениеДобавлено: 17 мар 05 22:08 
Не в сети

Зарегистрирован: 16 фев 05 21:36
Сообщения: 16
Откуда: Москва & Leeds
MPICH 1.2.5 win32

Встретил следующую ошибку:
Пересыла данные с помощью функции
Sendrecv данные из i-го -> i-1 and i+1
и получал обратно.

Встретил плавающую ошибку,
которая появлялась на различных шагах по времени (1, 6, 23... или 7,8, 13... и так далее)
(запускал обин и тот же бинарник, серии по 5 раз)

ошибка встречалась под разными компиляторами
gcc, MSVC, intel C++...

выличилась после замены функции
Sendrecv -> Send & Recv по отдельности


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: 21 мар 05 12:10 
Не в сети

Зарегистрирован: 11 дек 02 19:37
Сообщения: 872
Откуда: НИВЦ МГУ
А можно об этой ошибке попобдробнее? Как был устроен обмен?


Вернуться к началу
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: 21 мар 05 18:49 
Не в сети

Зарегистрирован: 16 фев 05 21:36
Сообщения: 16
Откуда: Москва & Leeds
Можно :D

привожу кусок кода:

typedef struct
{
double D[ N_mpi ];
double S[ N_mpi ];
double tau[ N_mpi ];
int j;
} mpi_buffer;

mpi_buffer buf_begin, buf_end;

MPI_Datatype mpi_bufferType;

int len[5] = { N_mpi, N_mpi, N_mpi, 1, 1 };
MPI_Aint pos[5] = { offsetof(mpi_buffer,D), offsetof(mpi_buffer,S),
offsetof(mpi_buffer,tau), offsetof(mpi_buffer,j),
sizeof(mpi_buffer) };
MPI_Datatype typ[5] = { MPI_DOUBLE,MPI_DOUBLE,MPI_DOUBLE,MPI_INT,MPI_UB };

MPI_Type_struct( 5, len, pos, typ, &mpi_bufferType );
MPI_Type_commit( &mpi_bufferType );

пересылка осуществлялась так
(0 и n-1 процесс принимали и посылали только конец и начало соответственно)

MPI_Sendrecv( &buf_begin, 1, mpi_bufferType, rank-1, 1,
&buf_begin, 1, mpi_bufferType, rank-1, 0, MPI_COMM_WORLD, &status );

MPI_Sendrecv( &buf_end , 1, mpi_bufferType, rank+1, 0,
&buf_end , 1, mpi_bufferType, rank+1, 1, MPI_COMM_WORLD, &status );

Замана функции MPI_Sendrecv на MPI_Send и MPI_recv исправили возникающие ошибки.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: 21 мар 05 19:06 
Не в сети

Зарегистрирован: 18 ноя 02 16:40
Сообщения: 168
Откуда: Москва
BMV писал(а):
MPI_Sendrecv( &buf_begin, 1, mpi_bufferType, rank-1, 1,
&buf_begin, 1, mpi_bufferType, rank-1, 0, MPI_COMM_WORLD, &status );

В стандарте MPI сказано, что буфера посылки и приема не должны пересекаться. Если это требуется, можно использовать функцию MPI_Sendrecv_replace.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: 21 мар 05 19:21 
Не в сети

Зарегистрирован: 16 фев 05 21:36
Сообщения: 16
Откуда: Москва & Leeds
возможно в этом причина,
Спасибо.


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

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


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

Сейчас этот форум просматривают: Google [Bot] и гости: 3


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

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