There are three ways to open the Kernel Occupancy panel:

  1. Click on the kernel occupancy percentage in the Kernel Occupancy column of the APP Profiler Session panel.
  2. Click on the kernel occupancy percentage in the Kernel Occupancy column of the API Trace in the APP Profiler Timeline panel.
  3. Select the View -> Other Windows -> APP Profiler Kernel Occupancy Viewer menu item from the Visual Studio main menu bar.

For OpenCL™ kernels, this panel displays an HTML webpage which provides information about the occupancy of a particular kernel dispatch.

The top part of the page shows several graphs which provide a visual indication of how kernel resources affect the theoretical number of in-flight wavefronts on a compute unit. Depending on the type of GPU device, there will be either three or four graphs displayed. There will only be four graphs if the kernel is dispatched to an AMD Radeon™ HD 7000 series GPU device (based on Graphics Core Next Architecture/Southern Islands) or newer. The graph representing the limiting resource will have its title displayed in red text. More than one graph could have a red title if there is more than one limiting resource. In each graph, the actual usage of the particular resource being graphed is highlighted with an orange square. If you hover the mouse over a point in the graph, a popup hint will be displayed showing you the current X and Y values at that location.

The first graph, titled Number of waves limited by Work-group size shows how the number of active wavefronts is affected by the size of the work-group for the dispatched kernel. In the above screenshot, you can see that the highest number of wavefronts is achieved when the work-group size is in the range of 64 to 256.

The second graph, titled Number of waves limited by VGPRs. shows how the number of active wavefronts is affected by the number of vector GPRs used by the dispatched kernel. In the above screenshot, you can see that as the number of VGPRs used increases, the number active wavefronts decreases in steps. Note that this graph shows that more than 62 VGPRs can be allocated, even though 62 is the maximum number of VGPRs that can be allocated since the Shader Compiler assumes the work-group size is 256 items by default (the largest possible work-group size). For the Shader Compiler to allocate more than 62 VGPRs, the kernel source code would need to be marked with the reqd_work_group_size kernel attribute. This attribute can tell the Shader Compiler that the kernel will be launched with a work-group size smaller than the maximum, allowing it to allocate more VGPRs. Thus, for X-axis values greater than 62, the VGPR graph shows the theoretical number of wavefronts that could be launched if the kernel specified a smaller work-group size using the attribute.

The third graph, titled Number of waves limited by SGPRs shows how the number of active wavefronts is affected by the number of scalar GPRs used by the dispatched kernel. This graph is only displayed for kernels dispatched to an AMD Radeon™ HD 7000 series GPU device (based on Graphics Core Next Architecture/Southern Islands) or newer . In the above screenshot, you can see that as the number of SGPRs used increases, the number active wavefronts decreases in steps.

The fourth graph, titled Number of waves limited by LDS shows how the number of active wavefronts is affected by the amount of LDS used by the dispatched kernel. In the above screenshot, you can see that as the amount of LDS used increases, the number active wavefronts decreases in steps.

Below the four graphs, a table is displayed, providing information about the device, the kernel, and the kernel occupancy. In the Kernel Occupancy section, you can see the limits imposed by each kernel resource, as well as which resource is currently limiting the number of waves for the kernel dispatch. This section also displays the kernel occupancy percentage.