Example #1
0
int OSPDI_NbGlobalBarrier(OSPD_Handle_t *ospd_handle)
{

    int status = OSP_SUCCESS;
    OSPD_Request_t *ospd_request;
    DCMF_Callback_t done_callback;
    volatile int active;

    OSPU_FUNC_ENTER();

    ospd_request = OSPDI_Get_request(1);
    OSPU_ERR_POP(status = (ospd_request == NULL),
                "OSPDI_Get_request returned error \n");
    OSPDI_Set_handle(ospd_request, ospd_handle);

    ospd_handle->active++;

    done_callback.function = OSPDI_Request_done;
    done_callback.clientdata = (void *) ospd_request;

    status = DCMF_GlobalBarrier(&OSPD_GlobalBarrier_protocol,
                                &(ospd_request->request),
                                done_callback);
    OSPU_ERR_ABORT(status != DCMF_SUCCESS,
                  "DCMF_GlobalBarrier returned with an error");

    fn_exit:
    OSPU_FUNC_EXIT();
    return status;

    fn_fail:
    goto fn_exit;

}
Example #2
0
int OSPDI_GlobalBarrier()
{
    int status = OSP_SUCCESS;
    DCMF_Request_t request;
    DCMF_Callback_t done_callback;
    volatile int active;

    OSPU_FUNC_ENTER();

    active = 1;
    done_callback.function = OSPDI_Generic_done;
    done_callback.clientdata = (void *) &active;

    status = DCMF_GlobalBarrier(&OSPD_GlobalBarrier_protocol,
                                &request,
                                done_callback);
    OSPU_ERR_ABORT(status != DCMF_SUCCESS,
                  "DCMF_GlobalBarrier returned with an error");

    OSPDI_Conditional_advance(active > 0);

    fn_exit: OSPU_FUNC_EXIT();
    return status;

    fn_fail: goto fn_exit;

}
int
MPIDO_Barrier_gi(MPID_Comm * comm)
{
  int rc;
  MPID_Comm * comm_world;
  MPID_Comm_get_ptr(MPI_COMM_WORLD, comm_world);
  DCMF_Callback_t callback = { barrier_cb_done,
			       (void *) &mpid_globalbarrier_active };

  /* initialize global active field */
  mpid_globalbarrier_active = 1;

  if (mpid_globalbarrier_restart)
    rc = DCMF_Restart (&mpid_globalbarrier_request);
  else
  {
    mpid_globalbarrier_restart = 1;
    rc = DCMF_GlobalBarrier(&MPIDI_Protocols.globalbarrier,
                            &mpid_globalbarrier_request, callback);
  }

  if (rc == DCMF_SUCCESS)
    MPID_PROGRESS_WAIT_WHILE(* (int *) callback.clientdata);

  return rc;
}