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;
}
Exemple #2
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();
}