About the Sample
The GPUInfo sample code associated with this paper demonstrates the use of Microsoft D3D9, DXGI and D3D11 APIs to obtain Intel-specific, performance-related counter information for Intel® integrated graphics processing units (GPUs) with a Windows* Display Driver Model (WDDM) graphics driver. Resources for obtaining CPU performance characteristics are cited below but not detailed in this document or illustrated in GPUInfo.
Users should have GPU Detect Version 15.40 (or later) installed to go through these processes. Earlier versions of GPU Detect can cause unrecoverable crashes when used with certain media and 3D imagery.
Introduction and Motivation
Application developers may find, based on pre-release testing, that their application can obtain the best overall performance on different systems by dividing work between CPU and graphics processors depending on performance characteristics of those processors. For example, an application running on a dual-core CPU with high-end integrated graphics might need to assign more work to the GPU, whereas on a quad-core CPU with mid-range integrated graphics the application might move more work to the CPU.
The GPUInfo.exe sample can be used to extract Intel GPU performance-related attributes for tested systems, allowing developers to design rules to conditionally assign work between the CPU and GPU. The source code of GPUInfo gives an example of how an application might obtain these attributes, in order to implement those rules.
GPUInfo can obtain the following GPU attributes:
- Vendor ID (must be 0x8086 to obtain Intel device-specific counter information)
- Device ID
- Amount of memory allocated to graphics (dedicated + shared)
- Maximum and minimum graphics frequencies
- Graphics device generation ID
- Number of graphics execution units
- Total dissipated power (TDP) of the CPU/GPU package
- Maximum graphics fill rate
While this paper and the GPUInfo sample code focus on GPU attributes, developers will likely also want to obtain CPU-related performance attributes, such as CPU base frequency and number of physical CPU cores. Several useful articles are cited in the References section. In particular, developers may want to look at the Intel® Power Gadget library and sample code.
The tables below illustrate the main functions that compose the GPUInfo sample code. The first two tables break out the functions defined in GPUInfo source code by source file, TestMain.cpp and DeviceID.cpp, with a high-level description of those functions.
The third table shows the program functional flow. It lists the functions called in GPUInfo, showing the source file or library that defines the function on the left and a short description of the function on the right. Indentation of the function names is intended to illustrate the function call hierarchy, i.e., less indented functions calling more indented functions listed below the former.
Table 1 - TestMain.cpp
Table 2 - DeviceID.cpp
Table 3- Program Functional Flow
Controlling the Sample
This sample can be run from a Microsoft Windows* command line console. It takes no command line parameters. When it has finished printing out the Intel-specific device counter information, it will wait for the user to hit any key before finishing. The command line to run GPUInfo is simply:
The console output will appear as shown in Figure 1:
Figure 1: GPUInfo.exe console output
1. GPUDetect - https://software.intel.com/en-us/vcsource/samples/gpu-detect
2. Intel® Processor Identification Utility download for Windows* - http://www.intel.com/support/processors/tools/piu/sb/CS-014921.htm
3. Core Detection Sample - http://code.msdn.microsoft.com/windowsdesktop/Core-Detection-Sample-7afd28f0
4. Intel® Power Gadget - https://software.intel.com/en-us/articles/intel-power-gadget/
5. Using the Intel® Power Gadget 3.0 API on Windows* - https://software.intel.com/en-us/blogs/2014/01/07/using-the-intel-power-gadget-30-api-on-windows
6. ID3D11 Device interface - http://msdn.microsoft.com/en-us/library/windows/desktop/ff476379%28v=vs.85%29.aspx