/*! @page KnownIssues Known issues in the current version of NVML library
 *
 * This is a list of known NVML issues in the current driver:
 * - NVML Field Values from #251 - #273 (Power Smoothing, Clock Event Reason, and Sync Power Balancing related field values) have changed between 13.0 and 13.0U1/v580TRD2. 
 *   - Any application that is using these field IDs must be recompiled using the NVML header file from CUDA 13.0 Update 1 in order to continue working correctly with NVIDIA drivers v580 TRD2 and beyond.
 * - On systems where GPUs are NUMA nodes, the accuracy of FB memory utilization provided by NVML depends on the memory accounting of the operating system.
 *   This is because FB memory is managed by the operating system instead of the NVIDIA GPU driver.
 *   Typically, pages allocated from FB memory are not released even after the process terminates to enhance performance. In scenarios where
 *   the operating system is under memory pressure, it may resort to utilizing FB memory. Such actions can result in discrepancies in the accuracy of memory reporting.
 * - On Linux GPU Reset can't be triggered when there is pending GPU Operation Mode (GOM) change
 * - On Linux GPU Reset may not successfully change pending ECC mode. A full reboot may be required to enable the mode change.
 * - \ref nvmlAccountingStats supports only one process per GPU at a time (CUDA proxy server counts as one process).
 * - \ref nvmlAccountingStats_t.time reports time and utilization values starting from cuInit till process termination. Next driver versions might change this behavior slightly and account process only from cuCtxCreate till cuCtxDestroy.
 * - On GPUs from Fermi family current P0 clocks (reported by \ref nvmlDeviceGetClockInfo) can differ from max clocks by few MHz.
 * - The GPU hostname APIs are currently only supported on compatible GB200 platforms.
 */
