From 7bb86defccfeef80a27652cb8a8ed6a2480aa82e Mon Sep 17 00:00:00 2001 From: Tanguy Pruvot Date: Sun, 23 Nov 2014 06:57:25 +0100 Subject: [PATCH] nvml: clean up and fix retorted bus id bug in api --- nvml.cpp | 144 +++---------------------------------------------------- nvml.h | 6 --- 2 files changed, 7 insertions(+), 143 deletions(-) diff --git a/nvml.cpp b/nvml.cpp index e13f8f2..9b1334e 100644 --- a/nvml.cpp +++ b/nvml.cpp @@ -200,14 +200,14 @@ wrap_nvml_handle * wrap_nvml_create() nvmlh->cuda_nvml_device_id[i] = -1; if (cudaGetDeviceProperties(&props, i) == cudaSuccess) { - int j; device_bus_ids[i] = props.pciBusID; - for (j = 0; jnvml_gpucount; j++) { + for (int j = 0; j < nvmlh->nvml_gpucount; j++) { if ((nvmlh->nvml_pci_domain_id[j] == (uint32_t) props.pciDomainID) && (nvmlh->nvml_pci_bus_id[j] == (uint32_t) props.pciBusID) && (nvmlh->nvml_pci_device_id[j] == (uint32_t) props.pciDeviceID)) { if (opt_debug) - applog(LOG_DEBUG, "CUDA GPU[%d] matches NVML GPU[%d]", i, j); + applog(LOG_DEBUG, "CUDA GPU#%d matches NVML GPU %d by busId %u", + i, j, (uint32_t) props.pciBusID); nvmlh->nvml_cuda_device_id[j] = i; nvmlh->cuda_nvml_device_id[i] = j; } @@ -275,24 +275,6 @@ int wrap_nvml_get_fanpcnt(wrap_nvml_handle *nvmlh, int cudaindex, unsigned int * return 0; } -/* Not Supported on 750Ti 340.23, 346.16 neither */ -int wrap_nvml_get_clock(wrap_nvml_handle *nvmlh, int cudaindex, int type, unsigned int *freq) -{ - int gpuindex = nvmlh->cuda_nvml_device_id[cudaindex]; - if (gpuindex < 0 || gpuindex >= nvmlh->nvml_gpucount) - return -1; - - // wrap_nvmlReturn_t rc = nvmlh->nvmlDeviceGetApplicationsClock(nvmlh->devs[gpuindex], (wrap_nvmlClockType_t)type, freq); - wrap_nvmlReturn_t rc = nvmlh->nvmlDeviceGetClockInfo(nvmlh->devs[gpuindex], (wrap_nvmlClockType_t) type, freq); - if (rc != WRAPNVML_SUCCESS) { - //if (opt_debug) - // applog(LOG_DEBUG, "nvmlDeviceGetClockInfo: %s", nvmlh->nvmlErrorString(rc)); - return -1; - } - - return 0; -} - /* Not Supported on 750Ti 340.23 */ int wrap_nvml_get_power_usage(wrap_nvml_handle *nvmlh, int cudaindex, unsigned int *milliwatts) { @@ -425,31 +407,6 @@ int nvapi_fanspeed(unsigned int devNum, unsigned int *speed) return 0; } -int nvapi_getclock(unsigned int devNum, unsigned int *freq) -{ - NvAPI_Status ret; - - if (devNum >= nvapi_dev_cnt) - return -1; - - NV_GPU_CLOCK_FREQUENCIES_V2 clocks; - clocks.version = NV_GPU_CLOCK_FREQUENCIES_VER_2; - clocks.ClockType = NV_GPU_CLOCK_FREQUENCIES_CURRENT_FREQ; // CURRENT/BASE/BOOST - ret = NvAPI_GPU_GetAllClockFrequencies(phys[devNum], &clocks); - if (ret != NVAPI_OK) { - NvAPI_ShortString string; - NvAPI_GetErrorMessage(ret, string); - if (opt_debug) - applog(LOG_DEBUG, "NVAPI NvAPI_GPU_GetAllClockFrequencies: %s", string); - return -1; - } else { - // GRAPHICS/MEMORY - (*freq) = (unsigned int)clocks.domain[NVAPI_GPU_PUBLIC_CLOCK_GRAPHICS].frequency; - } - - return 0; -} - int nvapi_getpstate(unsigned int devNum, unsigned int *power) { NvAPI_Status ret; @@ -519,15 +476,6 @@ int nvapi_getinfo(unsigned int devNum, char *desc) return 0; } -int nvapi_getbusid(unsigned int devNum, int *busid) -{ - if (devNum >= 0 && devNum <= 8) { - (*busid) = device_bus_ids[devNum]; - return 0; - } - return -1; -} - int wrap_nvapi_init() { int num_gpus = cuda_num_devices(); @@ -567,8 +515,8 @@ int wrap_nvapi_init() if (ret == NVAPI_OK && busId == device_bus_ids[g]) { nvapi_dev_map[g] = i; if (opt_debug) - applog(LOG_DEBUG, "CUDA GPU[%d] matches NVAPI GPU[%d]", - g, i); + applog(LOG_DEBUG, "CUDA GPU#%d matches NVAPI GPU %d by busId %u", + g, i, busId); break; } } @@ -657,7 +605,7 @@ int gpu_busid(struct cgpu_info *gpu) } #ifdef WIN32 if (support == -1) { - nvapi_getbusid(nvapi_dev_map[gpu->gpu_id], &busid); + busid = device_bus_ids[gpu->gpu_id]; } #endif return busid; @@ -675,6 +623,7 @@ unsigned int gpu_power(struct cgpu_info *gpu) if (support == -1) { unsigned int pct = 0; nvapi_getusage(nvapi_dev_map[gpu->gpu_id], &pct); + mw = pct; // to fix } #endif return mw; @@ -704,82 +653,3 @@ int gpu_clocks(struct cgpu_info *gpu) } return -1; } - -/* strings /usr/lib/nvidia-340/libnvidia-ml.so | grep nvmlDeviceGet | grep -v : | sort | uniq - - nvmlDeviceGetAccountingBufferSize - nvmlDeviceGetAccountingMode - nvmlDeviceGetAccountingPids - nvmlDeviceGetAccountingStats - nvmlDeviceGetAPIRestriction - nvmlDeviceGetApplicationsClock - nvmlDeviceGetAutoBoostedClocksEnabled - nvmlDeviceGetBAR1MemoryInfo - nvmlDeviceGetBoardId - nvmlDeviceGetBrand - nvmlDeviceGetBridgeChipInfo -* nvmlDeviceGetClockInfo - nvmlDeviceGetComputeMode - nvmlDeviceGetComputeRunningProcesses - nvmlDeviceGetCount - nvmlDeviceGetCount_v2 - nvmlDeviceGetCpuAffinity - nvmlDeviceGetCurrentClocksThrottleReasons - nvmlDeviceGetCurrPcieLinkGeneration - nvmlDeviceGetCurrPcieLinkWidth - nvmlDeviceGetDecoderUtilization - nvmlDeviceGetDefaultApplicationsClock - nvmlDeviceGetDetailedEccErrors - nvmlDeviceGetDisplayActive - nvmlDeviceGetDisplayMode - nvmlDeviceGetDriverModel - nvmlDeviceGetEccMode - nvmlDeviceGetEncoderUtilization - nvmlDeviceGetEnforcedPowerLimit -* nvmlDeviceGetFanSpeed - nvmlDeviceGetGpuOperationMode - nvmlDeviceGetHandleByIndex -* nvmlDeviceGetHandleByIndex_v2 - nvmlDeviceGetHandleByPciBusId - nvmlDeviceGetHandleByPciBusId_v2 - nvmlDeviceGetHandleBySerial - nvmlDeviceGetHandleByUUID - nvmlDeviceGetIndex - nvmlDeviceGetInforomConfigurationChecksum - nvmlDeviceGetInforomImageVersion - nvmlDeviceGetInforomVersion - nvmlDeviceGetMaxClockInfo - nvmlDeviceGetMaxPcieLinkGeneration - nvmlDeviceGetMaxPcieLinkWidth - nvmlDeviceGetMemoryErrorCounter - nvmlDeviceGetMemoryInfo - nvmlDeviceGetMinorNumber - nvmlDeviceGetMultiGpuBoard -* nvmlDeviceGetName -* nvmlDeviceGetPciInfo - nvmlDeviceGetPciInfo_v2 -* nvmlDeviceGetPerformanceState - nvmlDeviceGetPersistenceMode - nvmlDeviceGetPowerManagementDefaultLimit - nvmlDeviceGetPowerManagementLimit - nvmlDeviceGetPowerManagementLimitConstraints - nvmlDeviceGetPowerManagementMode - nvmlDeviceGetPowerState (deprecated) -* nvmlDeviceGetPowerUsage - nvmlDeviceGetRetiredPages - nvmlDeviceGetRetiredPagesPendingStatus - nvmlDeviceGetSamples - nvmlDeviceGetSerial - nvmlDeviceGetSupportedClocksThrottleReasons - nvmlDeviceGetSupportedEventTypes - nvmlDeviceGetSupportedGraphicsClocks - nvmlDeviceGetSupportedMemoryClocks - nvmlDeviceGetTemperature - nvmlDeviceGetTemperatureThreshold - nvmlDeviceGetTotalEccErrors - nvmlDeviceGetUtilizationRates - nvmlDeviceGetUUID - nvmlDeviceGetVbiosVersion - nvmlDeviceGetViolationStatus - -*/ diff --git a/nvml.h b/nvml.h index 7c14850..16f367d 100644 --- a/nvml.h +++ b/nvml.h @@ -111,12 +111,6 @@ int wrap_nvml_get_tempC(wrap_nvml_handle *nvmlh, int wrap_nvml_get_fanpcnt(wrap_nvml_handle *nvmlh, int gpuindex, unsigned int *fanpcnt); -/* - * Query the current GPU speed from the CUDA device ID - */ -int wrap_nvml_get_clock(wrap_nvml_handle *nvmlh, - int gpuindex, int clktype, unsigned int *freq); - /* * Query the current GPU power usage in millwatts from the CUDA device ID *