Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 22.12.2013, 02:28   #1
caliente
Пользователь
 
Аватар для caliente
 
Регистрация: 20.02.2013
Сообщений: 11
По умолчанию MPI (C++)

Всем доброго времени суток. Помогите пожалуйста найти ошибку. При запуске программы ничего не происходит, только курсор мерцает. Не могу понять где намудрил в буфере или в отправке и приеме.
Задание:
В каждом подчиненном процессе дано целое число N, причем для одного процесса это число больше нуля, а для остальных равно нулю. В процессе с ненулевым N дан также набор из N чисел. Переслать данный набор чисел в главный процесс и вывести в главном процессе полученные числа и ранг процесса, переславшего этот набор. При приеме сообщения использовать параметр MPI_ANY_SOURCE.
Код:
#include "mpi.h"
#include <stdio.h>
#include <stdlib.h>

int main(int argc,char *argv[])
{ int myid, numprocs;
int namelen;
char processor_name[MPI_MAX_PROCESSOR_NAME];
MPI_Init(&argc,&argv);
MPI_Comm_size(MPI_COMM_WORLD,&numprocs);
MPI_Comm_rank(MPI_COMM_WORLD,&myid);
MPI_Get_processor_name(processor_name,&namelen);
if(myid==0){
	int M;
	MPI_Status status;
	MPI_Probe(MPI_ANY_SOURCE,	0, MPI_COMM_WORLD, &status);
	MPI_Get_count(&status, MPI_INT, &M);
	//MPI_Recv(&M, 1, MPI_INT, MPI_ANY_SOURCE, 0, MPI_COMM_WORLD, &status);
	int *buf=(int*)malloc(M*sizeof(int));
	MPI_Recv(buf, M, MPI_INT, MPI_ANY_SOURCE, 0, MPI_COMM_WORLD, &status);
	int R=status.MPI_SOURCE;
	fprintf(stdout,"process %d recived %d numbers from process %d \n",myid, M, R);
	for(int i=0; i<M; i++)
		fprintf(stdout, "%d\n", *(buf+i));
	fflush(stdout);
}
else{
	if(myid==3){int N;
	srand(myid);
	N=(int)(8*rand()/RAND_MAX+1);
	int*A=(int*)malloc(N*sizeof(int));
	for(int i=0;i<N;i++)
		*(A+i)=rand();
	//MPI_Send(&N, 1, MPI_INT, 0, 0, MPI_COMM_WORLD);
	MPI_Send(A, N, MPI_INT, 0, 0, MPI_COMM_WORLD);
	}
}
MPI_Finalize();
return 0;
}
caliente вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
MPI Артём Волжанкин Помощь студентам 0 22.07.2013 17:32
MPI koldunja C++ Builder 0 13.01.2013 14:17
MPI Symple me Visual C++ 7 10.10.2012 14:51
MPI Sparky Помощь студентам 0 21.05.2012 14:29
mpi skrudjmagdak C++ Builder 4 23.03.2010 19:05