/*! @page Changelog Change log of NVML library
 * This chapter list changes in API and bug fixes that were introduced to the library
 * \section changelog33 Changes between NVML v580 and v590 ===
 * - Add \ref NVML_INIT_FLAG_FORCE_INIT to force GPU initialization when a previous nvmlInit was called with NO_GPUS and NO_ATTACH flags
 * - Added \ref nvmlDeviceWorkloadPowerProfileUpdateProfiles_v1 to clear/set/clobber existing profiles from a single API.
 * - Deprecated \ref nvmlDeviceWorkloadPowerProfileSetRequestedProfiles to be removed entirely in CUDA 15.0.
 * - Deprecated \ref nvmlDeviceWorkloadPowerProfileClearRequestedProfiles to be removed entirely in CUDA 15.0.
 * - Added new field value 'NVML_FI_DEV_EDPP_MULTIPLIER' to report the current EDPp multiplier as a percentage.
 * - Added \ref nvmlDeviceGetUnrepairableMemoryFlag_v1 which returns whether or not there is unrepairable memory.
 * - Updated \ref nvmlDeviceGetVgpuSchedulerLog and \ref nvmlGpuInstanceGetVgpuSchedulerState to access the vGPU scheduler logs for the NVENC0 and NVENC1 engine.
 * - Added 14 new Power Soomthing fieldIds for Delayed Power Smoothing
 *    - \ref NVML_FI_PWR_SMOOTHING_PRIMARY_POWER_FLOOR
 *    - \ref NVML_FI_PWR_SMOOTHING_SECONDARY_POWER_FLOOR
 *    - \ref NVML_FI_PWR_SMOOTHING_MIN_PRIMARY_FLOOR_ACT_OFFSET
 *    - \ref NVML_FI_PWR_SMOOTHING_MIN_PRIMARY_FLOOR_ACT_POINT
 *    - \ref NVML_FI_PWR_SMOOTHING_WINDOW_MULTIPLIER
 *    - \ref NVML_FI_PWR_SMOOTHING_DELAYED_PWR_SMOOTHING_SUPPORTED
 *    - \ref NVML_FI_PWR_SMOOTHING_PROFILE_SECONDARY_POWER_FLOOR
 *    - \ref NVML_FI_PWR_SMOOTHING_PROFILE_PRIMARY_FLOOR_ACT_WIN_MULT
 *    - \ref NVML_FI_PWR_SMOOTHING_PROFILE_PRIMARY_FLOOR_TAR_WIN_MULT
 *    - \ref NVML_FI_PWR_SMOOTHING_PROFILE_PRIMARY_FLOOR_ACT_OFFSET
 *    - \ref NVML_FI_PWR_SMOOTHING_ADMIN_OVERRIDE_SECONDARY_POWER_FLOOR
 *    - \ref NVML_FI_PWR_SMOOTHING_ADMIN_OVERRIDE_PRIMARY_FLOOR_ACT_WIN_MULT
 *    - \ref NVML_FI_PWR_SMOOTHING_ADMIN_OVERRIDE_PRIMARY_FLOOR_TAR_WIN_MULT
 *    - \ref NVML_FI_PWR_SMOOTHING_ADMIN_OVERRIDE_PRIMARY_FLOOR_ACT_OFFSET
 * - Added 4 new Power Smoothing profile paramIds to set new Delayed Power Smoothing profile fields.
 *    - \ref NVML_POWER_SMOOTHING_PROFILE_PARAM_SECONDARY_POWER_FLOOR
 *    - \ref NVML_POWER_SMOOTHING_PROFILE_PARAM_PRIMARY_FLOOR_ACT_WIN_MULT
 *    - \ref NVML_POWER_SMOOTHING_PROFILE_PARAM_PRIMARY_FLOOR_TAR_WIN_MULT
 *    - \ref NVML_POWER_SMOOTHING_PROFILE_PARAM_PRIMARY_FLOOR_ACT_OFFSET
 * \section changelog32 Changes between NVML v575 and v580 ===
 * - Fixed bug with NVML_FI_PWR_SMOOTHING_* Field Value numbering, which was different than the v570 values.
 * - Adjusted NVML_FI_DEV_CLOCKS_EVENT_REASON_* and NVML_FI_DEV_POWER_SYNC_BALANCING_* field value numbering to resolve overlap with NVML_FI_PWR_SMOOTHING_* field values.
 * - Added \ref nvmlDeviceWorkloadPowerProfileUpdateProfiles_v1 to clear/set/clobber existing profiles from a single API.
 * - Added \ref nvmlDeviceSetRusdSettings_v1 to set RUSD (read only user shared data buffer) polling mask.
 * 
 * - Added \ref nvmlDeviceGetSramUniqueUncorrectedEccErrorCounts to get the counts of SRAM unique uncorrected ECC errors.
 * - Deprecated Applications Clocks APIs, which will be removed in CUDA 14.0:
 *    - \ref nvmlDeviceSetApplicationsClocks
 *    - \ref nvmlDeviceGetApplicationsClock
 *    - \ref nvmlDeviceGetDefaultApplicationsClock
 *    - \ref nvmlDeviceResetApplicationsClocks
 * - Deprecated \ref nvmlDeviceGetViolationStatus, which will be removed in CUDA 14.0
 * - Added \ref nvmlDeviceGetNvLinkInfo to query device NVLINK info.
 * - Added \ref nvmlDeviceGetPdi to retrieve the device GPU PDI.
 * - Added Multi-GPU mode NVLINK Encryption \ref NVML_CC_SYSTEM_MULTIGPU_NVLE
 * - Added V2 struct to \ref nvmlDeviceGetNvLinkInfo to query NVLINK Firmware info.
 * - Added \ref nvmlDeviceReadWritePRM_v1 to retrieve GPU PRM register contents
 * - Added \ref nvmlDeviceGetAddressingMode to retrieve the addressing mode for the device.
 * - Added \ref nvmlDeviceGetRepairStatus to get ECC status info.
 * - Added \ref nvmlDeviceGetGpuInstanceProfileInfoByIdV which allows for MIG GPU instance profile info to be queried with profileId instead of profile name.
 * - Updated nvmlGpuFabricInfoV_t to v3 to include a new Health Summary field, and new Incorrect Configuration statuses.
      - nvmlGpuFabricInfo_v2_t is deprecated and will be removed in a future release
 * - Added \ref nvmlDeviceGetPowerMizerMode_v1 to query the current and supported power mizer modes on Maxwell and newer gpus. Power mizer mode provides a hint to the driver as to how to manage the performance of the GPU.
 * - Added \ref nvmlDeviceSetPowerMizerMode_v1 to set the power mizer mode on Maxwell and newer gpus.
 * - Added new Incorrect Configuration Statuses to nvmlGpuFabricInfoV_t
 *    - NVML_GPU_FABRIC_HEALTH_MASK_INCORRECT_CONFIGURATION_INCOMPATIBLE_GPU_FW
 *    - NVML_GPU_FABRIC_HEALTH_MASK_INCORRECT_CONFIGURATION_INVALID_LOCATION
 * - Added \ref nvmlDeviceSetHostname_v1 and \ref nvmlDeviceGetHostname_v1 to allow custom GPU hostname configuration.
 * \section changelog31 Changes between NVML v570 and v575 ===
 *
 * - Added \ref nvmlSystemEventSetCreate to create a system event set.
 * - Added \ref nvmlSystemEventSetFree to free a system event set.
 * - Added \ref nvmlSystemRegisterEvents to register system events on a system event set.
 * - Added \ref nvmlSystemEventSetWait to wait for system event notification and obtain system event data.
 * - Added \ref nvmlGpuInstanceGetCreatableVgpus to query the currently creatable vGPU types on the user provided GPU Instance
 * - Added \ref nvmlVgpuTypeGetMaxInstancesPerGpuInstance to query the maximum number of vGPU instances per GPU Instance for the given vGPU type
 * - Added \ref nvmlGpuInstanceSetVgpuSchedulerState to set the vGPU scheduler state for the given GPU Instance
 * - Added \ref nvmlGpuInstanceGetActiveVgpus to query the currently active vGPU instances on the user provided GPU Instance
 * - Added \ref nvmlGpuInstanceGetVgpuSchedulerState to query the vGPU software scheduler state for the given GPU Instance.
 * - Added \ref nvmlGpuInstanceGetVgpuSchedulerLog to query the vGPU software scheduler logs for the given GPU Instance.
 * - Added \ref nvmlGpuInstanceGetVgpuTypeCreatablePlacements to query the creatable vGPU placement IDs of the vGPU type within a GPU instance
 * - Added \ref nvmlGpuInstanceSetVgpuHeterogeneousMode to enable or disable vGPU heterogenous mode for the GPU Instance.
 * - Added \ref nvmlGpuInstanceGetVgpuHeterogeneousMode to query the vGPU heterogenous mode for the GPU Instance.
 * - Updated \ref nvmlDeviceGetVgpuCapabilities to report whether GPU supports timesliced vGPU on MIG and whether MIG timesliced mode is enabled or not vGPU capabilities.
 * - Updated \ref nvmlDeviceSetVgpuCapabilities to set the MIG timesliced mode vGPU capability of a device.
 * - Updated \ref nvmlDeviceSetVgpuHeterogeneousMode to return \ref NVML_ERROR_NOT_SUPPORTED when in MIG mode.
 * - Updated \ref nvmlDeviceGetVgpuHeterogeneousMode to return \ref NVML_ERROR_NOT_SUPPORTED when in MIG mode.
 * - Updated \ref nvmlDeviceGetVgpuTypeCreatablePlacements to return \ref NVML_ERROR_NOT_SUPPORTED when in MIG mode.
 * - Updated \ref nvmlDeviceGetVgpuSchedulerLog to return \ref NVML_ERROR_NOT_SUPPORTED when in MIG mode.
 * - Updated \ref nvmlDeviceSetVgpuSchedulerState to return \ref NVML_ERROR_NOT_SUPPORTED when in MIG mode.
 * - Updated \ref nvmlDeviceGetVgpuSchedulerState to return \ref NVML_ERROR_NOT_SUPPORTED when in MIG mode.
 * - Added 3 new NVML_FI_DEV_C2C_LINK_ERROR fieldIds
 *    - \ref NVML_FI_DEV_C2C_LINK_ERROR_INTR
 *    - \ref NVML_FI_DEV_C2C_LINK_ERROR_REPLAY
 *    - \ref NVML_FI_DEV_C2C_LINK_ERROR_REPLAY_B2B
 * - Added new NVML_FI_DEV_C2C_LINK_POWER_STATE fieldId
 * - Added new CTXSW GPM Metrics
 * - Added \ref nvmlDeviceGetHandleByUUIDV that supports both the ASCII and binary format UUID to retrieve the device handle.
 * - Added 2 new NVML_FI_DEV_POWER_SYNC_BALANCING fieldIds
 *    - \ref NVML_FI_DEV_POWER_SYNC_BALANCING_FREQ
 *    - \ref NVML_FI_DEV_POWER_SYNC_BALANCING_AF
 * - Added 5 new Clock Event Reason Counters fieldIds
 *   - \ref NVML_FI_DEV_CLOCKS_EVENT_REASON_SW_POWER_CAP
 *   - \ref NVML_FI_DEV_CLOCKS_EVENT_REASON_SYNC_BOOST
 *   - \ref NVML_FI_DEV_CLOCKS_EVENT_REASON_SW_THERM_SLOWDOWN
 *   - \ref NVML_FI_DEV_CLOCKS_EVENT_REASON_HW_THERM_SLOWDOWN
 *   - \ref NVML_FI_DEV_CLOCKS_EVENT_REASON_HW_POWER_BRAKE_SLOWDOWN
 * - Updated \ref nvmlDeviceGetMemoryErrorCounter to better account for transient vs. permanent errors
 * - Added MIG profiles that can allocate all or none of Decoder, Encoder, JPEG and OFA engines.
 *
 * \section changelog30 Changes between NVML v565 Update and v570 ===
 * - Revert the fix for the issue where PCIe throughput (reported via \ref nvmlDeviceGetPcieThroughput and nvidia-smi -q) is 1000 times bigger than its actual value
 * - Added field values for data related to Power Smoothing
 * - Added \ref nvmlDevicePowerSmoothingActivatePresetProfile to activate a specific Preset Profile for Power Smoothing
 * - Added \ref nvmlDevicePowerSmoothingSetState to enable/disable the Power Smoothing feature
 * - Added \ref nvmlDevicePowerSmoothingUpdatePresetProfileParam to update parameters to preset profiles for Power Smoothing
 * - Added new enums for fieldId NVML_FI_DEV_NVLINK_GET_STATE to expose INACTIVE, ACTIVE, and SLEEP state for a link
 * - Added \ref nvmlDeviceGetMarginTemperature to retrieve the thermal margin temperature (distance to nearest slowdown threshold).
 * - Added \ref nvmlDeviceGetNvlinkSupportedBwModes to get all supported Nvlink Bandwidth modes
 * - Added \ref nvmlDeviceGetNvlinkBwMode to get the current Nvlink Bandwidth mode
 * - Added \ref nvmlDeviceSetNvlinkBwMode to set the Nvlink Bandwidth mode
 * - Added MIG profiles with support for graphics.
 * -  Added support for new recovery action - NVML_GPU_RECOVERY_ACTION_DRAIN_AND_RESET
 * -  Deprecated nvml fieldIds NVML_FI_DEV_RESET_STATUS and NVML_FI_DEV_DRAIN_AND_RESET_STATUS. Usee NVML_FI_DEV_GET_GPU_RECOVERY_ACTION instead
 * - Added \ref nvmlDeviceGetDramEncryptionMode and \ref nvmlDeviceSetDramEncryptionMode to query and configure DRAM Encryption Mode
 * - Added 3 new flags to GPU Fabric Health Mask
 *    - NVML_GPU_FABRIC_HEALTH_MASK_SHIFT_ROUTE_RECOVERY
 *    - NVML_GPU_FABRIC_HEALTH_MASK_SHIFT_ROUTE_UNHEALTHY
 *    - NVML_GPU_FABRIC_HEALTH_MASK_SHIFT_ACCESS_TIMEOUT_RECOVERY
 * - Added 4 new GPM metrics
 *    - NVML_GPM_METRIC_NVENC_0_UTIL
 *    - NVML_GPM_METRIC_NVENC_1_UTIL
 *    - NVML_GPM_METRIC_NVENC_2_UTIL
 *    - NVML_GPM_METRIC_NVENC_3_UTIL
 * - Added new counters for Nvlink5
 *    - \ref NVML_FI_DEV_NVLINK_COUNT_EFFECTIVE_ERRORS to get sum of the number of errors in each Nvlink packet
 *    - \ref NVML_FI_DEV_NVLINK_COUNT_EFFECTIVE_BER to get Effective BER for effective errors
 *    - \ref NVML_FI_DEV_NVLINK_COUNT_FEC_HISTORY_0 to 15 to get count of symbol errors that are corrected
 * - Swapped the values of field IDs \ref NVML_FI_DEV_IS_MIG_MODE_INDEPENDENT_MIG_QUERY_CAPABLE and \ref NVML_FI_DEV_NVLINK_GET_POWER_THRESHOLD_MAX to fix backwards compatibility with v550.
 * - New revision of nvmlPlatformInfo_t -- nvmlPlatformInfo_v2 has been added. In this version the following fields from v1 have been renamed
 *    - rackGuid to chassisSerialNumber
 *    - chassisPhysicalSlotNumber to slotNumber
 *    - computeSlotIndex to trayIndex
 *    - nodeIndex to hostId
 * - nvmlPlatformInfo_v1 is deprecated and will be removed in subsequent releases
 *
 * \section changelog29 Changes between NVML v560 Update and v565 ===
 * - Fixed the ECC error count mismatch between nvidia-smi query output and NVML APIs, \ref nvmlDeviceGetMemoryErrorCounter and \ref nvmlDeviceGetFieldValues.
 * - Added new value NVML_CC_SYSTEM_CPU_CAPS_AMD_SNP_VTOM for CC CPU capability reporting
 * - Added \ref nvmlDeviceGetCoolerInfo to retrieve a cooler's control signal characteristics and target that cooler cools.
 * - Added new value NVML_CC_SYSTEM_CPU_CAPS_AMD_SEV_SNP for CC CPU capability reporting
 * - Added \ref nvmlDeviceGetFanSpeedRPM to report the intended operating speed in rotations per minute (RPM) of the device's specified fan.
 * - Added \ref nvmlDeviceGetPerformanceModes to retrieve a performance modes string with all the performance modes defined for this device along with their associated GPU Clock and Memory Clock values.
 * - Added \ref nvmlDeviceGetCurrentClockFreqs to retrieve a string with the associated GPU Clock and Memory Clock values for the current pstate.
 * - Added \ref nvmlNvlinkVersion_t enum to define NvLink Version
 * - Added \ref nvmlDeviceGetPlatformInfo to retrieve the platform information of a device
 * - Added new event type nvmlEventTypeGpuUnavailableError
 * - Removed support for \p nvmlDeviceGetNvLinkCrcLaneErrorCounter \p nvmlDeviceGetNvLinkEccLaneErrorCounter \p nvmlDeviceGetNvLinkErrorCounter on Blackwell
 * - Removed support for fieldIds \ref NVML_FI_DEV_NVLINK_ERROR_DL_REPLAY \ref NVML_FI_DEV_NVLINK_ERROR_DL_RECOVERY \ref NVML_FI_DEV_NVLINK_ERROR_DL_CRC on Blackwell
 * - Added \ref nvmlVgpuInstanceGetRuntimeStateSize to get the vGPU runtime state size
 * - Updated nvmlDeviceGetVgpuTypeSupportedPlacements function to report both Heterogeneous and Homogeneous vGPU placements.
 * - Updated nvmlDeviceGetVgpuCapabilities to report the Homogeneous vGPU capability.
 * - Added \ref nvmlDeviceWorkloadPowerProfileGetProfilesInfo to retrieve Workload Power Profile Info
 * - Added \ref nvmlDeviceWorkloadPowerProfileGetCurrentProfiles to retrieve current Requested and Enforced Workload Power Profiles
 * - Added \ref nvmlDeviceWorkloadPowerProfileSetRequestedProfiles to set Requested Workload Power Profiles
 * - Added \ref nvmlDeviceWorkloadPowerProfileClearRequestedProfiles to clear Requested Performance Profiles
 * - Added new event type nvmlEventTypeGpuRecoveryAction
 * - Added new fieldId to query gpu recovery action NVML_FI_DEV_GET_GPU_RECOVERY_ACTION
 * - Deprecated fieldIds
 *    - \ref NVML_FI_DEV_NVLINK_COUNT_VL15_DROPPED to get Number of VL15 MADs dropped on a link in NVLink5
 *    - \ref NVML_FI_DEV_NVLINK_COUNT_RAW_BER_LANE0 to get BER per lane for lane 0
 *    - \ref NVML_FI_DEV_NVLINK_COUNT_RAW_BER_LANE1 to get BER per lane for lane 1
 *    - \ref NVML_FI_DEV_NVLINK_COUNT_RAW_BER to get BER per link. Sum of all the raw errors per lane/Bits received per link
 *    - \ref NVML_FI_DEV_NVLINK_COUNT_EFFECTIVE_ERRORS to get Sum of the number of errors in each Nvlink packet
 *    - \ref NVML_FI_DEV_NVLINK_COUNT_EFFECTIVE_BER to get Effective BER for effective errors
 *
 * \section changelog28 Changes between NVML v555 Update and v560 ===
 *
 * - Added field values NVML_FI_DEV_PCIE_OUTBOUND_ATOMICS_MASK and NVML_FI_DEV_PCIE_INBOUND_ATOMICS_MASK for nvmlDeviceGetFieldValues.
 * - Added field ids NVML_FI_DEV_RESET_STATUS and NVML_FI_DEV_DRAIN_AND_RESET_STATUS which correspond to the nvidia-smi output.
 * - Added NVML_DEVICE_ARCH_T23X architecture type.
 * - Added \ref nvmlVgpuTypeGetBAR1Info to query the BAR1 information of a vGPU type.
 * - Added new event types, nvmlEventTypeSingleBitEccErrorStorm, nvmlEventTypeDramRetirementEvent, nvmlEventTypeDramRetirementFailure, nvmlEventTypeNonFatalPoisonError and nvmlEventTypeFatalPoisonError.
 * - Added \ref nvmlSystemGetDriverBranch to query the driver branch information.
 *
 * \section changelog27 Changes between NVML v550 Update and v555 ===
 *
 * - Added \ref nvmlDeviceGetClockOffsets to query min, max and current clock offset value on a Maxwell and later GPU for a specified clock.
 * - Added \ref nvmlDeviceSetClockOffsets to control clock offset value on a Maxwell and later GPU for a specified clock.
 * - Added new fieldIds for Nvlink5 telemetry on Blackwell
 *    - \ref NVML_FI_DEV_NVLINK_COUNT_XMIT_PACKETS to get Total Tx packets on the link in NVLink5
 *    - \ref NVML_FI_DEV_NVLINK_COUNT_XMIT_BYTES to get Total Tx bytes on the link in NVLink5
 *    - \ref NVML_FI_DEV_NVLINK_COUNT_RCV_PACKETS to get Total Rx packets on the link in NVLink5
 *    - \ref NVML_FI_DEV_NVLINK_COUNT_RCV_BYTES to get Total Rx bytes on the link in NVLink5
 *    - \ref NVML_FI_DEV_NVLINK_COUNT_VL15_DROPPED to get Number of VL15 MADs dropped on a link in NVLink5
 *    - \ref NVML_FI_DEV_NVLINK_COUNT_MALFORMED_PACKET_ERRORS to get Number of packets Rx on a link where packets are malformed
 *    - \ref NVML_FI_DEV_NVLINK_COUNT_BUFFER_OVERRUN_ERRORS to get Number of packets that were discarded on Rx due to buffer overrun
 *    - \ref NVML_FI_DEV_NVLINK_COUNT_RCV_ERRORS to get Total number of packets with errors Rx on a link
 *    - \ref NVML_FI_DEV_NVLINK_COUNT_RCV_REMOTE_ERRORS to get Total number of packets Rx - stomp/EBP marker
 *    - \ref NVML_FI_DEV_NVLINK_COUNT_RCV_GENERAL_ERRORS to get Total number of packets Rx with header mismatch
 *    - \ref NVML_FI_DEV_NVLINK_COUNT_LOCAL_LINK_INTEGRITY_ERRORS to get Total number of times that the count of local errors exceeded a threshold
 *    - \ref NVML_FI_DEV_NVLINK_COUNT_XMIT_DISCARDS to get Total number of tx error packets that were discarded
 *    - \ref NVML_FI_DEV_NVLINK_COUNT_LINK_RECOVERY_SUCCESSFUL_EVENTS to get Number of times link went from Up to recovery, succeeded and link came back up
 *    - \ref NVML_FI_DEV_NVLINK_COUNT_LINK_RECOVERY_FAILED_EVENTS to get Number of times link went from Up to recovery, failed and link was declared down
 *    - \ref NVML_FI_DEV_NVLINK_COUNT_LINK_RECOVERY_EVENTS to get Number of times link went from Up to recovery, irrespective of the result
 *    - \ref NVML_FI_DEV_NVLINK_COUNT_RAW_BER_LANE0 to get BER per lane for lane 0
 *    - \ref NVML_FI_DEV_NVLINK_COUNT_RAW_BER_LANE1 to get BER per lane for lane 1
 *    - \ref NVML_FI_DEV_NVLINK_COUNT_RAW_BER to get BER per link. Sum of all the raw errors per lane/Bits received per link
 *    - \ref NVML_FI_DEV_NVLINK_COUNT_EFFECTIVE_ERRORS to get Sum of the number of errors in each Nvlink packet
 *    - \ref NVML_FI_DEV_NVLINK_COUNT_EFFECTIVE_BER to get Effective BER for effective errors
 *    - \ref NVML_FI_DEV_NVLINK_COUNT_SYMBOL_ERRORS to get Number of errors in rx symbols
 *    - \ref NVML_FI_DEV_NVLINK_COUNT_SYMBOL_BER to get BER for symbol errors
 * - Added two new field ids NVML_FI_DEV_PCIE_COUNT_TX_BYTES and NVML_FI_DEV_PCIE_COUNT_RX_BYTES for nvmlDeviceGetFieldValues.
 * - Added new API nvmlDeviceGetCapabilities with the first capability bit NVML_DEV_CAP_EGM for Extended GPU Memory (EGM) capability.
 * - Added multiGpuMode display on CC enabled system via new API nvmlSystemGetConfComputeSettings or "nvidia-smi conf-compute --get-multigpu-mode" or "nvidia-smi conf-compute -mgm".
 * - Added new field ID \ref NVML_FI_DEV_NVLINK_GET_POWER_THRESHOLD_MAX to get the Max Nvlink Power Threshold for a device.
 * - Deprecated \ref nvmlDeviceGetTemperature and replaced with a new API \ref nvmlDeviceGetTemperatureV to retrieve device temperature.
 * - Added new field ID \ref NVML_VGPU_DRIVER_CAP_WARM_UPDATE and NVML_DEVICE_VGPU_CAP_WARM_UPDATE to query whether the driver and the device supports FSR and warm update of vGPU host driver without terminating the running guest VM respectively.
 * - Added new field ID \ref NVML_FI_DEV_NVLINK_GET_POWER_THRESHOLD_MIN to get the Min Nvlink Power Threshold for a device.
 * - Added new field ID \ref NVML_FI_DEV_NVLINK_GET_POWER_THRESHOLD_UNITS to get the Units of the Nvlink Power Threshold for a device.
 * - Added new field ID \ref NVML_FI_DEV_NVLINK_GET_POWER_THRESHOLD_SUPPORTED to get if Nvlink Power Threshold is supported for a device.
 *
 *
 * \section changelog26 Changes between NVML v545 Update and v550 ===
 *
 * - Added \ref nvmlDeviceGetNumaNodeId to query the NUMA node of a GPU.
 * - Fix the issue where PCIe throughput (reported via nvmlDeviceGetPcieThroughput and nvidia-smi -q) is 1000 times bigger than its actual value.
 * - Added new GPM metric Id NVML_GPM_METRIC_NVOFA_1_UTIL to \ref nvmlGpmMetricId_t.
 * - Added new field ID \ref NVML_FI_DEV_IS_MIG_MODE_INDEPENDENT_MIG_QUERY_CAPABLE, to check MIG query capable device irrespective of MIG mode.
 * - Deprecated NVML_P2P_CAPS_INDEX_PROP and added NVML_P2P_CAPS_INDEX_PCI to reflect the same P2P capability.
 * - Added \ref nvmlDeviceGetProcessesUtilizationInfo to retrieve the recent utilization and process ID for all running processes.
 * - Added new struct \ref nvmlProcessesUtilizationInfo_v1_t, which includes the new utilization of NVJPG and NVOFA.
 * - Added \ref nvmlDeviceGetVgpuInstancesUtilizationInfo to retrieve the recent utilization for vGPU instances running on a physical GPU.
 * - Added \ref nvmlDeviceGetVgpuProcessesUtilizationInfo to retrieve the recent utilization for processes running on vGPU instances on a physical GPU.
 * - Added \ref nvmlDeviceSetVgpuHeterogeneousMode to enable or disable vGPU heterogenous mode for the device.
 * - Added \ref nvmlDeviceGetVgpuHeterogeneousMode to query the vGPU heterogenous mode for the device.
 * - Added \ref nvmlVgpuInstanceGetPlacementId to query placement ID of the active vGPU instance.
 * - Added \ref nvmlDeviceGetVgpuTypeSupportedPlacements to query the supported vGPU placement IDs of a vGPU type.
 * - Added \ref nvmlDeviceGetVgpuTypeCreatablePlacements to query the creatable vGPU placement IDs of a vGPU type.
 * - Added support to display confidential compute protected memory along with fb & bar1 in nvidia-smi pmon & dmon commands.
 * - Added \ref nvmlDeviceGetGpuFabricInfoV to query Gpu Fabric Probe Info for the device.
 * - Deprecated \ref nvmlDeviceGetGpuFabricInfo. This function should not be used, and will be removed in a future release. Use \ref nvmlDeviceGetGpuFabricInfoV instead.
 * - Modified \ref nvmlDeviceGetGpuInstanceProfileInfo and \ref nvmlDeviceGetGpuInstancePossiblePlacements_v2 to no longer require MIG being enabled
 * - Added \ref nvmlSystemSetConfComputeKeyRotationThresholdInfo to set confidential compute key rotation threshold.
 * - Added \ref nvmlSystemGetConfComputeKeyRotationThresholdInfo to query confidential compute key rotation threshold detail.
 * - Added \ref nvmlDeviceSetVgpuCapabilities to set the desirable vGPU capability of a device.
 *
 *
 * \section changelog25 Changes between NVML v535 Update and v545 ===
 *
 * - Added a new error code \ref NVML_ERROR_GPU_NOT_FOUND to be returned if no supported GPUS are found during initialization.
 * - In \ref nvmlGpuFabricInfo_t \p partitionId has been renamed to \p cliqueId.
 * - Added new versioned structs \ref nvmlGpuInstanceProfileInfo_v3_t and \ref nvmlComputeInstanceProfileInfo_v3_t.
 * - Added \ref nvmlDeviceGetLastBBXFlushTime for retrieving the timestamp and duration of the latest flush of the BBX object to the inforom storage.
 * - Added \ref NVML_POWER_SCOPE_MEMORY to report out power usage for GPU Memory.
 * - Added \ref nvmlDeviceGetPciInfoExt which expands \ref nvmlDeviceGetPciInfo_v3 to also report PCI base and sub classcodes.
 * - Added new struct \ref nvmlPciInfoExt_v1_t, which is used in \ref nvmlDeviceGetPciInfoExt.
 * - Added \ref nvmlDeviceGetRunningProcessDetailList api to get information about Compute, Graphics or MPS-Compute processes running on a GPU with protected memory usage info.
 *
 *
 * \section changelog24 Changes between NVML v530 Update and v535 ===
 *
 * - Fixed \ref nvmlDeviceGetMemoryErrorCounter and \ref nvmlDeviceGetFieldValues to return correct SRAM volatile total error counts.
 * - Added \ref nvmlDeviceGetSramEccErrorStatus to query SRAM ECC error status for the device.
 * - Added \ref nvmlDeviceGetModuleId for getting device module id
 * - Updated \ref nvmlDeviceGetPowerSource API to report undersized power source.
 * - Added \ref nvmlDeviceGetJpgUtilization and \ref nvmlDeviceGetOfaUtilization APIs
 * - Added \ref nvmlSystemGetNvlinkBwMode and \ref nvmlSystemSetNvlinkBwMode APIs
 * - Added \ref nvmlDeviceSetVgpuSchedulerState to set the vGPU scheduler state.
 * - Added new field ID \ref NVML_FI_DEV_IS_RESETLESS_MIG_SUPPORTED for device's resetless MIG capability
 * - Added \ref nvmlDeviceGetComputeRunningProcesses_v3 to get information about Compute processes running on a GPU.
 * - Added \ref nvmlDeviceGetGraphicsRunningProcesses_v3 to get information about Graphics processes running on a GPU.
 * - Added \ref nvmlDeviceGetMPSComputeRunningProcesses_v3 to get information about MPS-Compute processes running on a GPU.
 * - Added \ref nvmlDeviceGetRunningProcessDetailList to get information about Compute, Graphics or MPS-Compute processes running on a GPU with protected memory usage info. Currently returns NVML_ERROR_NOT_SUPPORTED. Functionality will be implemented in next release.
 * - Added new field ID \ref NVML_FI_DEV_PCIE_COUNT_CORRECTABLE_ERRORS for PCIe correctable errors counter
 * - Added new field ID \ref NVML_FI_DEV_PCIE_COUNT_NAKS_RECEIVED for PCIe NAK Receive counter
 * - Added new field ID \ref NVML_FI_DEV_PCIE_COUNT_RECEIVER_ERROR for PCIe receiver error counter
 * - Added new field ID \ref NVML_FI_DEV_PCIE_COUNT_BAD_TLP for PCIe bad TLP counter
 * - Added new field ID \ref NVML_FI_DEV_PCIE_COUNT_NAKS_SENT for NAK Send counter
 * - Added new field ID \ref NVML_FI_DEV_PCIE_COUNT_BAD_DLLP for PCIe bad DLLP counter
 * - Added new field ID \ref NVML_FI_DEV_PCIE_COUNT_NON_FATAL_ERROR for PCIe non fatal error counter
 * - Added new field ID \ref NVML_FI_DEV_PCIE_COUNT_FATAL_ERROR for PCIe fatal error counter
 * - Added new field ID \ref NVML_FI_DEV_PCIE_COUNT_UNSUPPORTED_REQ for PCIe unsupported request counter
 * - Added new field ID \ref NVML_FI_DEV_PCIE_COUNT_LCRC_ERROR for PCIe LCRC error counter
 * - Added new field ID \ref NVML_FI_DEV_PCIE_COUNT_LANE_ERROR for per lane error counter with scope as PCIe lane number.
 * - Added \ref nvmlDeviceGetPowerUsage to retrieve current power usage
 * - Added \ref nvmlDeviceGetTotalEnergyConsumption to get current energy consumption
 * - Added \ref nvmlDeviceSetPowerManagementLimit_v2 to set the power limit
 * - Renamed nvmlDeviceCcuGetStreamState to nvmlGpmQueryIfStreamingEnabled and nvmlDeviceCcuSetStreamState to nvmlGpmSetStreamingEnabled.
 *
 *
 * \section changelog23 Changes between NVML v525 Update and v530 ===
 *
 * - Fixed a typo in nvmlGpuP2PStatus_t: added a new enum entry for NVML_P2P_STATUS_CHIPSET_NOT_SUPPORTED with the same numeric value as the existing erroneous entry ("NVML_P2P_STATUS_CHIPSET_NOT_SUPPORED")
 * - Added \ref nvmlDeviceGetVgpuSchedulerLog to fetch the vGPU software scheduler logs.
 * - Added \ref nvmlDeviceGetVgpuSchedulerState to fetch the vGPU software scheduler state.
 * - Added \ref nvmlDeviceGetVgpuSchedulerCapabilities to fetch the vGPU software scheduler capabilities.
 *
 *
 * \section changelog22 Changes between NVML v520 Update and v525 ===
 *
 * - Added \ref nvmlDeviceSetNvLinkDeviceLowPowerThreshold to set the NvLink low power threshold.
 * - Added \p nvmlDeviceGetPcieAtomicCaps to report PCIe atomic capabilities.
 * - Added \p nvmlDeviceCcuGetStreamState API to report the counter collection unit stream state.
 * - Added \p nvmlDeviceCcuSetStreamState API to set the counter collection unit stream state.
 * - Removed support for NVML_FI_DEV_LINK_SPEED_MBPS_L{0..} field Ids in Hopper. Replaced with NVML_FI_DEV_NVLINK_GET_SPEED with scope as link Id.
 * - Removed support for NVML_FI_DEV_NVLINK_CRC_FLIT_ERROR_COUNT{0..} field Ids in Hopper. Replaced with NVML_FI_DEV_NVLINK_ERROR_DL_CRC with scope as link Id.
 * - Removed support for NVML_FI_DEV_NVLINK_REPLAY_ERROR_COUNT_L{0..} field Ids in Hopper. Replaced with NVML_FI_DEV_NVLINK_ERROR_DL_REPLAY with scope as link Id.
 * - Removed support for NVML_FI_DEV_NVLINK_RECOVERY_ERROR_COUNT_{0..} field Ids in Hopper. Replaced with NVML_FI_DEV_NVLINK_ERROR_DL_RECOVERY with scope as link Id.
 * - Added new field ID \ref NVML_FI_DEV_NVLINK_GET_STATE to get nvlink state
 * - Added new field ID \ref NVML_FI_DEV_NVLINK_GET_VERSION to get nvlink version
 * - Added new field ID \ref NVML_FI_DEV_C2C_LINK_COUNT to get C2C link count
 * - Added new field ID \ref NVML_FI_DEV_C2C_LINK_GET_STATUS to get C2C link status
 * - Added new field ID \ref NVML_FI_DEV_C2C_LINK_GET_MAX_BW to get C2C link bandwidth
 *
 *
 * \section changelog21 Changes between NVML v515 Update and v520 ===
 *
 * - Added \ref nvmlDeviceGetMemClkVfOffset API to report the MemClk VF offset value.
 * - Added \ref nvmlDeviceGetMemClkMinMaxVfOffset API to report the Memory clock min and max VF offset that user can set for a specified GPU.
 * - Added \ref nvmlDeviceGetGpcClkMinMaxVfOffset API to report the Graphics clock min and max VF offset that user can set for a specified GPU.
 * - Added \ref nvmlGpmMetricsGet to calculate GPM metrics from two GPM samples
 * - Added \ref nvmlGpmSampleFree to free allocated GPM sample
 * - Added \ref nvmlGpmSampleAlloc to allocate a GPM sample
 * - Added \ref nvmlGpmSampleGet to retrieve a GPM snapshot
 * - Added \ref nvmlGpmQueryDeviceSupport to query whether a device supports GPM
 * - Added \ref nvmlDeviceGetFanControlPolicy_v2 API to report the control policy for a specified GPU fan.
 * - Added \ref nvmlDeviceSetFanControlPolicy API to set the control policy for a specified GPU fan.
 *
 *
 * \section changelog20 Changes between NVML v510 Update and v515 ===
 *
 * - Added \ref nvmlDeviceGetMinMaxClockOfPState API to report the min and max clocks of some clock domain for a given PState.
 * - Added \ref nvmlDeviceGetSupportedPerformanceStates API to get all supported Performance States (P-States) for the GPU.
 * - Added \ref nvmlDeviceGetGpcClkVfOffset API to report the GPCCLK VF offset value.
 * - Added \ref nvmlDeviceGetMinMaxFanSpeed API to report the min and max fan speed that user can set for a specified GPU fan.
 *
 *
 * \section changelog19 Changes between NVML v495 Update and v510 ===
 *
 * - Added \ref nvmlDeviceGetGpuInstanceProfileInfoV and \ref nvmlGpuInstanceGetComputeInstanceProfileInfoV APIs to include the profile name in their output.
 * - Added \ref nvmlDeviceGetMemoryBusWidth API to report the GPU's Memory Bus Width.
 * - Added \ref nvmlDeviceGetPcieLinkMaxSpeed API to report the GPU's PCIe Max Speed.
 * - Added \ref nvmlDeviceGetPowerSource API to report the GPU's power source as AC or battery.
 * - Added \ref nvmlDeviceGetNumFans API to report the GPU's number of fans.
 * - Added \ref nvmlDeviceGetNumGpuCores API to report the GPU's number of cores.
 * - Added \ref nvmlDeviceGetMemoryInfo_v2. The new version accounts separately for system-reserved memory, and includes it in the used memory amount. The previous version of the API reduced the total memory amount by the amount of system-reserved memory.
 * - Added \ref nvmlDeviceGetAdaptiveClockInfoStatus API to report the status of adaptive clocking for the GPU.
 *
 *
 * \section changelog18 Changes between NVML v465 Update and v470 ===
 *
 * - Added new MIG GPU instance profile NVML_GPU_INSTANCE_PROFILE_1_SLICE_REV1.
 * - Added \ref nvmlDeviceGetGpuInstancePossiblePlacements_v2. The previous version of the API will not support the profiles with possible placements greater than its total capacity, such as NVML_GPU_INSTANCE_PROFILE_1_SLICE_REV1.
 *
 *
 * \section changelog17 Changes between NVML v460 Update and v465 ===
 *
 * - Added new NVML_BRAND_* enumeration values for NVIDIA, NVIDIA_RTX, GEFORCE_RTX, QUADRO_RTX and TITAN_RTX
 * - Updated \ref nvmlDeviceGetHandleByUUID to make it MIG-aware.
 * - Updated \ref nvmlDeviceGetUUID to return MIG UUIDs in the canonical format, 'MIG-UUID'.
 * - Updated \ref nvmlDeviceGetHandleByUUID to accept both UUID formats, 'MIG-UUID' and 'MIG-GPU UUID/GID/CID'.
 * - The \ref nvmlDeviceSetAPIRestriction and \ref nvmlDeviceGetAPIRestriction APIs would no longer support the ability to toggle root-only requirement for \ref nvmlDeviceSetApplicationsClocks and \ref nvmlDeviceResetApplicationsClocks.
 *
 *
 * \section changelog16 Changes between NVML v450 Update and v460 ===
 *
 * - Added \ref nvmlDeviceCreateGpuInstanceWithPlacement to allow placement specification when creating a new MIG GPU instance.
 *
 *
 * \section changelog15 Changes between NVML v445 Update and v450 ===
 *
 * - Updated \ref nvmlDeviceGetFanSpeed and \ref nvmlDeviceGetFanSpeed_v2 for allowing fan speeds greater than 100% to be reported.
 * - Added \ref nvmlDeviceGetCpuAffinityWithinScope to determine the closest processor(s) within a NUMA node or socket.
 * - Added \ref nvmlDeviceGetMemoryAffinity to determine the closest NUMA node(s) within a NUMA node or socket.
 * - Added support to query and disable MIG mode on Windows.
 *
 *
 * \section changelog14 Changes between NVML v418 Update and v445 ===
 *
 * - Added support for NVIDIA Ampere architecture.
 * - Added support for Multi Instance GPU management. Refer "Multi Instance GPU Management" section for details.
 *
 *
 * \section changelog13 Changes between NVML v361 Update and v418
 *
 * - Support for Volta and Turing architectures, bug fixes, performance improvements, and new features
 *
 *
 * \section changelog12 Changes between NVML v349 Update and v361
 *
 * - Added \ref nvmlDeviceGetBoardPartNumber to return GPU part numbers
 * - Removed support for exclusive thread compute mode (Deprecated in 7.5)
 * - Added NVML_CLOCK_VIDEO (encoder/decoder) clock type as a supported clock type for \ref nvmlDeviceGetClockInfo and \ref nvmlDeviceGetMaxClockInfo. 
 *
 *
 * \section changelog11 Changes between NVML v346 Update and v349
 *
 * The following new functionality is exposed on NVIDIA display drivers version 349 Production or later
 * - Updated \ref nvmlDeviceGetMemoryInfo to report Used/Free memory under Windows WDDM mode
 * - Added \ref nvmlDeviceGetTopologyCommonAncestor to find the common path between two devices
 * - Added \ref nvmlDeviceGetTopologyNearestGpus to get a set of GPUs given a path level
 * - Added \ref nvmlSystemGetTopologyGpuSet to retrieve a set of GPUs with a given CPU affinity
 * - Updated \ref nvmlDeviceGetAccountingPids, \ref nvmlDeviceGetAccountingBufferSize and \ref nvmlDeviceGetAccountingStats to report accounting information for both active and terminated processes. The execution time field in \ref nvmlAccountingStats_t structure is populated only when the process is terminated.
 *
 *
 * \section changelog10 Changes between NVML v340 Update and v346
 *
 * The following new functionality is exposed on NVIDIA display drivers version 346 Production or later
 * - added the public APIs nvmlDeviceGetPcieReplayCounter and nvmlDeviceGetPcieThroughput
 * - Discontinued Perl bindings support
 * - Added \p nvmlDeviceGetGraphicsRunningProcesses_v2 to get information about Graphics processes running on a GPU.
 * 
 *
 * \section changelog9 Changes between NVML v331 Update and v340
 *
 * The following new functionality is exposed on NVIDIA display drivers version 340 Production or later
 * - Added \ref nvmlDeviceGetSamples to get recent power, utilization and clock samples for the GPU.
 * - Added \ref nvmlDeviceGetTemperatureThreshold to retrieve temperature threshold information.
 * - Added \ref nvmlDeviceGetBrand to retrieve brand information (e.g. Tesla, Quadro, etc.)
 * - Added support for K40d and K80
 * - Added nvmlDeviceGetTopology internal API to retrieve path info between PCI devices (remove this for DITA)
 * - Added \ref nvmlDeviceGetViolationStatus to get the duration of time during which the device was throttled (lower than requested clocks) due to thermal or power constraints.
 * - Added \ref nvmlDeviceGetEncoderUtilization and \ref nvmlDeviceGetDecoderUtilization APIs
 * - Added \ref nvmlDeviceGetCpuAffinity to determine the closest processor(s) affinity to a specific GPU
 * - Added \ref nvmlDeviceSetCpuAffinity to bind a specific GPU to the closest processor
 * - Added \ref nvmlDeviceClearCpuAffinity to unbind a specific GPU 
 * - Added \ref nvmlDeviceGetBoardId to get a unique boardId for the running system
 * - Added \ref nvmlDeviceGetMultiGpuBoard to get whether the device is on a multiGPU board
 * - Added \ref nvmlDeviceGetAutoBoostedClocksEnabled and nvmlDeviceSetAutoBoostedClocksEnabled for querying and setting the state of auto boosted clocks on supporting hardware. 
 * - Added \ref nvmlDeviceSetDefaultAutoBoostedClocksEnabled for setting the default state of auto boosted clocks on supporting hardware.
 * 
 *
 * \section changelog8 Changes between NVML v5.319 Update and v331
 *
 * The following new functionality is exposed on NVIDIA display drivers version 331 Production or later
 * - Added \ref nvmlDeviceGetMinorNumber to get the minor number for the device.
 * - Added \ref nvmlDeviceGetBAR1MemoryInfo to get BAR1 total, available and used memory size.
 * - Added \ref nvmlDeviceGetBridgeChipInfo to get the information related to bridge chip firmware.
 * - Added enforced power limit query API \ref nvmlDeviceGetEnforcedPowerLimit
 * - Updated \ref nvmlEventSetWait_v2 to return xid event data in case of xid error event.
 * - Added support for K8
 *
 * \section changelog7 Changes between NVML v5.319 RC and v5.319 Update
 *
 * The following new functionality is exposed on NVIDIA display drivers version 319 Update or later
 *
 * - Added \ref nvmlDeviceSetAPIRestriction and \ref nvmlDeviceGetAPIRestriction, with initial ability to toggle root-only requirement for \ref nvmlDeviceSetApplicationsClocks and \ref nvmlDeviceResetApplicationsClocks.
 *
 * \section changelog6 Changes between NVML v4.304 and v5.319 RC 
 * 
 * The following new functionality is exposed on NVIDIA display drivers version 319 Production or later
 *
 * - IMPORTANT: Added _v2 versions of \ref nvmlDeviceGetHandleByIndex_v2 and \ref nvmlDeviceGetCount_v2 that also count devices not accessible by current user
 *    - IMPORTANT: nvmlDeviceGetHandleByIndex_v2 (default) can also return NVML_ERROR_NO_PERMISSION
 * - Added nvmlInit_v2 and nvmlDeviceGetHandleByIndex_v2 that is safer and thus recommended function for initializing the library
 *    - nvmlInit_v2 lazily initializes only requested devices (queried with nvmlDeviceGetHandle*)
 *    - nvml.h defines nvmlInit_v2 and nvmlDeviceGetHandleByIndex_v2 as default functions
 * - Added \ref nvmlDeviceGetIndex
 * - Added \ref NVML_ERROR_GPU_IS_LOST to report GPUs that have fallen off the bus.
 *    - Note: All NVML device APIs can return this error code, as a GPU can fall off the bus at any time.
 * - Added new class of APIs for gathering process statistics (\ref nvmlAccountingStats)
 * - Application Clocks are no longer supported on GPU's from Quadro product line
 * - Added APIs to support dynamic page retirement.  See \ref nvmlDeviceGetRetiredPages and 
 *   \ref nvmlDeviceGetRetiredPagesPendingStatus
 * - Renamed nvmlClocksThrottleReasonUserDefinedClocks to nvmlClocksThrottleReasonApplicationsClocksSetting. Old name is deprecated and can be removed in one of the next major releases.
 * - Added \ref nvmlDeviceGetDisplayActive and updated documentation to clarify how it differs from \ref nvmlDeviceGetDisplayMode
 *
 * \section changelog5 Changes between NVML v4.304 RC and v4.304 Production
 * 
 * The following new functionality is exposed on NVIDIA display drivers version 304 Production or later
 * 
 * - Added \ref nvmlDeviceGetGpuOperationMode and \ref nvmlDeviceSetGpuOperationMode
 *
 * \section changelog4 Changes between NVML v3.295 and v4.304 RC
 * 
 * The following new functionality is exposed on NVIDIA display drivers version 304 RC or later
 * 
 * - Added \ref nvmlDeviceGetInforomConfigurationChecksum and \ref nvmlDeviceValidateInforom
 * - Added new error return value for initialization failure due to kernel module not receiving interrupts
 * - Added \ref nvmlDeviceSetApplicationsClocks, \ref nvmlDeviceGetApplicationsClock, \ref nvmlDeviceResetApplicationsClocks
 * - Added \ref nvmlDeviceGetSupportedMemoryClocks and \ref nvmlDeviceGetSupportedGraphicsClocks
 * - Added \ref nvmlDeviceGetPowerManagementLimitConstraints, \ref nvmlDeviceGetPowerManagementDefaultLimit and \ref nvmlDeviceSetPowerManagementLimit
 * - Added \ref nvmlDeviceGetInforomImageVersion
 * - Expanded \ref nvmlDeviceGetUUID to support all CUDA capable GPUs
 * - Deprecated \ref nvmlDeviceGetDetailedEccErrors in favor of \ref nvmlDeviceGetMemoryErrorCounter
 * - Added \ref NVML_MEMORY_LOCATION_TEXTURE_MEMORY to support reporting of texture memory error counters
 * - Added \ref nvmlDeviceGetCurrentClocksThrottleReasons and \ref nvmlDeviceGetSupportedClocksThrottleReasons
 * - \ref NVML_CLOCK_SM is now also reported on supported Kepler devices.
 * - Dropped support for GT200 based Tesla brand GPUs: C1060, M1060, S1070
 * 
 * \section changelog3 Changes between NVML v2.285 and v3.295
 * 
 * The following new functionality is exposed on NVIDIA display drivers version 295 or later
 * 
 * - deprecated \ref nvmlDeviceGetHandleBySerial in favor of newly added \ref nvmlDeviceGetHandleByUUID
 * - Marked the input parameters of \ref nvmlDeviceGetHandleBySerial, \ref nvmlDeviceGetHandleByUUID and \ref nvmlDeviceGetHandleByPciBusId_v2 as const
 * - Added \ref nvmlDeviceOnSameBoard
 * - Added \ref nvmlConstants defines
 * - Added \ref nvmlDeviceGetMaxPcieLinkGeneration, \ref nvmlDeviceGetMaxPcieLinkWidth, \ref nvmlDeviceGetCurrPcieLinkGeneration,\ref nvmlDeviceGetCurrPcieLinkWidth
 * - Format change of \ref nvmlDeviceGetUUID output to match the UUID standard. This function will return a different value.
 * - \ref nvmlDeviceGetDetailedEccErrors will report zero for unsupported ECC error counters when a subset of ECC error counters are supported
 * \section changelog1 Changes between NVML v1.0 and v2.285
 * 
 * The following new functionality is exposed on NVIDIA display drivers version 285 or later
 * 
 * - Added possibility to query separately current and pending driver model with \p nvmlDeviceGetDriverModel
 * - Added API \ref nvmlDeviceGetVbiosVersion function to report VBIOS version. 
 * - Added pciSubSystemId to \ref nvmlPciInfo_t struct
 * - Added API \ref nvmlErrorString function to convert error code to string
 * - Updated docs to indicate we support M2075 and C2075
 * - Added API \ref nvmlSystemGetHicVersion function to report HIC firmware version
 * - Added NVML versioning support
 *    - Functions that changed API and/or size of structs have appended versioning suffix 
 *      (e.g. nvmlDeviceGetPciInfo_v2). Appropriate C defines have been
 *      added that map old function names to the newer version of the function
 * - Added support for concurrent library usage by multiple libraries
 * - Added API \ref nvmlDeviceGetMaxClockInfo function for reporting device's clock limits
 * - Added new error code NVML_ERROR_DRIVER_NOT_LOADED used by \ref nvmlInit_v2 
 * - Extended \ref nvmlPciInfo_t struct with new field: sub system id
 * - Added NVML support on Windows guest account
 * - Changed format of pciBusId string (to XXXX:XX:XX.X) of \ref nvmlPciInfo_t
 * - Parsing of busId in \ref nvmlDeviceGetHandleByPciBusId_v2 is less restrictive. You can pass 0:2:0.0 or 0000:02:00 and other variations
 * - Added API for events waiting for GPU events (Linux only) see docs of \ref nvmlEvents
 * - Added API \p nvmlDeviceGetComputeRunningProcesses_v2 and \ref nvmlSystemGetProcessName functions for looking up currently running compute applications
 * - Deprecated \ref nvmlDeviceGetPowerState in favor of \ref nvmlDeviceGetPerformanceState.
 * - Added \ref NVML_FI_DEV_POWER_REQUESTED_LIMIT to report out the power limit requested by the client.
 */
