int shmem_pe_accessible(int pe) { RUNTIME_CHECK_INIT(); /* Assume that everything between 0 and num_pes() is reachable. */ return 0 <= pe && pe < _num_pes() ? 1 : 0; }
static inline void _shfree(void* ptr) { int rc; RUNTIME_CHECK_INIT(); RUNTIME_CHECK_ADDR(ptr); #if OSHMEM_SPEC_COMPAT == 1 shmem_barrier_all(); #endif rc = MCA_MEMHEAP_CALL(free(ptr)); if (OSHMEM_SUCCESS != rc) { SHMEM_API_VERBOSE(10, "shfree failure."); } }
int shmem_addr_accessible(const void *addr, int pe) { void* rva; sshmem_mkey_t *mkey; int i; RUNTIME_CHECK_INIT(); for (i = 0; i < mca_memheap_base_num_transports(); i++) { mkey = mca_memheap_base_get_cached_mkey(pe, (void *)addr, i, &rva); if (mkey) { return 1; } } return 0; }
void shmem_barrier(int PE_start, int logPE_stride, int PE_size, long *pSync) { int rc = OSHMEM_SUCCESS; oshmem_group_t* group = NULL; RUNTIME_CHECK_INIT(); #if OSHMEM_SPEC_COMPAT == 1 /* all outstanding puts must be completed */ shmem_fence(); #endif if ((0 <= PE_start) && (0 <= logPE_stride)) { /* Create group basing PE_start, logPE_stride and PE_size */ #if OSHMEM_GROUP_CACHE_ENABLED == 0 group = oshmem_proc_group_create(PE_start, (1 << logPE_stride), PE_size); if (!group) rc = OSHMEM_ERROR; #else group = find_group_in_cache(PE_start, logPE_stride, PE_size); if (!group) { group = oshmem_proc_group_create(PE_start, (1 << logPE_stride), PE_size); if (!group) { rc = OSHMEM_ERROR; } else { cache_group(group, PE_start, logPE_stride, PE_size); } } #endif /* OSHMEM_GROUP_CACHE_ENABLED */ /* Collective operation call */ if (rc == OSHMEM_SUCCESS) { /* Call barrier operation */ rc = group->g_scoll.scoll_barrier(group, pSync, SCOLL_DEFAULT_ALG); } #if OSHMEM_GROUP_CACHE_ENABLED == 0 if ( rc == OSHMEM_SUCCESS ) { oshmem_proc_group_destroy(group); } #endif /* OSHMEM_GROUP_CACHE_ENABLED */ } RUNTIME_CHECK_RC(rc); }
int my_pe(void) { RUNTIME_CHECK_INIT(); return oshmem_my_proc_id(); }
int num_pes(void) { RUNTIME_CHECK_INIT(); return oshmem_num_procs(); }