zoukankan      html  css  js  c++  java
  • 如何获取显卡的GPU占用率和显存占用情况

    http://blog.csdn.net/paopaoc/article/details/9093125


    在游戏的性能调优过程中,经常会需要获取CPU占用率、IO、显卡GPU占用率等基础性能数据,下面就简述一下获取nvdia显卡GPU占用率的方法。 nvdia 显卡在驱动安装后,可以通过nvapi.dll来获取显卡的相关信息。有关nvdia、AMD显卡sdk的相关资料在它们的网站上均有下载,但貌似非注册开发者可获取到的信息有限。

    下面提供一个简单封装了的用来获取显卡信息的c++类,由于代码是根据网上可找到的有限资料写成,难免可能存在错误,如有问题欢迎指出。

     

    [cpp] view plaincopy
     
    1. // KGpuMon.h  源代码  
    2. #pragma once  
    3.   
    4. #define MAX_GPU_NUM     4L      // 监控的GPU个数(NVIDIA定义的最多GPU个数是64,这里最多只监控4个)  
    5. #define MY_PROCESS_ERROR(Condition) do { if (!(Condition)) goto Exit0; } while (false)  
    6.   
    7. #define MAX_DISPLAY_CARDS               4       // 最多监控4块显卡(暂时应该够了吧)  
    8. // 常量定义  
    9. #define MAX_PHYSICAL_GPUS               64  
    10. #define SHORT_STRING_MAX                64  
    11. #define MAX_THERMAL_SENSORS_PER_GPU     3  
    12. #define MAX_CLOCKS_PER_GPU              0x120  
    13. #define MAX_PSTATES_PER_GPU             8  
    14. #define MAX_USAGES_PER_GPU              33  
    15. #define MAX_COOLER_PER_GPU              20  
    16. #define MAX_MEMORY_VALUES_PER_GPU       5  
    17.   
    18. // 接口ID值  
    19. #define ID_NvAPI_Initialize                     0x0150E828  
    20. #define ID_NvAPI_GPU_GetFullName                0xCEEE8E9F  
    21. #define ID_NvAPI_GPU_GetThermalSettings         0xE3640A56  
    22. #define ID_NvAPI_EnumNvidiaDisplayHandle        0x9ABDD40D  
    23. #define ID_NvAPI_GetPhysicalGPUsFromDisplay     0x34EF9506  
    24. #define ID_NvAPI_EnumPhysicalGPUs               0xE5AC921F  
    25. #define ID_NvAPI_GPU_GetTachReading             0x5F608315  
    26. #define ID_NvAPI_GPU_GetAllClocks               0x1BD69F49  
    27. #define ID_NvAPI_GPU_GetPStates                 0x60DED2ED  
    28. #define ID_NvAPI_GPU_GetUsages                  0x189A1FDF  
    29. #define ID_NvAPI_GPU_GetCoolerSettings          0xDA141340  
    30. #define ID_NvAPI_GPU_SetCoolerLevels            0x891FA0AE  
    31. #define ID_NvAPI_GPU_GetMemoryInfo              0x774AA982  
    32. #define ID_NvAPI_GetDisplayDriverVersion        0xF951A4D1  
    33. #define ID_NvAPI_GetInterfaceVersionString      0x01053FA5  
    34. #define ID_NvAPI_GPU_GetPCIIdentifiers          0x2DDFB66E  
    35.   
    36. // 版本号参数定义  
    37. #define GPU_THERMAL_SETTINGS_VER                (sizeof(NvGPUThermalSettings) | 0x10000)  
    38. #define GPU_CLOCKS_VER                          (sizeof(NvClocks) | 0x20000)  
    39. #define GPU_PSTATES_VER                         (sizeof(NvPStates) | 0x10000)  
    40. #define GPU_USAGES_VER                          (sizeof(NvUsages) | 0x10000)  
    41. #define GPU_COOLER_SETTINGS_VER                 (sizeof(NvGPUCoolerSettings) | 0x20000)  
    42. #define GPU_MEMORY_INFO_VER                     (sizeof(NvMemoryInfo) | 0x20000)  
    43. #define DISPLAY_DRIVER_VERSION_VER              (sizeof(NvDisplayDriverVersion) | 0x10000)  
    44. #define GPU_COOLER_LEVELS_VER                   (sizeof(NvGPUCoolerLevels) | 0x10000)  
    45.   
    46. enum NvStatus  
    47. {  
    48.     enumNvStatus_OK = 0,  
    49.     enumNvStatus_ERROR = -1,  
    50.     enumNvStatus_LIBRARY_NOT_FOUND = -2,  
    51.     enumNvStatus_NO_IMPLEMENTATION = -3,  
    52.     enumNvStatus_API_NOT_INTIALIZED = -4,  
    53.     enumNvStatus_INVALID_ARGUMENT = -5,  
    54.     enumNvStatus_NVIDIA_DEVICE_NOT_FOUND = -6,  
    55.     enumNvStatus_END_ENUMERATION = -7,  
    56.     enumNvStatus_INVALID_HANDLE = -8,  
    57.     enumNvStatus_INCOMPATIBLE_STRUCT_VERSION = -9,  
    58.     enumNvStatus_HANDLE_INVALIDATED = -10,  
    59.     enumNvStatus_OPENGL_CONTEXT_NOT_CURRENT = -11,  
    60.     enumNvStatus_NO_GL_EXPERT = -12,  
    61.     enumNvStatus_INSTRUMENTATION_DISABLED = -13,  
    62.     enumNvStatus_EXPECTED_LOGICAL_GPU_HANDLE = -100,  
    63.     enumNvStatus_EXPECTED_PHYSICAL_GPU_HANDLE = -101,  
    64.     enumNvStatus_EXPECTED_DISPLAY_HANDLE = -102,  
    65.     enumNvStatus_INVALID_COMBINATION = -103,  
    66.     enumNvStatus_NOT_SUPPORTED = -104,  
    67.     enumNvStatus_PORTID_NOT_FOUND = -105,  
    68.     enumNvStatus_EXPECTED_UNATTACHED_DISPLAY_HANDLE = -106,  
    69.     enumNvStatus_INVALID_PERF_LEVEL = -107,  
    70.     enumNvStatus_DEVICE_BUSY = -108,  
    71.     enumNvStatus_NV_PERSIST_FILE_NOT_FOUND = -109,  
    72.     enumNvStatus_PERSIST_DATA_NOT_FOUND = -110,  
    73.     enumNvStatus_EXPECTED_TV_DISPLAY = -111,  
    74.     enumNvStatus_EXPECTED_TV_DISPLAY_ON_DCONNECTOR = -112,  
    75.     enumNvStatus_NO_ACTIVE_SLI_TOPOLOGY = -113,  
    76.     enumNvStatus_SLI_RENDERING_MODE_NOTALLOWED = -114,  
    77.     enumNvStatus_EXPECTED_DIGITAL_FLAT_PANEL = -115,  
    78.     enumNvStatus_ARGUMENT_EXCEED_MAX_SIZE = -116,  
    79.     enumNvStatus_DEVICE_SWITCHING_NOT_ALLOWED = -117,  
    80.     enumNvStatus_TESTING_CLOCKS_NOT_SUPPORTED = -118,  
    81.     enumNvStatus_UNKNOWN_UNDERSCAN_CONFIG = -119,  
    82.     enumNvStatus_TIMEOUT_RECONFIGURING_GPU_TOPO = -120,  
    83.     enumNvStatus_DATA_NOT_FOUND = -121,  
    84.     enumNvStatus_EXPECTED_ANALOG_DISPLAY = -122,  
    85.     enumNvStatus_NO_VIDLINK = -123,  
    86.     enumNvStatus_REQUIRES_REBOOT = -124,  
    87.     enumNvStatus_INVALID_HYBRID_MODE = -125,  
    88.     enumNvStatus_MIXED_TARGET_TYPES = -126,  
    89.     enumNvStatus_SYSWOW64_NOT_SUPPORTED = -127,  
    90.     enumNvStatus_IMPLICIT_SET_GPU_TOPOLOGY_CHANGE_NOT_ALLOWED = -128,  
    91.     enumNvStatus_REQUEST_USER_TO_CLOSE_NON_MIGRATABLE_APPS = -129,  
    92.     enumNvStatus_OUT_OF_MEMORY = -130,  
    93.     enumNvStatus_WAS_STILL_DRAWING = -131,  
    94.     enumNvStatus_FILE_NOT_FOUND = -132,  
    95.     enumNvStatus_TOO_MANY_UNIQUE_STATE_OBJECTS = -133,  
    96.     enumNvStatus_INVALID_CALL = -134,  
    97.     enumNvStatus_D3D10_1_LIBRARY_NOT_FOUND = -135,  
    98.     enumNvStatus_FUNCTION_NOT_FOUND = -136  
    99. };  
    100.   
    101. enum NvThermalController  
    102. {  
    103.     enumNvThermalController_NONE = 0,  
    104.     enumNvThermalController_GPU_INTERNAL,  
    105.     enumNvThermalController_ADM1032,  
    106.     enumNvThermalController_MAX6649,  
    107.     enumNvThermalController_MAX1617,  
    108.     enumNvThermalController_LM99,  
    109.     enumNvThermalController_LM89,  
    110.     enumNvThermalController_LM64,  
    111.     enumNvThermalController_ADT7473,  
    112.     enumNvThermalController_SBMAX6649,  
    113.     enumNvThermalController_VBIOSEVT,  
    114.     enumNvThermalController_OS,  
    115.     enumNvThermalController_UNKNOWN = -1,  
    116. };  
    117.   
    118. enum NvThermalTarget  
    119. {  
    120.     enumNvThermalTarget_NONE = 0,  
    121.     enumNvThermalTarget_GPU = 1,  
    122.     enumNvThermalTarget_MEMORY = 2,  
    123.     enumNvThermalTarget_POWER_SUPPLY = 4,  
    124.     enumNvThermalTarget_BOARD = 8,  
    125.     enumNvThermalTarget_ALL = 15,  
    126.     enumNvThermalTarget_UNKNOWN = -1  
    127. };  
    128.   
    129. typedef struct _NvSensor  
    130. {  
    131.     NvThermalController Controller;  
    132.     unsigned int DefaultMinTemp;  
    133.     unsigned int DefaultMaxTemp;  
    134.     unsigned int CurrentTemp;  
    135.     NvThermalTarget Target;  
    136. }NvSensor;  
    137.   
    138. typedef struct _NvGPUThermalSettings  
    139. {  
    140.     unsigned int Version;  
    141.     unsigned int Count;  
    142.     NvSensor Sensor[MAX_THERMAL_SENSORS_PER_GPU];  
    143. }NvGPUThermalSettings;  
    144.   
    145. typedef struct _NvClocks  
    146. {  
    147.     unsigned int Version;  
    148.     unsigned int Clock[MAX_CLOCKS_PER_GPU];  
    149. }NvClocks;  
    150.   
    151. typedef struct _NvPState  
    152. {  
    153.     bool Present;  
    154.     int Percentage;  
    155. }NvPState;  
    156.   
    157. typedef struct _NvPStates  
    158. {  
    159.     unsigned int Version;  
    160.     unsigned int Flags;  
    161.     NvPState PStates[MAX_PSTATES_PER_GPU];  
    162. }NvPStates;  
    163.   
    164. typedef struct _NvUsages  
    165. {  
    166.     unsigned 再分享一下我老师大神的人工智能教程吧。零基础!通俗易懂!风趣幽默!希望你也加入到我们人工智能的队伍中来!http://www.captainbed.net
  • 相关阅读:
    BZOJ 2818: Gcd
    BZOJ 4816: [Sdoi2017]数字表格
    BZOJ 2301: [HAOI2011]Problem b
    BZOJ 2440: [中山市选2011]完全平方数
    BZOJ 2705: [SDOI2012]Longge的问题
    BZOJ 3992: [SDOI2015]序列统计
    BZOJ 3529: [Sdoi2014]数表
    AC日记——小A的糖果 洛谷七月月赛
    AC日记——「HNOI2017」礼物 LiBreOJ 2020
    AC日记——[Hnoi2017]影魔 bzoj 4826
  • 原文地址:https://www.cnblogs.com/skiwnchiwns/p/10137980.html
Copyright © 2011-2022 走看看