Контрольная работа: Паралельні обчислення з використанням MPI
У цьому прикладі всі процеси ламають той самий пароль, і новий цикл (не реалізований у прикладі) не почнеться, поки не завершать роботу всі процеси. Отже, час одного циклу визначається часом роботи процесу з максимальним рангом (тобто виконуючого підбор найбільшої довжини => перебір найбільшого числа комбінацій).
Приклад 5 показує більш зроблену систему, що читає з необхідну інформацію з файлу, і роздає кожному процесу по паролі. Процеси працюють в асинхронному режимі, зв'язуючи з головним процесом, що відіграє роль «роздавального-прийомного центра», організовуючи систему дуже схожу на «клієнта-сервер».
Завдання 2: Після вивчення коду поясніть, чому це не є системою клієнт-сервер.
===== Example5.cpp =====
#include <mpi.h>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
//типи повідомлень
#define TAG_MSG 98 // службове повідомлення – зміст перемінної – код (див. нижче)
#define TAG_SEND_NAMELEN 97 // пересилається довжина рядка імені
#define TAG_SEND_PASSLEN 96 // пересилається довжина рядка пароля
#define TAG_SEND_NAME 95 // пересилається рядок імені
#define TAG_SEND_PASS 94 // пересилається рядок імені
#define MSG_FAILURE 0 // невдача при розшифровці
#define MSG_SUCCESS 1 // успіх при розшифровці
#define MSG_READY 2 // клієнт готовий до прийому наступного пароля
#define MSG_GO_ON 3 // сигнал клієнту продовжувати роботу
#define MSG_BREAK 5 // сигнал клієнту завершити роботу
int do_decrypt_pass(int param);
int main(int argc, char* argv[])
{
int x,result;
char in_line[256],acc_name[256],acc_pass[256],racc_name[256],racc_pass[256];
int myrank, size;
MPI_Status status;
MPI_Init(&argc,&argv);
MPI_Comm_size(MPI_COMM_WORLD,&size);
MPI_Comm_rank(MPI_COMM_WORLD,&myrank);