25
fprintf(fd,"%d ",array[i][j]);
fprintf(fd,"\n");
}
fclose(fd);
}
Файл slave.c
#include "shared.h"
int main(int argc, char *argv[])
{
int myrank;
MPI_Init(&argc,&argv);
MPI_Comm_rank(MPI_COMM_WORLD,&myrank);
printf("Slave rank %d started.\n",myrank);
MPI_Status status;
int master;
int tmp_begin;
int tmp_end;
//получаем данные
MPI_Recv(&tmp_begin,1,MPI_INT,MPI_ANY_SOURCE,0,MPI_COMM_WORLD,&status);
master = status.MPI_SOURCE;
printf("Slave rank %d has found master rank %d.\n",myrank,master);
MPI_Recv(&tmp_end,1,MPI_INT,master,1,MPI_COMM_WORLD,&status);
int tmp_size = (tmp_end-tmp_begin)*SIZE*sizeof(int);
int * tmp_arr = malloc(tmp_size);
MPI_Recv(tmp_arr,tmp_size,MPI_INT,master,2,MPI_COMM_WORLD,&status);
printf("Slave rank %d has received data from master.\n",myrank);
////////////////////////
//делаем с ними НИЧЕГО//
////////////////////////
//посылаем обратно
MPI_Send(&tmp_begin,1,MPI_INT,master,0,MPI_COMM_WORLD);
MPI_Send(&tmp_end,1,MPI_INT,master,1,MPI_COMM_WORLD);
MPI_Send(tmp_arr,tmp_size/sizeof(int),MPI_INT,master,2,MPI_COMM_WORLD);
printf("Slave rank %d has sent data to master and ended.\n",myrank);
free(tmp_arr);
MPI_Finalize();
return 0;
}
Задание №3. Написать реализацию набора конфигурационных параметров для многих
одновременно работающих экземпляров программы. Набор параметров задается некоторой
структурой данных и хранится в разделяемой памяти. Блок разделяемой памяти создается
при запуске первого экземпляра программы и заполняется из файла. Перед окончанием
работы последнего экземпляра набор параметров сохраняется в файл, а блок разделяемой
памяти удаляется. Программа должна обеспечивать основные функции работы с набором
параметров (прочитать и изменить элемент), причем в случае изменения данных одним из
экземпляров, он оповещает все остальные экземпляры с помощью сигнала.
Алгоритм
Первый из запущенных процессов считывает из файла input.txt параметры – числа
epsilon, n, x. Epsilon – требуемая точность, n – степень, x – начальное значение. Программа