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;
    
}
Exemplo n.º 2
0
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);
}
Exemplo n.º 3
0
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();
         }
}
Exemplo n.º 4
0
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);
    }
         
}
Exemplo n.º 5
0
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);
         }
}