Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Lab1_pdc_tern_final.doc
Скачиваний:
0
Добавлен:
01.07.2025
Размер:
635.9 Кб
Скачать

Додаток 3. Приклад програми пересилки повідомлень між паралельними процесами

#include "mpi.h"

main (argc, argv)

int argc;

char **argv;

{

char message[20];

int myrank;

MPI_Status status;

MPI_Init (&argc, &argv);

MPI_Comm_rank (MPI_COMM_WORLD, &myrank);

if (myrank==0) /* code for process zero */

{

strcpy (message, "Hello, MPI");

MPI_Send(message, strlen(message), MPI_CHAR, 1, 99, MPI_COMM_WORLD);

}

else /* code for process one */

{

MPI_Recv (message, 20, MPI_CHAR, 0, 99, MPI_COMM_WORLD, &status);

printf ("received :%s:\n", message);

}

MPI_Finalize();

}

Додаток 4. Програма, що виводить кількість паралельних процесів та їх номери

#include <stdio.h>

#include <mpi.h>

int main(int argc, char** argv){

int allproc, procid, namelen;

char processor_name[MPI_MAX_PROCESSOR_NAME];

MPI_Init(&argc, &argv);

MPI_Comm_size(MPI_COMM_WORLD, &allproc);

MPI_Comm_rank(MPI_COMM_WORLD, &procid);

MPI_Get_processor_name(processor_name,&namelen);

if (procid == 0)

{ printf("All processes count is: %d \r\n", allproc);

}

printf("Process %d on %s\n", procid, processor_name);

MPI_Finalize();

return 0;

}

Додаток 5. Приклад розпаралелення ітераційного процесу

#include "mpi.h"

#include <stdio.h>

#include <stdlib.h>

#include <string.h>

#include <math.h>

#define BUFLEN 512

int main(argc,argv)

int argc;

char *argv[];

{

int i, myid, numprocs, next, rc, namelen;

unsigned long j1, j2, sum=0;

char buffer[BUFLEN], processor_name[MPI_MAX_PROCESSOR_NAME];

double startwtime = 0.0, endwtime;

MPI_Status status;

int iter=10, iter2=15000, iter3=25000, piter;

char studName[20]="";

MPI_Init(&argc,&argv);

MPI_Comm_size(MPI_COMM_WORLD,&numprocs);

MPI_Comm_rank(MPI_COMM_WORLD,&myid);

MPI_Get_processor_name(processor_name,&namelen);

if (myid == 0)

{

printf("-=- Enter your surname: "); scanf("%20s", studName);

printf("-=- Enter number of iterations: "); scanf("%u", &iter);

printf("-=- Amount of Parallel Processes: %d\n-=- Total Iterations: %ux%dx%d\n", numprocs, iter, iter2, iter3);

for (i=0;i<numprocs;i++)

MPI_Send(&iter, 1, MPI_INT, i, 0, MPI_COMM_WORLD);

}

MPI_Recv(&iter, 1, MPI_INT, 0, 0, MPI_COMM_WORLD, &status);

MPI_Barrier(MPI_COMM_WORLD); /* synchronization */

if (myid == 0) startwtime = MPI_Wtime(); /* time stamp of start*/

piter=iter/numprocs; /* partial iterations */

if (myid == 0) if (iter%numprocs > 0) piter=piter+(iter%numprocs);

for (i=1;i<=piter;i++)

{

for (j1=1;j1<=iter2;j1++)

{

for (j2=1;j2<=iter3;j2++) sum = sum + 1;

}

printf("Process %d on processor %s Iteration - %d \n",myid,processor_name,i);

}

MPI_Barrier(MPI_COMM_WORLD);

if (myid == 0) endwtime = MPI_Wtime();

MPI_Finalize();

if (myid == 0) printf("-=- Wall Clock Time: %f\n", endwtime-startwtime);

}

23

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]