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

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

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

Восстановить пароль

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

Ответ
 
Опции темы Поиск в этой теме
Старый 07.03.2015, 23:30   #1
Questionier
Пользователь
 
Регистрация: 13.10.2014
Сообщений: 32
По умолчанию Помогите, пожалуйста, исправить ошибки.

Здравствуйте, у меня тут пример 1.3 из книги Корнеева В.Д. Параллельное программирование в MPI.
Значит переписал пример из книги в Visual Studio 2007 и запустил. Вышло 4 ошибки - подскажите, пожалуйста, как их исправить?(У меня на компьютере стоит Windows XP и MPICH2)
________Перечень ошибок_______________
Цитата:
Error 1 error C3861: 'MPI_DIMS_CREATE': identifier not found
Error 2 error C2664: 'MPI_Cart_create' : cannot convert parameter 6 from 'MPI_Comm' to 'MPI_Comm *'
Error 3 error C2664: 'MPI_Cart_shift' : cannot convert parameter 4 from 'int' to 'int *'
Error 4 error C2664: 'MPI_Cart_shift' : cannot convert parameter 4 from 'int' to 'int *'
________Код программы_________________
Код:
#include "stdafx.h"
#include "mpi.h"
#include "stdio.h"
#include "iostream"
int main(int argc, char **argv)
{ int size, rank, coords[2], source, dest;
int dims[2];
int reorder, periods[2];
MPI_Comm comm_2d;
//Инициализация библиотеки MPI
MPI_Init(&argc, &argv);
//Каждая ветвь определяет размер системы, если он больше 12, то завершение
MPI_Comm_size(MPI_COMM_WORLD,&size);
if (size > 12)
MPI_Abort(MPI_COMM_WORLD,MPI_ERR_OTHER);
//Каждая ветвь определяет свой номер
MPI_Comm_rank(MPI_COMM_WORLD,&rank);
//Создание топологии "двумерная решетка" с количеством компьютеров 12
dims[0]=3;
dims[1]=0;
//Делаем разбивку всех компьютеров на двумерную решетку, т.е. с помощью функции
//MPI_DIMS_CREATE заполняем массив размерностей dims, с учетом того, что dims[0]=3,
//запишет dims[1]=4
MPI_DIMS_CREATE(size,2,dims);
periods[0]=0; // грани вдоль 0-координаты не замкнуты
periods[1]=0; // грани вдоль 1-координаты не замкнуты
reorder=0; // в новой топологии номера компьютеров останутся прежними
MPI_Cart_create(MPI_COMM_WORLD, 2, dims, periods, reorder,comm_2d);
// 12 процессов из MPI_COMM_WORLD объединяются в группу comm_2d,
// с рангами как в MPI_COMM_WORLD 
// Находим декартовы координаты */
MPI_Cart_coords(comm_2d, rank, 2, coords);
// Каждый компьютер вычисляет соседей source и dest вдоль
// нулевой координаты
MPI_Cart_shift(comm_2d, 0, 1, source, dest);
// Каждый компьютер вычисляет соседей source и dest вдоль
// первой координаты 
MPI_Cart_shift(comm_2d, 1, 1, source, dest);
// Продолжение программы 
MPI_Finalize();
system("PAUSE");
return 0;
}

Последний раз редактировалось Stilet; 08.03.2015 в 00:28.
Questionier вне форума Ответить с цитированием
Старый 08.03.2015, 00:05   #2
Smogg
Участник клуба
 
Регистрация: 14.06.2011
Сообщений: 1,138
По умолчанию

Цитата:
Error 1 error C3861: 'MPI_DIMS_CREATE': identifier not found
Знач, "mpi.h" инклюдится обновленной версии. Смотрите, как эту функцию переименовали/заменили.
Цитата:
Error 2 error C2664: 'MPI_Cart_create' : cannot convert parameter 6 from 'MPI_Comm' to 'MPI_Comm *'
Error 3 error C2664: 'MPI_Cart_shift' : cannot convert parameter 4 from 'int' to 'int *'
Error 4 error C2664: 'MPI_Cart_shift' : cannot convert parameter 4 from 'int' to 'int *'
Гугель говорит, что объявление функции такое:
Код:
int MPI_Cart_create(MPI_Comm comm_old, int ndims, const int dims[], const int periods[], int reorder, MPI_Comm *comm_cart)
Следите за типом параметров, которые передаете: 'int' != 'int *'.

Попробуйте изменить на нечто подобное:
Код:
MPI_Cart_create(MPI_COMM_WORLD, 2, dims, periods, reorder, &comm_2d);
Smogg вне форума Ответить с цитированием
Старый 08.03.2015, 11:32   #3
Questionier
Пользователь
 
Регистрация: 13.10.2014
Сообщений: 32
По умолчанию

Спасибо, сделал такие изменения и заработало.
Код:
MPI_Dims_create(size,2,dims);
Код:
MPI_Cart_create(MPI_COMM_WORLD, 2, dims, periods, reorder,&comm_2d);
Код:
MPI_Cart_shift(comm_2d, 0, 1, &source, &dest);
Код:
MPI_Cart_shift(comm_2d, 1, 1, &source, &dest);
Questionier вне форума Ответить с цитированием
Старый 08.03.2015, 11:34   #4
Questionier
Пользователь
 
Регистрация: 13.10.2014
Сообщений: 32
По умолчанию

Конечно, далеко не факт что правильно, но заработало)))
Questionier вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Помогите, пожалуйста, исправить ошибки в программе thedgehog Паскаль, Turbo Pascal, PascalABC.NET 1 16.12.2014 10:40
Помогите пожалуйста исправить ошибки в коде Nata Golden rose Общие вопросы C/C++ 6 18.05.2014 23:28
Помогите исправить ошибки Каталина Visual C++ 8 22.10.2013 12:55
Помогите, пожалуйста, не могу исправить ошибки bunya Общие вопросы C/C++ 7 14.01.2009 22:28