Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- // LAB 22.03 - PRZYBLIZENIE PI
- #include <stdlib.h>
- #include <stdio.h>
- #include <mpi.h>
- #include <math.h>
- #define ROOT 0
- #define MSG_TAG 100
- int main(int argc,char **argv)
- {
- int size,tid;
- float R=1;
- MPI_Init(&argc, &argv);
- MPI_Comm_size( MPI_COMM_WORLD, &size );
- MPI_Comm_rank( MPI_COMM_WORLD, &tid );
- srand( tid );
- float res;
- if ( tid == 0 ) {
- MPI_Status status;
- int i;
- long double pi;
- float sum_results = 0;
- // pewnie jakiś for tutaj
- for(i = 1; i<size; i++) {
- MPI_Recv( &res, 1, MPI_FLOAT, MPI_ANY_SOURCE, MPI_ANY_TAG, MPI_COMM_WORLD, &status);
- sum_results+=res;
- }
- pi = (long double)(sum_results / (size-1));
- printf("Przybliżenie pi po zebraniu danych od %d procesów wynosi %.20llf\n", i, pi);
- } else {
- int in_circle_counter = 0;
- float x, y, left;
- int number_of_iterations = 800000000, i;
- for (i = 0; i < number_of_iterations; i++) {
- x = rand() / (float)RAND_MAX;
- y = rand() / (float)RAND_MAX;
- left = x*x + y*y;
- if (left <= R) in_circle_counter++;
- }
- float pi_estimated = 4 * ((float)in_circle_counter / number_of_iterations);
- // printf("pi_estimated %f, id: %d\n", pi_estimated, tid);
- MPI_Send( &pi_estimated, 1, MPI_FLOAT, ROOT, MSG_TAG, MPI_COMM_WORLD );
- }
- MPI_Finalize();
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement