예제 #1
0
static void cupti_callback_context_destroy_starting(cupti_user_t *user,
                                                    CUpti_ResourceData *cbdata)
{

    // Find associated counter data
    pthread_mutex_lock(&mutex);
    struct context_counter_data *counter_data, *prev = NULL;
    for (counter_data = allCounterData; counter_data; counter_data = counter_data->next) {
        if (counter_data->context == cbdata->context) {
            break;
        }
        prev = counter_data;
    }
    if (!counter_data) {
        // This can happen if a context gets destroyed that existed
        // before our callbacks got established (FIXME?). Furthermore,
        // the docs sound like it's unreliable to depend on context
        // identity - this might also cause this.
        fprintf(stderr, "CUPTI warning: Unmatched destroyed context!\n");
        pthread_mutex_unlock(&mutex);
        return;
    }

    // Disable counters
    int i;
    CUpti_EventGroupSets *eventGroupPasses = counter_data->eventGroupSets;
    for (i = 0; i < eventGroupPasses->sets->numEventGroups; i++) {
        CUPTI_ASSERT(cuptiEventGroupDisable(eventGroupPasses->sets->eventGroups[i]));
    }

    // Free event group
    CUPTI_ASSERT(cuptiEventGroupSetsDestroy(eventGroupPasses));

    // Free
    if (prev) {
        prev->next = counter_data->next;
    } else {
        allCounterData = counter_data->next;
    }
    free(counter_data);
    pthread_mutex_unlock(&mutex);
}
/*
 * Stop CUPTI counter capturing by disabling the CUPTI event groups.
 * 
 * @param vtcuptiEvtCtx pointer to the VampirTrace CUPTI events context
 */
static void vt_cuptievt_stop(vt_cupti_events_t *vtcuptiEvtCtx)
{
  vt_cupti_evtgrp_t *vtcuptiGrp = NULL;

  if(vtcuptiEvtCtx == NULL || vt_gpu_debug) 
    return;

  /* stop counter reading for all groups */
  vtcuptiGrp = vtcuptiEvtCtx->vtGrpList;
  while(vtcuptiGrp != NULL){
    if(vtcuptiGrp->enabled){
      CUptiResult cuptiErr = CUPTI_SUCCESS;
      
      cuptiErr = cuptiEventGroupDisable(vtcuptiGrp->evtGrp);
      VT_CUPTI_CALL(cuptiErr, "cuptiEventGroupDisable");

      vtcuptiGrp->enabled = 0;
    }

    vtcuptiGrp = vtcuptiGrp->next;
  }
}
예제 #3
0
/*
 * Stop CUPTI counter capturing by disabling the CUPTI event groups.
 * 
 * @param vtcuptiCtx pointer to the VampirTrace CUPTI context
 */
static void vt_cupti_stop(vt_cupti_ctx_t *vtcuptiCtx)
{
  vt_cupti_grp_t *vtcuptiGrp = NULL;
  /*vt_cntl_msg(1, "[CUPTI] vt_cupti_stop() ... ");*/

  if(vtcuptiCtx == NULL || vt_gpu_debug) return;

  /* stop counter reading for all groups */
  vtcuptiGrp = vtcuptiCtx->vtGrpList;
  while(vtcuptiGrp != NULL){
    if(vtcuptiGrp->enabled){
      CUptiResult cuptiErr = CUPTI_SUCCESS;

      cuptiErr = cuptiEventGroupDisable(vtcuptiGrp->evtGrp);
      CHECK_CUPTI_ERROR(cuptiErr, "cuptiEventGroupDisable");

      vtcuptiGrp->enabled = 0;
    }

    vtcuptiGrp = vtcuptiGrp->next;
  }
}