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

{

puts("Initializing"); fflush(stdout);

FILE* in_file = fopen("pass.txt","r");

char* p;

int allok=1,numclients=size-1;

int acc_name_len,acc_pass_len,racc_name_len,racc_pass_len;

while (allok || numclients)

{

MPI_Probe(MPI_ANY_SOURCE, TAG_MSG, MPI_COMM_WORLD, &status); // модель подій!

int src = status.MPI_SOURCE;

MPI_Recv(&result, 1, MPI_INT, src, TAG_MSG, MPI_COMM_WORLD, &status); // Чекаємо повідомлень від клієнтів

printf("<<< Proc %d returned %d\n",src,result);fflush(stdout);

switch(result)

{

case MSG_SUCCESS:

MPI_Recv(&racc_name_len, 1, MPI_INT, src,TAG_SEND_NAMELEN, MPI_COMM_WORLD, &status);

MPI_Recv(&racc_pass_len, 1, MPI_INT, src,TAG_SEND_PASSLEN, MPI_COMM_WORLD, &status);

MPI_Recv(&racc_name, racc_name_len, MPI_CHAR, src, TAG_SEND_NAME, MPI_COMM_WORLD, &status);

MPI_Recv(&racc_pass, racc_pass_len, MPI_CHAR, src, TAG_SEND_PASS, MPI_COMM_WORLD, &status);

printf ("[+] Proc %d got: %s:: %s\n",src,racc_name,racc_pass);fflush(stdout);

break;

case MSG_FAILURE:

MPI_Recv(&racc_name_len, 1, MPI_INT, src, TAG_SEND_NAMELEN, MPI_COMM_WORLD, &status);

MPI_Recv(&racc_name, racc_name_len, MPI_CHAR, src, TAG_SEND_NAME, MPI_COMM_WORLD, &status);

printf ("[-] Proc %d couldn't break: %s in set limits\n",src,racc_name);fflush(stdout);

break;

case MSG_READY: // є вільний робітник

if (!fgets(in_line,256,in_file)) allok =0; // готуємо account info

if (p = strtok(in_line,"::")) sprintf(acc_name,"%s",p); else allok= 0; //

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