def f(x):
return 4.0/(1.0+x*x)
def main():
import numpy
import mpi
from mpi import mpi_init, mpi_finalize
from mpi import mpi_comm_size, mpi_comm_rank, MPI_COMM_WORLD
from mpi import mpi_reduce, mpi_bcast, mpi_barrier,mpi_recv, mpi_send
from mpi import MPI_SUM, MPI_FLOAT,MPI_INT,MPI_TAG_UB
import sys
sys.argv = mpi_init(len(sys.argv),sys.argv)
number_of_proc = mpi_comm_size(MPI_COMM_WORLD)
myid = mpi_comm_rank(MPI_COMM_WORLD)
main_node = 0
n = 10000
#mpi_bcast(n, 1, MPI_INT, 0, MPI_COMM_WORLD)
h = 1.0 / n
sum = 0.0
for i in range(myid,n,number_of_proc):
x = h * (i -0.5)
sum += f(x)
mypi = h * sum
#mpi_barrier(MPI_COMM_WORLD)
cpi = mpi_reduce(mypi, 1, MPI_FLOAT,MPI_SUM, 0, MPI_COMM_WORLD)
if myid == main_node:
print cpi
mpi_finalize()
if __name__=="__main__":
main()
結果は [ 3.14179277]
お試しあれ。
Tweet
0 件のコメント :
コメントを投稿