void shmem_barrier_all(void) { SHMEM_ERR_CHECK_INITIALIZED(); shmem_internal_barrier_all(); }
static void shmem_internal_shutdown(int barrier_requested) { if (!shmem_internal_initialized || shmem_internal_finalized) { return; } shmem_internal_finalized = 1; if (barrier_requested) shmem_internal_barrier_all(); shmem_transport_fini(); #ifdef USE_XPMEM shmem_transport_xpmem_fini(); #endif #ifdef USE_CMA shmem_transport_cma_fini(); #endif SHMEM_MUTEX_DESTROY(shmem_internal_mutex_alloc); shmem_internal_symmetric_fini(); shmem_runtime_fini(); }
void FC_SHPCLMOVE(void **addr, fortran_integer_t *length, fortran_integer_t *errcode, fortran_integer_t *want_abort) { void *ret; SHMEM_ERR_CHECK_INITIALIZED(); SHMEM_ERR_CHECK_SYMMETRIC_HEAP(*addr); if (*length <= 0) { if (0 == *want_abort) { fprintf(stderr, "[%03d] shpclmove failure (invalid length)\n", shmem_internal_my_pe); RAISE_ERROR(-1); } else { *errcode = -1; return; } } shmem_internal_barrier_all(); SHMEM_MUTEX_LOCK(shmem_internal_mutex_alloc); ret = dlrealloc(*addr, *length * 4); /* length is number of 32 bit words */ SHMEM_MUTEX_UNLOCK(shmem_internal_mutex_alloc); if (*addr != NULL) { if (*addr == ret) { *errcode = 0; } else { *errcode = 1; } *addr = ret; } else { if (0 == *want_abort) { fprintf(stderr, "[%03d] shpclmove failure\n", shmem_internal_my_pe); RAISE_ERROR(-2); } else { *errcode = -2; return; } } shmem_internal_barrier_all(); }
void shmem_free(void *ptr) { SHMEM_ERR_CHECK_INITIALIZED(); SHMEM_MUTEX_LOCK(shmem_internal_mutex_alloc); dlfree(ptr); SHMEM_MUTEX_UNLOCK(shmem_internal_mutex_alloc); shmem_internal_barrier_all(); }
void * shmem_realloc(void *ptr, size_t size) { void *ret; SHMEM_ERR_CHECK_INITIALIZED(); if (ptr != NULL) { SHMEM_ERR_CHECK_SYMMETRIC_HEAP(ptr); } shmem_internal_barrier_all(); SHMEM_MUTEX_LOCK(shmem_internal_mutex_alloc); ret = dlrealloc(ptr, size); SHMEM_MUTEX_UNLOCK(shmem_internal_mutex_alloc); shmem_internal_barrier_all(); return ret; }
void FC_SHPDEALLOC(void **addr, fortran_integer_t *errcode, fortran_integer_t *want_abort) { SHMEM_ERR_CHECK_INITIALIZED(); SHMEM_MUTEX_LOCK(shmem_internal_mutex_alloc); dlfree(*addr); SHMEM_MUTEX_UNLOCK(shmem_internal_mutex_alloc); *errcode = 0; shmem_internal_barrier_all(); }
void shmem_free(void *ptr) { SHMEM_ERR_CHECK_INITIALIZED(); if (ptr != NULL) { SHMEM_ERR_CHECK_SYMMETRIC_HEAP(ptr); } shmem_internal_barrier_all(); SHMEM_MUTEX_LOCK(shmem_internal_mutex_alloc); dlfree(ptr); SHMEM_MUTEX_UNLOCK(shmem_internal_mutex_alloc); }
void * shmem_align(size_t alignment, size_t size) { void *ret; SHMEM_ERR_CHECK_INITIALIZED(); SHMEM_MUTEX_LOCK(shmem_internal_mutex_alloc); ret = dlmemalign(alignment, size); SHMEM_MUTEX_UNLOCK(shmem_internal_mutex_alloc); shmem_internal_barrier_all(); return ret; }
void * shmem_realloc(void *ptr, size_t size) { void *ret; SHMEM_ERR_CHECK_INITIALIZED(); SHMEM_MUTEX_LOCK(shmem_internal_mutex_alloc); ret = dlrealloc(ptr, size); SHMEM_MUTEX_UNLOCK(shmem_internal_mutex_alloc); shmem_internal_barrier_all(); return ret; }
void FC_SHPALLOC(void **addr, fortran_integer_t *length, fortran_integer_t *errcode, fortran_integer_t *want_abort) { size_t len; SHMEM_ERR_CHECK_INITIALIZED(); len = ((size_t) *length) * 4; *errcode = 0; if (len == 0) { if (0 == *want_abort) { *errcode = -1; return; } else { fprintf(stderr, "[%03d] ERROR: shpalloc failure (invalid length). Aborting job.\n", shmem_internal_my_pe); RAISE_ERROR(1); } } SHMEM_MUTEX_LOCK(shmem_internal_mutex_alloc); *addr = dlmalloc(len); /* length is number of 32 bit words */ SHMEM_MUTEX_UNLOCK(shmem_internal_mutex_alloc); if (*addr == NULL) { if (0 == *want_abort) { *errcode = -2; return; } else { fprintf(stderr, "[%03d] ERROR: shpalloc failure. Aborting job.\n", shmem_internal_my_pe); RAISE_ERROR(1); } } shmem_internal_barrier_all(); }