2012年1月21日土曜日

Python:MyMPIで円周率の計算バージョン1



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] 

お試しあれ。


このエントリーをはてなブックマークに追加



0 件のコメント :

コメントを投稿