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

int k,x;

char in_line[256],acc_name[256],acc_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);

if (myrank == 0) // kind'a Master Process

{

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

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

for (x=1;x<size;x++) MPI_Recv (&k, 1, MPI_INT, x, TAG_READY, MPI_COMM_WORLD, &status);

char* p;

puts ("Feeding"); fflush(stdout);

sprintf(in_line,"apc::1234");

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

if (p = strtok(NULL,"::")) sprintf(acc_pass,"%s",p); else return 0;

int acc_name_len = strlen(acc_name)+1, acc_pass_len = strlen(acc_pass)+1;

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);

for (x=1;x<size;x++)

{

MPI_Probe(MPI_ANY_SOURCE, TAG_RESULT, MPI_COMM_WORLD, &status);

int src = status.MPI_SOURCE; int res;

MPI_Recv(&res, 1, MPI_INT, src, TAG_RESULT, MPI_COMM_WORLD, &status);

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

}

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