printf("\n*Количество элементов, удовлетворяющих условию: ");
printf("%2.2f", MPI_COMM_WORLD.summa);
putchar('\n');
}
break;
}
}
/////////////////////////////////////////////////////////////////////////////////////////////////
void do_server()//Функция, запрашивающая исходный диапазон. Запускается на
{ //машине, инициировавшей вычислительную задачу.
int i, j, N, K; //Эта машина становится “главной”
timeb begin;
ftime(&begin);
MPI_COMM_WORLD.time_sec = begin.time;
MPI_COMM_WORLD.time_mili = begin.millitm;
printf("*Введите нижнюю границу N: ");
scanf("%d", &N);
printf("*Введите верхнюю границу K: ");
scanf("%d", &K);
MPI_COMM_WORLD.N = N;
MPI_COMM_WORLD.K = K;
MPI_COMM_WORLD.summa = 0;
post_task();
}
/////////////////////////////////////////////////////////////////////////////////////////////////
void do_action()//Установка сессий между ветвями процесса, распределенными в кластере
{
movedata(ncb_segments[ncb_tail], ncb_offsets[ncb_tail],
FP_SEG(&MPI_COMM_WORLD.temp_ncb),
FP_OFF(&MPI_COMM_WORLD.temp_ncb), sizeof(NCB));
ncb_tail++;
if (ncb_tail == 21)
ncb_tail = 0;
switch (MPI_COMM_WORLD.temp_ncb.NCB_COMMAND) {
case LISTEN:
char call_name[16], *temp;
strcpy(call_name, MPI_COMM_WORLD.temp_ncb.NCB_CALLNAME);
listen(MPI_COMM_WORLD, "*", MPI_COMM_WORLD.name, post_handle, 20, 20);
if (!strstr(call_name, "Point№")) {
printf("Неверный вызов от %s\n",call_name);
hangup(MPI_COMM_WORLD, MPI_COMM_WORLD.temp_ncb.NCB_LSN);
return;
}
printf("Отвечаю на вызов ветви %s, установлена сессия %d\n", strip_name(call_name), MPI_COMM_WORLD.temp_ncb.NCB_LSN);
break;
case CALL: if (!MPI_COMM_WORLD.temp_ncb.NCB_CMD_CPLT)
printf("Вызов принят, номер сесии %d\n",MPI_COMM_WORLD.temp_ncb.NCB_LSN);
else
printf("Ветвь Point№%d не отвечает, код = %.2X\n", MPI_COMM_WORLD.cur, MPI_COMM_WORLD.temp_ncb.NCB_CMD_CPLT);
Уважаемый посетитель!
Чтобы распечатать файл, скачайте его (в формате Word).
Ссылка на скачивание - внизу страницы.