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); }
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); }
void * PARMCI_Malloc_local(int bytes) { return A1D_Allocate_local(bytes); }