Example #1
0
int A1D_Allocate_shared(void* ptrs[], int bytes)
{
    int mpi_status;
    void* tmp_ptr;

    A1D_Allocate_local(&tmp_ptr, bytes);

    mpi_status = MPI_Allgather(&tmp_ptr,sizeof(void*),MPI_BYTE,
                               ptrs,sizeof(void*),MPI_BYTE,
                               A1D_COMM_WORLD);
    assert(mpi_status==0);

    return(0);
}
Example #2
0
int A1D_Create_window(const MPI_Comm comm, int bytes, A1D_Window_t* window)
{
    int mpi_status;
    int mpi_size;
    int mpi_rank;
    void* tmp_ptr;
    MPI_Comm newcomm;

    /* save (dup) the communicator into the window object */
    mpi_status = MPI_Comm_dup(comm,&newcomm);
    assert(mpi_status==0);

    window->comm = newcomm;

    /* need array sizeof(comm) for now */
    mpi_status = MPI_Comm_size(window->comm,&mpi_size);
    assert(mpi_status==0);

    /* my rank in this communicator */
    mpi_status = MPI_Comm_rank(window->comm,&mpi_rank);
    assert(mpi_status==0);

    /* allocate list of base pointers for this window */
    window->addr_list = malloc( mpi_size * sizeof(void*) );
    assert(window->addr_list != NULL);

    /* allocate local memory for this window */
    A1D_Allocate_local(&tmp_ptr, bytes);

    /* exchange base pointers */
    mpi_status = MPI_Allgather(&tmp_ptr,sizeof(void*),MPI_BYTE,
                               window->addr_list,sizeof(void*),MPI_BYTE,
                               window->comm);
    assert(mpi_status==0);

#ifndef NO_WINDOW_BOUNDS_CHECKING
    /* allocate list of sizes */
    window->addr_list = malloc(mpi_size*sizeof(int));
    assert(window->size_list != NULL);

    /* exchange sizes pointers */
    mpi_status = MPI_Allgather(&bytes,sizeof(int),MPI_BYTE,
                               window->size_list,sizeof(int),MPI_BYTE,
                               window->comm);
    assert(mpi_status==0);

#endif

    return(0);
}
Example #3
0
void * PARMCI_Malloc_local(int bytes)
{
    return A1D_Allocate_local(bytes);
}