int ompi_common_portals_initialize(ptl_handle_ni_t *ni_handle, bool *accel) { int ret, max_interfaces; ptl_process_id_t ptl_process_id; ptl_interface_t ni_iface = PTL_IFACE_DEFAULT; *accel = false; /* * If we use the YOD launcher we can use the default interface * otherwise we need to use the SeaStar Bridged interface (for CNL/APRUN) */ ni_iface = IFACE_FROM_BRIDGE_AND_NALID(PTL_BRIDGE_UK,PTL_IFACE_SS); /* * Initialize Portals interface */ ret = PtlInit(&max_interfaces); if (PTL_OK != ret) { opal_output(0, "PtlInit failed, returning %d\n", ret); return OMPI_ERR_NOT_AVAILABLE; } /* * Initialize a network device */ ret = PtlNIInit(ni_iface, /* interface to initialize */ PTL_PID_ANY, /* let library assign our pid */ NULL, /* no desired limits */ NULL, /* actual limits */ ni_handle /* our interface handle */ ); if (PTL_OK != ret && PTL_IFACE_DUP != ret) { opal_output(0, "PtlNIInit failed, returning %d (%s : %d)\n", ret, __FILE__, __LINE__); return OMPI_ERROR; } ret = PtlGetId(*ni_handle ,&ptl_process_id); if(PTL_OK != ret) { opal_output(0, "PtlGetId failed, returning %d\n", ret); return OMPI_ERROR; } /* publish my nid/pid info */ ret = ompi_modex_send(&portals_component, &ptl_process_id, sizeof(ptl_process_id_t)); if (OMPI_SUCCESS != ret) { return ret; } return OMPI_SUCCESS; }
int server(void *arg) { int ret; int num_interfaces; ptl_handle_ni_t nih; ptl_handle_eq_t eqh; ptl_ni_limits_t ptl_limits; ptl_event_t ev_t; ptl_event_t *ev=&ev_t; printf("IN SERVER\n"); if ((ret=PtlInit(&num_interfaces)) != PTL_OK) { printf("%s: PtlInit failed: %d\n", __FUNCTION__, ret); exit(1); } printf("%s: PtlInit succeeds (%d:%d)\n", __FUNCTION__, ret, num_interfaces); if (((ret=PtlNIInit( IFACE_FROM_BRIDGE_AND_NALID(PTL_BRIDGE_UK, PTL_IFACE_SS), PTL_PID_ANY, NULL, &ptl_limits, &nih)) != PTL_OK) && (ret != PTL_IFACE_DUP)) { printf("%s: PtlNIInit failed: %d\n", __FUNCTION__, ret); exit(1); } printf("%s: PtlNIInit succeeds (%d)\n", __FUNCTION__, ret); if ((ret=PtlEQAlloc(nih, 4096, NULL, &eqh)) != PTL_OK) { printf("%s: PtlEQAlloc failed: %d\n", __FUNCTION__, ret); exit(1); } iv=11; ret=PtlEQWait(nih,ev); printf("%s: PtlEQAlloc succeeds\n", __FUNCTION__); printf("%d\n",iv); iv=13; while(1); }
int main(int argc, char **argv, char **envp) { int ret; int num_interfaces; ptl_handle_ni_t nih; ptl_handle_eq_t eqh; ptl_ni_limits_t ptl_limits; pid_t child; if ((ret=PtlInit(&num_interfaces)) != PTL_OK) { printf("%s: PtlInit failed: %d\n", FUNCTION_NAME, ret); exit(1); } printf("%s: PtlInit succeeds (%d)\n", FUNCTION_NAME, ret); #ifdef FORK_BEFORE_NI_INIT child = fork(); #endif if ((ret=PtlNIInit( IFACE_FROM_BRIDGE_AND_NALID(PTL_BRIDGE_UK, PTL_IFACE_SS), PTL_PID_ANY, NULL, &ptl_limits, &nih)) != PTL_OK) { printf("%s: PtlNIInit failed: %d\n", FUNCTION_NAME, ret); exit(1); } printf("%s: PtlNIInit succeeds (%d)\n", FUNCTION_NAME, ret); #ifdef FORK_AFTER_NI_INIT child = fork(); #endif if ((ret=PtlEQAlloc(nih, 4096, NULL, &eqh)) != PTL_OK) { printf("%s: PtlEQAlloc failed: %d(%d)\n", FUNCTION_NAME, ret, child); exit(1); } printf("%s: PtlEQAlloc succeeds (%d:%d)\n", FUNCTION_NAME, child, ret); if(child){ MPI_Init(&argc,&argv); MPI_Finalize(); } }
int main(int argc, char **argv, char **envp) { int i,ret,*npes; int num_interfaces; ptl_handle_ni_t nih; ptl_handle_eq_t eqh; ptl_ni_limits_t ptl_limits; pid_t child; ptl_process_id_t rnk,*procid_map; int spv,*spawned=&spv; if ((ret=PtlInit(&num_interfaces)) != PTL_OK) { printf("%s: PtlInit failed: %d\n", __FUNCTION__, ret); exit(1); } printf("%s: PtlInit succeeds (%d)\n", __FUNCTION__, ret); #ifdef FORK_BEFORE_NI_INIT child = fork(); #endif if((ret=PtlNIInit(IFACE_FROM_BRIDGE_AND_NALID(PTL_BRIDGE_UK, PTL_IFACE_SS), PTL_PID_ANY, NULL, &ptl_limits, &nih)) != PTL_OK) { printf("%s: PtlNIInit failed: %d\n", __FUNCTION__, ret); /*exit(1);*/ } else printf("%s: PtlNIInit succeeds (%d)\n", __FUNCTION__, ret); #ifdef FORK_AFTER_NI_INIT child = fork(); #endif if ((ret=PtlEQAlloc(nih, 4096, NULL, &eqh)) != PTL_OK) { printf("%s: PtlEQAlloc failed: %d(%d)\n", __FUNCTION__, ret, child); exit(1); } printf("%s: PtlEQAlloc succeeds (%d:%d)\n", __FUNCTION__, child, ret); #if 1 if(child){ MPI_Init(&argc,&argv); } if(child){ PMI_Init(spawned); printf("\n%d:spanwned=%d",child,*spawned); if ((ret=PMI_Get_size(npes)) != PMI_SUCCESS) { printf("%s: PMI_Get_size failed: %d\n", __FUNCTION__, ret); /*exit(1);*/ } else printf("%s: PMI_Get_size succeeds (%d)\n", __FUNCTION__,*npes); /*procid_map = (ptl_process_id_t *)malloc(sizeof(ptl_process_id_t)*(*npes)); if(procid_map==NULL)exit(1);*/ if((ret = PMI_CNOS_Get_nidpid_map(&procid_map)) != PMI_SUCCESS) { printf("Getting proc map failed (npes=%d)\n", *npes); } for(i=0;i<*npes;i++){ printf("\npid=%d nid=%d npes=%d(%d)",procid_map[i].pid,procid_map[i].nid,*npes,child); } } #endif if((ret=PtlGetId(nih,&rnk)) !=PTL_OK) { printf("%s: PtlGetId failed: %d(%d)\n", __FUNCTION__, ret, child); exit(1); } printf("%s: nid=%d pid=%d(%d)\n",__FUNCTION__,rnk.nid,rnk.pid,child); if(child){ MPI_Finalize(); printf("%s: mpi_init and finalize succeed(%d)\n",__FUNCTION__,child); } }
int main(int argc, char **argv, char **envp) { int i,ret,npes; int num_interfaces; ptl_handle_ni_t nih; ptl_handle_eq_t eqh; ptl_ni_limits_t ptl_limits; pid_t child; ptl_process_id_t rnk; child = fork(); if ((ret=PtlInit(&num_interfaces)) != PTL_OK) { printf("%s: PtlInit failed: %d\n", FUNCTION_NAME, ret); exit(1); } printf("%s: PtlInit succeeds (%d)\n", FUNCTION_NAME, ret); if ((ret=PtlNIInit( IFACE_FROM_BRIDGE_AND_NALID(PTL_BRIDGE_UK, PTL_IFACE_SS), PTL_PID_ANY, NULL, &ptl_limits, &nih)) != PTL_OK) { printf("%s: PtlNIInit 1 failed: %d\n", FUNCTION_NAME, ret); } if((ret = PtlNIFini(nih)) !=PTL_OK){ printf("%s: PtlNIFini failed: %d\n", FUNCTION_NAME, ret); } PtlFini(); if ((ret=PtlInit(&num_interfaces)) != PTL_OK) { printf("%s: PtlInit failed: %d\n", FUNCTION_NAME, ret); exit(1); } if ((ret=PtlNIInit( IFACE_FROM_BRIDGE_AND_NALID(PTL_BRIDGE_UK, PTL_IFACE_SS), PTL_PID_ANY, NULL, &ptl_limits, &nih)) != PTL_OK) { printf("%s: PtlNIInit 2 failed: %d\n", FUNCTION_NAME, ret); exit(1); } #if 0 if ((ret=PtlNIInit( IFACE_FROM_BRIDGE_AND_NALID(PTL_BRIDGE_UK, PTL_IFACE_SS), PTL_PID_ANY, NULL, &ptl_limits, &nih)) != PTL_OK) { printf("%s: PtlNIInit failed: %d\n", FUNCTION_NAME, ret); exit(1); } #endif printf("%s: PtlNIInit succeeds (%d)\n", FUNCTION_NAME, ret); if ((ret=PtlEQAlloc(nih, 4096, NULL, &eqh)) != PTL_OK) { printf("%s: PtlEQAlloc failed: %d(%d)\n", FUNCTION_NAME, ret, child); exit(1); } printf("%s: PtlEQAlloc succeeds (%d:%d)\n", FUNCTION_NAME, child, ret); if ((ret=PtlGetId(nih,&rnk)) !=PTL_OK) { printf("%s: PtlGetId failed: %d(%d)\n", FUNCTION_NAME, ret, child); exit(1); } printf("%s: nid=%d pid=%d(%d)\n",FUNCTION_NAME,rnk.nid,rnk.pid,child); if(child){ MPI_Init(&argc,&argv); MPI_Finalize(); printf("%s: mpi_init and finalize succeed(%d)\n",FUNCTION_NAME,child); } }