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