Utilization view
The Utilization view displays information about the CPU, GPU, and other system resources that are used by the current process (choose Analyze > Concurrency Visualizer to start the concurrency visualizer). It shows the average core utilization by the analyzed process, the Idle process, the System process, and other processes that are running on the system over time. It doesn't show which specific core is active at any given time. For example, if two cores are each running at 50 percent capacity for a given time period, then this view shows one logical core being utilized. The view is generated by dividing the profiling time into short time segments. For each segment, the graph plots the average number of process threads that are executing on logical cores during that interval.
The graph shows time (on the x-axis) and the average logical cores that are utilized by the target process, the Idle process, and the System process. (The Idle process shows idle cores. The System process is a process in Windows that can perform work on behalf of other processes.) The remaining processes that are running on the system account for the utilization of any remaining cores.
The number of logical cores is shown on the y-axis. Windows treats simultaneous multithreading support in hardware as logical cores (for example, Hyper-Threading). Therefore, a system that has a quad-core processor that's supporting two hardware threads per core appears as an eight-logical-core system. This also applies to the Cores view. For more information, see Cores view.
The GPU Activity chart shows the number of DirectX engines in use over time. An engine is in use if it's processing a DMA packet. The chart doesn't show specific DirectX engine (for example, 3D Engine, Video Engine, and the others).
Purpose
We recommend the Utilization View as the starting point for performance investigations when you use the Concurrency Visualizer. Because it provides an overview of the degree of concurrency in an app over time, you can use it to quickly identify areas that require performance tuning or parallelization.
If you're interested in performance tuning, you might be trying to identify behavior that doesn't meet your expectations. You may also be looking for the existence and cause of regions that have low utilization of logical CPU cores. You might also be looking for patterns of usage between the CPU and the GPU.
If you're interested in parallelizing an app, you're probably looking for either CPU-bound areas of execution or areas where you are not utilizing the CPU.
CPU-bound areas are green. The graph shows one core being utilized if the app is serial.
Areas where you are not utilizing the CPU are gray. These might represent points at which the app is idle or performing blocking I/O that provide opportunities for parallelism by overlapping with other CPU-bound work.
When you find a behavior of interest, you can zoom in on that region by selecting it. After you zoom, you can switch to the Threads View or the Cores View for more detailed analysis.
If you're using the GPU by using C++ AMP or DirectX, you might be interested in identifying the number of GPU engines in use or areas where the GPU is unexpectedly idle.
Zoom
To zoom in on the CPU Utilization graph or the GPU Activity graph, select a section or use the zoom slider tool above the graph. The zoom setting persists as you switch to other views. To zoom out again, use the zoom slider tool. You can also zoom by using Ctrl+scroll.
CPU Utilization graph
The CPU Utilization graph shows the level of utilization in an app over time. The X-axis represents the duration of the trace, and the y-axis represents the number of logical cores on the system. The graph doesn't show which specific core is active at any given time. For example, if two cores are each running at 50 percent capacity for a given time period, then this view shows one logical core being utilized.
CPU Utilization graph colors
Green indicates the utilization of the logical cores in the system by the current process.
Light gray indicates the utilization of logical cores by other processes on the system. A high percentage of light gray in the CPU graph indicates that the system is heavily loaded by other processes and that your process is likely to be preempted by them. To reduce the consumption of logical cores by other processes, reduce the number of them running on the system.
Dark gray indicates the consumption of logical cores by the system process. You can't directly control this, but it's useful to know when it's occurring because it can affect the availability of logical cores for your process.
White indicates the availability of unused logical cores on the system. Those cores are available for your process if you can find more opportunities for parallelism.
Average CPU utilization
Shows the profiled process's average utilization of the system's logical cores for the duration of the process. The graph does not show which specific core is active at any given time. For example, if two cores are each running at 50% capacity for a given time period, then this view will show one logical core being utilized.
Zoom control (utilization view)
The zoom control helps you zoom in on the CPU utilization chart in order to focus on areas of particular interest. This control zooms in on the center of the view. Therefore, you should center the area of interest before you zoom in.
You can drag the mouse pointer in the CPU utilization chart or GPU activity chart to create a highlighted area. When the mouse button is released, the view zooms in on the selected range.
GPU Activity graph
The GPU Activity graph in the Concurrency Visualizer displays the level of DirectX activity on the system as measured by the number of DirectX engines that are in use over time. The graph doesn't show which specific engines were used. An engine is considered to be in use if it is processing any GPU work.
GPU Activity graph colors
Green indicates the consumption of DirectX Engines by the current process.
Light gray indicates the consumption of DirectX Engines by other processes on the system. To reduce the consumption of DirectX engines by other processes, reduce the number of other processes running on the system.
White indicates the availability of unused DirectX engines on the system. Those engines are available for your process if you can find more opportunities to exploit them. Some engines can only be used for specific kinds of tasks.
GPU Activity (Paging)
The GPU Activity (Paging) segments on the Threads tab represent times when the GPU was processing paging requests. The length of a segment represents the duration of time that the GPU was processing a direct memory access (DMA) paging packet. Typically, paging packets are associated with the transfer of memory between the CPU and GPU.
When you select a GPU paging segment, the report on the Current tab displays information about the DMA packet that was processed. This includes the amount of time it waited in the hardware queue that's associated with the DirectX engine, the process that submitted the DMA packet, and the time that's required to process the packet.
GPU Activity (This Process)
The GPU Activity (This Process) segments in the Threads view in the Concurrency Visualizer represent times when the GPU was processing requests on behalf of the current process. These requests are sent to the GPU as direct memory access (DMA) packets. The length of a segment represents the time that the GPU was processing a DMA packet on behalf of the current process.
When you select the GPU activity segment, the report on the Current tab displays information about the DMA packet that was processed. This information includes the amount of time that the packet waited in the hardware queue that's associated with the DirectX engine, the process that submitted the packet, and the time that was required to process the packet. A process other than the current process may have physically submitted the DMA packet to the GPU. The Concurrency Visualizer can detect when another process submitted work to the GPU on behalf of the current process.
GPU Activity (Other Processes)
The GPU Activity (Other Processes) segments in the Threads view of the Concurrency Visualizer represent times when the GPU was processing requests on behalf of other processes on the system. These requests are sent the GPU as direct memory access (DMA) packets. The length of a segment represents the duration of time that the packet was processed by the GPU.
When you select this kind of segment, the report on the Current tab displays information about the packet that was processed. The information includes the amount of time that the packet waited in the hardware queue that's associated with the DirectX engine, the process that submitted the packet, and the time that was required to process the packet.