Identifier: "Occupancy"
DisplayName: "Occupancy"
Description: "Occupancy is the ratio of the number of active warps per multiprocessor to the maximum number of possible active warps. Another way to view occupancy is the percentage of the hardware's ability to process warps that is actively in use. Higher occupancy does not always result in higher performance, however, low occupancy always reduces the ability to hide latencies, resulting in overall performance degradation. Large discrepancies between the theoretical and the achieved occupancy during execution typically indicates highly imbalanced workloads."
Order: 80
Sets {
  Identifier: "basic"
}
Sets {
  Identifier: "detailed"
}
Sets {
  Identifier: "full"
}

Filter {
  CollectionFilter {
    CollectionScopes: CollectionScope_Launch
  }
}

Metrics {
  Metrics {
    Label: "GPU Maximum Warps Per Scheduler"
    Name: "smsp__warps_active.avg.peak_sustained"
  }
  Metrics {
    Label: "Theoretical Warps Per Scheduler"
    Name: "smsp__maximum_warps_avg_per_active_cycle"
  }
}

Header {
  Metrics {
    Label: "Theoretical Occupancy"
    Name: "sm__maximum_warps_per_active_cycle_pct"
  }
  Metrics {
    Label: "Block Limit Registers"
    Name: "launch__occupancy_limit_registers"
  }
  Metrics {
    Label: "Theoretical Active Warps per SM"
    Name: "sm__maximum_warps_avg_per_active_cycle"
  }
  Metrics {
    Label: "Block Limit Shared Mem"
    Name: "launch__occupancy_limit_shared_mem"
  }
  Metrics {
    Label: "Achieved Occupancy"
    Name: "sm__warps_active.avg.pct_of_peak_sustained_active"
    Filter {
      CollectionFilter {
        CollectionScopes: CollectionScope_Launch
        CollectionScopes: CollectionScope_Range
        CollectionScopes: CollectionScope_Cmdlist
      }
    }
  }
  Metrics {
    Label: "Block Limit Warps"
    Name: "launch__occupancy_limit_warps"
  }
  Metrics {
    Label: "Achieved Active Warps Per SM"
    Name: "sm__warps_active.avg.per_cycle_active"
    Filter {
      CollectionFilter {
        CollectionScopes: CollectionScope_Launch
        CollectionScopes: CollectionScope_Range
        CollectionScopes: CollectionScope_Cmdlist
      }
    }
  }
  Metrics {
    Label: "Block Limit SM"
    Name: "launch__occupancy_limit_blocks"
  }
  Metrics {
    Label: "Cluster Occupancy"
    Name: "launch__occupancy_cluster_pct"
    Filter {
      MinArch: CC_90
    }
  }
  Metrics {
    Label: "Block Limit Barriers"
    Name: "launch__occupancy_limit_barriers"
    Filter {
      MinArch: CC_90
    }
  }
  Metrics {
    Label: "Max Active Clusters"
    Name: "launch__cluster_max_active"
    Filter {
      MinArch: CC_90
    }
  }
  Metrics {
    Label: "Max Cluster Size"
    Name: "launch__cluster_max_potential_size"
    Filter {
      MinArch: CC_90
    }
  }
  Metrics {
    Label: "Overall GPU Occupancy"
    Name: "launch__occupancy_cluster_gpu_pct"
    Filter {
      MinArch: CC_90
    }
  }
  Metrics {
    Name: ""
    Filter {
      MinArch: CC_90
    }
  }
}
MetricDefinitions {
  MetricDefinitions {
    Name: "derived__pct_occupancy_per_register_count"
    Expression: " ( launch__occupancy_per_register_count * 100 ) / device__attribute_max_warps_per_multiprocessor"
    Filter {
      CollectionFilter {
        CollectionScopes: CollectionScope_Launch
        CollectionScopes: CollectionScope_Cmdlist
      }
    }
  }
  MetricDefinitions {
    Name: "derived__pct_occupancy_per_block_size"
    Expression: " ( launch__occupancy_per_block_size * 100 ) / device__attribute_max_warps_per_multiprocessor"
    Filter {
      CollectionFilter {
        CollectionScopes: CollectionScope_Launch
        CollectionScopes: CollectionScope_Cmdlist
      }
    }
  }
  MetricDefinitions {
    Name: "derived__pct_occupancy_per_shared_mem_size"
    Expression: "( launch__occupancy_per_shared_mem_size * 100 ) / device__attribute_max_warps_per_multiprocessor "
    Filter {
      CollectionFilter {
        CollectionScopes: CollectionScope_Launch
        CollectionScopes: CollectionScope_Cmdlist
      }
    }
  }
  MetricDefinitions {
    Name: "derived__pct_occupancy_per_barrier_count"
    Expression: "( launch__occupancy_per_barrier_count * 100 ) / device__attribute_max_warps_per_multiprocessor "
    Filter {
      CollectionFilter {
        CollectionScopes: CollectionScope_Launch
        CollectionScopes: CollectionScope_Cmdlist
      }
      MinArch: CC_90
    }
  }
}
Body {
  DisplayName: "% Occupancy Graphs"
  SetDefault: true
  Items {
    LineChart {
      Label: "Impact of Varying Register Count Per Thread"
      AxisX {
        Label: "Registers Per Thread"
        Range {
          Min: 0
        }
        TickCount: 33
        Precision: 0
      }
      AxisY {
        Label: "% Occupancy"
        Range {
          Min: 0
          Max: 125
        }
        TickCount: 6
        Precision: 0
      }
      Metrics {
        Label: "% Occupancy Per Register Count"
        Name: "derived__pct_occupancy_per_register_count"
        ShowInstances: 1
      }
      HighlightX {
        Metrics {
          Label: "Registers Per Thread"
          Name: "launch__registers_per_thread"
        }
      }
    }
  }
  Items {
    LineChart {
      Label: "Impact of Varying Block Size"
      AxisX {
        Label: "Block Size"
        Range {
          Min: 0
        }
        TickCount: 33
        Precision: 0
      }
      AxisY {
        Label: "% Occupancy"
        Range {
          Min: 0
          Max: 125
        }
        TickCount: 6
        Precision: 0
      }
      Metrics {
        Label: "% Occupancy Per Block Size"
        Name: "derived__pct_occupancy_per_block_size"
        ShowInstances: 1
      }
      HighlightX {
        Metrics {
          Label: "Block Size"
          Name: "launch__block_size"
        }
      }
    }
  }
  Items {
    LineChart {
      Label: "Impact of Varying Shared Memory Usage Per Block"
      AxisX {
        Label: "Shared Memory Per Block"
        Range {
          Min: 0
        }
        TickCount: 33
        Precision: 0
      }
      AxisY {
        Label: "% Occupancy"
        Range {
          Min: 0
          Max: 125
        }
        TickCount: 6
        Precision: 0
      }
      Metrics {
        Label: "% Occupancy Per Shared Mem Size"
        Name: "derived__pct_occupancy_per_shared_mem_size"
        ShowInstances: 1
      }
      HighlightX {
        Metrics {
          Label: "Shared Memory Per Block"
          Name: "launch__shared_mem_per_block"
        }
      }
    }
  }
  Items {
    LineChart {
      Label: "Impact of Varying Block Barriers"
      AxisX {
        Label: "Block Barriers Count"
        Range {
          Min: 1
        }
        TickCount: 17
        Precision: 0
      }
      AxisY {
        Label: "% Occupancy"
        Range {
          Min: 0
          Max: 125
        }
        TickCount: 6
        Precision: 0
      }
      Metrics {
        Label: "% Occupancy Per Block Barriers Size"
        Name: "derived__pct_occupancy_per_barrier_count"
        ShowInstances: 1
      }
      HighlightX {
        Metrics {
          Label: "Block Barrier Count"
          Name: "launch__barrier_count"
        }
      }
    }
    Filter {
      MinArch: CC_90
    }
  }
}
Body {
  DisplayName: "# Warps Graphs"
  Items {
    LineChart {
      Label: "Impact of Varying Register Count Per Thread"
      AxisX {
        Label: "Registers Per Thread"
        Range {
          Min: 0
        }
        TickCount: 33
        Precision: 0
      }
      AxisY {
        Label: "# Warps"
        Range {
          Min: 0
        }
        Precision: 0
      }
      Metrics {
        Label: "# Warps Per Register Count"
        Name: "launch__occupancy_per_register_count"
        ShowInstances: 1
      }
      HighlightX {
        Metrics {
          Label: "Registers Per Thread"
          Name: "launch__registers_per_thread"
        }
      }
    }
  }
  Items {
    LineChart {
      Label: "Impact of Varying Block Size"
      AxisX {
        Label: "Block Size"
        Range {
          Min: 0
        }
        TickCount: 33
        Precision: 0
      }
      AxisY {
        Label: "# Warps"
        Range {
          Min: 0
        }
        Precision: 0
      }
      Metrics {
        Label: "# Warps Per Block Size"
        Name: "launch__occupancy_per_block_size"
        ShowInstances: 1
      }
      HighlightX {
        Metrics {
          Label: "Block Size"
          Name: "launch__block_size"
        }
      }
    }
  }
  Items {
    LineChart {
      Label: "Impact of Varying Shared Memory Usage Per Block"
      AxisX {
        Label: "Shared Memory Per Block"
        Range {
          Min: 0
        }
        TickCount: 33
        Precision: 0
      }
      AxisY {
        Label: "# Warps"
        Range {
          Min: 0
        }
        Precision: 0
      }
      Metrics {
        Label: "# Warps Per Shared Mem Size"
        Name: "launch__occupancy_per_shared_mem_size"
        ShowInstances: 1
      }
      HighlightX {
        Metrics {
          Label: "Shared Memory Per Block"
          Name: "launch__shared_mem_per_block"
        }
      }
    }
  }
  Items {
    LineChart {
      Label: "Impact of Varying Block Barriers"
      AxisX {
        Label: "Block Barriers Count"
        Range {
          Min: 1
        }
        TickCount: 17
        Precision: 0
      }
      AxisY {
        Label: "# Warps"
        Range {
          Min: 0
        }
        Precision: 0
      }
      Metrics {
        Label: "# Warps Per Block Barriers Size"
        Name: "launch__occupancy_per_barrier_count"
        ShowInstances: 1
      }
      HighlightX {
        Metrics {
          Label: "Block Barrier Count"
          Name: "launch__barrier_count"
        }
      }
    }
    Filter {
      MinArch: CC_90
    }
  }
}
Body {
  DisplayName: "Active Clusters"
  Items {
    LineChart {
      Label: "Impact of Varying Cluster Size"
      AxisX {
        Label: "Potential Cluster Size"
        Range {
          Min: 1
          Max: 16
        }
        TickCount: 16
        Precision: 0
      }
      AxisY {
        Label: "Active Clusters"
        Range {
          Min: 0
        }
        Precision: 0
      }
      Metrics {
        Label: "Active Clusters"
        Name: "launch__occupancy_per_cluster_size"
        ShowInstances: 1
      }
      HighlightX {
        Metrics {
          Label: "Cluster Size"
          Name: "launch__cluster_size"
        }
      }
    }
    Filter {
      MinArch: CC_90
    }
  }
}
