2015-09-10 3 views
0

Я следую исходному коду в своих документах, но при попытке использовать и MPI_Recv() из библиотеки Open MPI я сталкиваюсь с ошибкой. У меня есть googled и читать некоторые темы на этом сайте, но я не могу найти решение для решения моей ошибки. Это моя ошибка:Ошибка при использовании MPI_SEND и MPI_RECV в Windows

mca_oob_tcp_msg_recv: readv faled : Unknown error (108) 

Здесь детали изображения:

Error message

И это код, который я следующее:

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

int main(int argc, char **argv) { 
int rank, size, mesg, tag = 123; 
MPI_Status status; 

MPI_Init(&argv, &argv); 
MPI_Comm_size(MPI_COMM_WORLD, &size); 
MPI_Comm_rank(MPI_COMM_WORLD, &rank); 
if (size < 2) { 
    printf("Need at least 2 processes!\n"); 
} else if (rank == 0) { 
    mesg = 11; 
    MPI_Send(&mesg,1,MPI_INT,1,tag,MPI_COMM_WORLD); 
    MPI_Recv(&mesg,1,MPI_INT,1,tag,MPI_COMM_WORLD,&status); 
    printf("Rank 0 received %d from rank 1\n",mesg); 
} else if (rank == 1) { 
    MPI_Recv(&mesg,1,MPI_INT,0,tag,MPI_COMM_WORLD,&status); 
    printf("Rank 1 received %d from rank 0/n",mesg); 
    mesg = 42; 
    MPI_Send(&mesg,1,MPI_INT,0,tag,MPI_COMM_WORLD); 
} 
MPI_Finalize(); 
return 0; 
} 

Я заметил все MPI_Send() , и MPI_Recv(), и моя программа сработала. В другой руке я прокомментировал либо MPI_Send(), либо MPI_Recv(), и у меня все еще есть эта ошибка. Поэтому я думаю, что проблема заключается в функциях MPI_Send() и MPI_Recv().

P.S .: Я использую Open MPI v1.6 для ОС Windows 8.1.

+0

Попробуйте отключить UAC (контроль учетных записей пользователей) и проверьте, не устраняет проблему. Открытый MPI больше не поддерживается в Windows, и вы можете попробовать другую реализацию MPI, например. MPICH или MS-MPI. –

+0

Hi Hristo, я отключил UAC, изменив EnabledLUA в реестре. Затем я заново запускаю свою программу, и я все еще получаю эту ошибку. –

ответ

0

Комплект MPI_STATUS_IGNORED вместо &status в MPI_Recv в обоих местах.

+0

Привет, я обновил следующее: 'MPI_Recv (MPI_STATUS_IGNORE, 1, MPI_INT, 1, tag, MPI_COMM_WORLD, & status);' Но это не работает, и я все равно получаю эту ошибку. –

+0

Добавьте 'MPI_STATUS_IGNORED' вместо' & status', не '& mesg' (вроде этого' MPI_Recv (& mesg, 1, MPI_INT, 1, tag, MPI_COMM_WORLD, MPI_STATUS_IGNORE); ') и в' printf («Ранг 1 получен% d из ранга 0/n», MESG); '. Он должен быть скорректирован как 'printf (« Ранг 1 получил% d из ранга 0 \ n », mesg);' – shan1024

+0

Привет, спасибо за помощь. Я обновил 'MPI_Recv (& mesg, 1, MPI_INT, 0, tag, MPI_COMM_WORLD, MPI_STATUS_IGNORE);' и о printf, в моем исходном коде '\ n', я не знаю, почему, когда я отправляю его здесь, он становится '/ n'. Я тестировал с параметром, как вы говорите, но я все еще получаю эту ошибку. –

1

Вы передаете неправильные аргументы MPI_Init (два раза argv, вместо argc и argv один раз). Похоже, что отправляет и получает на самом деле взгляд. Но есть одна опечатка в одной из ваших отпечатков с /n вместо \n.

Вот что работает для меня (на MacOSX, хотя):

int main(int argc, char **argv) { 
int rank, size, mesg, tag = 123; 
MPI_Status status; 

MPI_Init(&argc, &argv); 
MPI_Comm_size(MPI_COMM_WORLD, &size); 
MPI_Comm_rank(MPI_COMM_WORLD, &rank); 
if (size < 2) { 
    printf("Need at least 2 processes!\n"); 
} else if (rank == 0) { 
    mesg = 11; 
    MPI_Send(&mesg,1,MPI_INT,1,tag,MPI_COMM_WORLD); 
    MPI_Recv(&mesg,1,MPI_INT,1,tag,MPI_COMM_WORLD,&status); 
    printf("Rank 0 received %d from rank 1\n",mesg); 
} else if (rank == 1) { 
    MPI_Recv(&mesg,1,MPI_INT,0,tag,MPI_COMM_WORLD,&status); 
    printf("Rank 1 received %d from rank 0\n",mesg); 
    mesg = 42; 
    MPI_Send(&mesg,1,MPI_INT,0,tag,MPI_COMM_WORLD); 
} 
MPI_Finalize(); 
return 0; 
} 

Если это не работает, я предполагаю, что ваша операционная система не позволяет процессы взаимодействуют друг с другом с помощью метода, выбранного OpenMPI.

+0

Привет, спасибо за ответ. Я обновил свой код, как вы говорите, но он все еще показывает эту ошибку. –

+0

Ну, тогда, я думаю, единственное, что я могу сказать, это, по-видимому, законный MPI, который работает как минимум на других системах. – haraldkl

+0

Hi haraldkl, как вы говорите, может быть, проблема в ОС, я пробую этот код с ОС Linux, и он отлично работает. Seem OpenMPI несовместим с Windows 8.1. Спасибо за помощь. –

Смежные вопросы