Ejemplo n.º 1
0
def allgather( array, comm ):
    myid = core.comm_rank(comm)
    nprocs = core.comm_size(comm)
    if( myid==root ):
        print nm.size(array)
        datatype = getMpiType(array)
        size = nm.size(array)
        shape = nm.shape(array)
        rank = nm.rank(array)
    else:
        datatype = 0
        size = 0
        shape = 0
        rank = 0
    datatype = core.bcast( datatype, 1, core.MPI_INT, root, comm )
    rank = core.bcast( rank, 1, core.MPI_INT, root, comm )
    shape = core.bcast( shape, rank, core.MPI_INT, root, comm )
    size = core.bcast( size, 1, core.MPI_INT, root, comm )
    data = core.allgather( array, size, datatype,
                        size, datatype,
                        root, comm )
    
    print shape
    
    shape[0] = shape[0] * nprocs
        
    print shape
    array = nm.asarray(data)
    print nm.size(array)
    array.shape = shape
    return array
Ejemplo n.º 2
0
def allgatherv( message, root = 0,comm=core.MPI_COMM_WORLD ):
    rank = core.comm_rank( comm )
    size = core.comm_size( comm )
    
    s = pickle.dumps(message)
    
    recvlengths = core.allgather(len(s),1,core.MPI_INT,
                              1, core.MPI_INT,
                              root, comm)
            
    displacements = [0]
    displ = 0
    for rl in recvlengths[:-1]:
        displacements.append( displ+rl )
        displ += rl
        
    #if(rank==root):
    #    print "displacements:",displacements
        
    data = core.allgatherv(s, len(s), core.MPI_CHAR,
                        recvlengths, displacements, core.MPI_CHAR,
                        root, comm)
    
    data = data.tostring()
    #    print data
    #    print "length of data:",len(data)
    i,n=0,0
    #    print recvlengths
    realdata = []
    
    for length in recvlengths:
        n += length
        #        print "i,n=%d,%d"%(i,n)
        #        print data[i:n]
        realdata.append(pickle.loads(data[i:n]))
        i += length       
    return realdata