Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- /* dmocek */
- #include "mpi.h"
- #include <stdio.h>
- #include <math.h>
- void main(int argc, char *argv[])
- {
- int done = 0, n, numprocs, i;
- double PI25DT = 3.141592653589793238462643;
- double mypi, pi, h, sum, x;
- double startwtime, endwtime;
- int namelen;
- char processor_name[MPI_MAX_PROCESSOR_NAME];
- double w[8];
- double recv_data;
- int t;
- int mytid;
- double a,c ;
- MPI_Status b;
- MPI_Init(&argc,&argv);
- MPI_Comm_size(MPI_COMM_WORLD,&numprocs);
- MPI_Comm_rank(MPI_COMM_WORLD,&mytid);
- MPI_Get_processor_name(processor_name,&namelen);
- fprintf(stderr,"Process %d on %s\n", mytid, processor_name);
- fflush(stderr);
- if(mytid == 0) {
- printf("Podaj 8 wartosci: \n");
- fflush(stdout);
- scanf("%lf %lf %lf %lf %lf %lf %lf %lf", &w[0], &w[1], &w[2], &w[3], &w[4], &w[5], &w[6], &w[7]);
- printf("Podaj wartosc t:\n");
- scanf("%d", &t);
- }
- MPI_Scatter(w, 1, MPI_DOUBLE, &recv_data, 1, MPI_DOUBLE, 0, MPI_COMM_WORLD);
- MPI_Bcast(&t, 1, MPI_INT, 0, MPI_COMM_WORLD);
- for(i = 0; i < t; i++) {
- // send
- // wyslij w prawo
- if(mytid == 0) {
- // 6345 + 1
- MPI_Send(&recv_data, 1, MPI_DOUBLE, mytid + 1, 0, MPI_COMM_WORLD);
- }
- // wyslij w lewo
- else if(mytid == 7) {
- // 7869 - 1
- MPI_Send(&recv_data, 1, MPI_DOUBLE, mytid - 1, 0, MPI_COMM_WORLD);
- }
- // wyslij prawo i lewo
- else {
- MPI_Send(&recv_data, 1, MPI_DOUBLE, mytid + 1, 0, MPI_COMM_WORLD);
- MPI_Send(&recv_data, 1, MPI_DOUBLE, mytid - 1, 0, MPI_COMM_WORLD);
- }
- // recv
- if(mytid == 0) {
- MPI_Recv(&a, 1, MPI_DOUBLE, mytid + 1, 0, MPI_COMM_WORLD, &b);
- c=0;
- }
- else if(mytid == 7) {
- MPI_Recv(&a, 1, MPI_DOUBLE, mytid - 1, 0, MPI_COMM_WORLD, &b);
- c=0;
- }
- else {
- MPI_Recv(&a, 1, MPI_DOUBLE, mytid - 1, 0, MPI_COMM_WORLD, &b);
- MPI_Recv(&c, 1, MPI_DOUBLE, mytid + 1, 0, MPI_COMM_WORLD, &b);
- }
- // MPI_Barrier(MPI_COMM_WORLD);
- recv_data = (a + 2*recv_data + c) / 4;
- }
- MPI_Gather(&recv_data, 1, MPI_DOUBLE, w, 1, MPI_DOUBLE, 0, MPI_COMM_WORLD);
- printf("-------PID: %d---------\n", mytid);
- printf("recv_data = %lf\n", recv_data);
- printf("w = ");
- for(i = 0; i < 8; i++)
- printf("%lf ", w[i]);
- printf("\n");
- MPI_Finalize();
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement