Контрольная работа: Паралельні обчислення з використанням MPI

else

{

MPI_Ssend(&myrank, 1, MPI_INT, 0, TAG_READY, MPI_COMM_WORLD);

int acc_name_len, acc_pass_len;

MPI_Bcast(&acc_name_len, 1, MPI_INT, 0, MPI_COMM_WORLD); MPI_Barrier(MPI_COMM_WORLD);

MPI_Bcast(&acc_pass_len, 1, MPI_INT, 0, MPI_COMM_WORLD); MPI_Barrier(MPI_COMM_WORLD);

MPI_Bcast(&acc_name, acc_name_len, MPI_CHAR, 0, MPI_COMM_WORLD); MPI_Barrier(MPI_COMM_WORLD);

MPI_Bcast(&acc_pass, acc_pass_len, MPI_CHAR, 0, MPI_COMM_WORLD); MPI_Barrier(MPI_COMM_WORLD);

printf("Proc %d: recv %s:: %s\n",myrank,acc_name,acc_pass);fflush(stdout);

char[256] ret_pass;

int result = do_decrypt_pass(&acc_pass, &ret_pass, myrank);

MPI_Ssend(&result, 1, MPI_INT, 0, TAG_RESULT, MPI_COMM_WORLD);

}

MPI_Finalize();

return 0;

}

===== Example4.cpp =====

У цьому прикладі головний процес (ранг 0) чекає підключення всіх підлеглих процесів (посилки ними повідомлення з тегом TAG_READY), розсилає рядок in_line усім підлеглим процесам, що намагаються підібрати пароль довжини myrank (тобто власний номер процесу). Власне зломом займається функція int do_decrypt_pass(char* incoming_pass_str, char * result_pass_str, int length)

Процеси повертають результат підбора c повідомленням TAG_RESULT. MPI_Barrier використовується для синхронізації. Висновок приклада:


Example4 output (np = 5)

Initializing

Feeding

Proc 1: recv apc:: 1234

Proc 2: recv apc:: 1234

Proc 3: recv apc:: 1234

Proc 1 returned 0

Proc 4: recv apc:: 1234

Proc 3 returned 0

Proc 2 returned 1

К-во Просмотров: 417
Бесплатно скачать Контрольная работа: Паралельні обчислення з використанням MPI