static void emulate_armci_init_clusinfo()
{
    int psize;

    MPI_Comm_remote_size(MPI_COMM_SERVER2CLIENT, &psize);

    /* server id (i.e. server's armci_me) is derived from node master's id.
       Similar to armci_create_server_process() to set SERVER_CONTEXT */
    armci_me        = SOFFSET - armci_client_first;
    armci_nproc     = psize;
    armci_usr_tid   = THREAD_ID_SELF(); /*remember the main user thread id */
    armci_master    = armci_client_first;

    /* ***** emulate armci_init_clusinfo() ***** */
    armci_clus_me    = armci_server_me;
    armci_nclus      = armci_nserver;
    armci_clus_first = armci_clus_info[armci_clus_me].master;
    armci_clus_last  = (armci_clus_first +
                        armci_clus_info[armci_clus_me].nslave - 1);

    if(armci_clus_first != armci_client_first ||
            armci_nclients   != armci_clus_info[armci_clus_me].nslave)
    {
        armci_mpi2_server_debug(armci_server_me,
                                "armci_clus_first=%d, armci_clus_last=%d\n",
                                armci_clus_first, armci_clus_last);
        armci_die("mpi2_server: armci_clus_info is incorrect.", 0);
    }
}
Example #2
0
/* calling armci_thread_idx for every function that accesses thread-private data
 * might be expensive -- needs optiomization */
INLINE int armci_thread_idx()
{
    int i, n = ARMCI_MIN(armci_user_threads.avail, armci_user_threads.max);
    thread_id_t id = THREAD_ID_SELF();

    for (i = 0; i < n; i++) if (id == armci_user_threads.ids[i]) {
        /*PRNDBG2("thread id=%ld already registered, idx=%d\n", id, i);*/
        return i;
    }

    /* see this thread for the first time */
    return armci_register_thread(id);
}