338 uint32_t domainNum, eventNum;
344 uint32_t maxEventSize;
347 cuErr = (*cuDeviceGetCountPtr) (&gctxt->
deviceCount);
348 if(cuErr == CUDA_ERROR_NOT_INITIALIZED) {
370 for(deviceNum = 0; deviceNum < gctxt->
deviceCount; deviceNum++) {
373 CU_CALL((*cuDeviceGetPtr) (&mydevice->
cuDev, deviceNum),
382 CUPTI_CALL((*cuptiDeviceGetNumEventDomainsPtr)
388 mydevice->
maxDomains,
sizeof(CUpti_EventDomainID));
393 size_t domainarraysize = mydevice->
maxDomains *
sizeof(CUpti_EventDomainID);
403 for(domainNum = 0; domainNum < mydevice->
maxDomains; domainNum++) {
404 CUpti_EventDomainID domainID = mydevice->
domainIDArray[domainNum];
415 for(deviceNum = 0; deviceNum < gctxt->
deviceCount; deviceNum++) {
416 uint32_t maxMetrics = 0;
417 CUptiResult cuptiRet;
419 cuptiRet = (*cuptiDeviceGetNumMetricsPtr) (mydevice->
cuDev, &maxMetrics);
420 if (cuptiRet != CUPTI_SUCCESS || maxMetrics < 1)
continue;
421 maxEventSize += maxMetrics;
437 uint32_t idxEventArray = 0;
438 for(deviceNum = 0; deviceNum < gctxt->
deviceCount; deviceNum++) {
442 for(domainNum = 0; domainNum < mydevice->
maxDomains; domainNum++) {
445 CUpti_EventDomainID domainID = mydevice->
domainIDArray[domainNum];
450 CUpti_EventID *domainEventIDArray =
451 (CUpti_EventID *)
papi_calloc(domainNumEvents,
sizeof(CUpti_EventID));
454 size_t domainEventArraySize = domainNumEvents *
sizeof(CUpti_EventID);
456 (domainID, &domainEventArraySize, domainEventIDArray),
459 for(eventNum = 0; eventNum < domainNumEvents; eventNum++) {
460 CUpti_EventID myeventCuptiEventId = domainEventIDArray[eventNum];
466 CUPTI_CALL((*cuptiEventGetAttributePtr) (myeventCuptiEventId,
467 CUPTI_EVENT_ATTR_NAME, &tmpSizeBytes, tmpStr),
471 "event:%s:device=%d", tmpStr, deviceNum);
474 for(ii = 0; ii < (int) strlen(nameTmpPtr); ii++) {
475 if(nameTmpPtr[ii] ==
' ') nameTmpPtr[ii] =
'_';
480 CUPTI_CALL((*cuptiEventGetAttributePtr) (myeventCuptiEventId,
481 CUPTI_EVENT_ATTR_SHORT_DESCRIPTION, &tmpSizeBytes,
497 SUBDBG(
"Checking for metrics\n");
498 for (deviceNum = 0; deviceNum < gctxt->
deviceCount; deviceNum++) {
499 uint32_t maxMetrics = 0,
i, j;
500 CUpti_MetricID *metricIdList = NULL;
501 CUptiResult cuptiRet;
503 cuptiRet = (*cuptiDeviceGetNumMetricsPtr) (mydevice->
cuDev, &maxMetrics);
504 if (cuptiRet != CUPTI_SUCCESS || maxMetrics < 1)
continue;
506 SUBDBG(
"Device %d: Checking each of the (maxMetrics) %d metrics\n", deviceNum, maxMetrics);
509 size_t size = maxMetrics *
sizeof(CUpti_EventID);
510 metricIdList = (CUpti_MetricID *)
papi_calloc(maxMetrics,
sizeof(CUpti_EventID));
514 (mydevice->
cuDev, &size, metricIdList),
518 int saveDeviceNum = 0;
521 for (
i=0, j=0;
i<maxMetrics;
i++) {
523 CUPTI_CALL((*cuptiMetricGetAttributePtr) (metricIdList[
i],
524 CUPTI_METRIC_ATTR_NAME, &size, (uint8_t *) tmpStr),
530 if (strcmp(
"branch_efficiency", tmpStr) == 0)
continue;
558 metricIdList[j++] = metricIdList[
i];
565 for(
i = 0;
i < maxMetrics;
i++) {
567 gctxt->
availEventKind[idxEventArray] = CUPTI_ACTIVITY_KIND_METRIC;
570 CUPTI_CALL((*cuptiMetricGetAttributePtr) (metricIdList[
i],
571 CUPTI_METRIC_ATTR_NAME, &size, (uint8_t *) tmpStr),
578 size_t MV_KindSize =
sizeof(CUpti_MetricValueKind);
580 (metricIdList[
i], CUPTI_METRIC_ATTR_VALUE_KIND, &MV_KindSize,
585 "metric:%s:device=%d", tmpStr, deviceNum);
589 (metricIdList[
i], CUPTI_METRIC_ATTR_LONG_DESCRIPTION, &size,
598 CUpti_MetricID itemId = metricIdList[
i];
599 CUPTI_CALL((*cuptiMetricGetNumEventsPtr) (itemId, &numSubs),
602 size_t sizeBytes = numSubs *
sizeof(CUpti_EventID);
603 CUpti_EventID *subEventIds =
papi_malloc(sizeBytes);
608 (itemId, &sizeBytes, subEventIds),
char disabled_reason[PAPI_MAX_STR_LEN]
uint32_t * domainIDNumEvents
uint32_t * availEventIDArray
int * availEventDeviceNum
#define CU_CALL(call, handleerror)
PAPI_component_info_t cmp_info
#define CHECK_PRINT_EVAL(checkcond, str, evalthis)
struct papicuda_name_desc * availEventDesc
#define PAPI_2MAX_STR_LEN
CUpti_EventDomainID * domainIDArray
#define SUBDBG(format, args...)
#define CUDA_CALL(call, handleerror)
papi_vector_t _cuda_vector
struct papicuda_device_desc * deviceArray
CUresult CUDAAPI(* cuInitPtr)(unsigned int)
char deviceName[PAPI_MIN_STR_LEN]
CUpti_ActivityKind * availEventKind
uint32_t * availEventIsBeingMeasuredInEventset
#define papi_calloc(a, b)
#define CUPTI_CALL(call, handleerror)
cudaError_t(* cudaGetDevicePtr)(int *)