I have a personal work to complete in C programming language
1
Project Description
Write an MPI program that uses a Monte Carlo method to estimate π. Suppose we toss darts
randomly at a square dartboard, whose bullseye is at the origin, and whose sides are 2 feet in
length. Suppose also that there’s a circle inscribed in the square dartboard. The radius of the
circle is 1 foot, and its area is π square feet. If the points that are hit by the darts are
uniformly distributed (and we always hit the square), then the number of darts that hit inside
the circle should approximately satisfy the equation
number in circle
total number of tosses =
𝜋
4 ,
since the ratio of the area of the circle to the area of the square is π/4.
We can use this formula to estimate the value of π with a random number generator:
number_in_circle = 0;
for (toss = 0; toss < number_of_tosses; toss++) {
x = random double between -1 and 1;
y = random double between -1 and 1;
distance_squared = x*x + y*y;
if (distance_squared <= 1) number_in_circle++;
}
pi_estimate = 4*number_in_circle/((double) number_of_tosses);
This is called a “Monte Carlo” method, since it uses randomness (the dart tosses).
Specifically, the MPI program can be implemented in the following way.
(1) Process 0 should read in the total number of tosses and broadcast it to the other processes.
(2) Use MPI_Reduce to find the global sum of the local variable number_in_circle, and have
process 0 print the result.
(3) You may want to use long long ints for the number of hits in the circle and the number
of tosses, since both may have to be very large to get a reasonable estimate of π.