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); } }
/* 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); }