nak: Add static cycle count statistic

Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/33773>
This commit is contained in:
Mel Henning 2024-11-18 11:36:01 -05:00 committed by Marge Bot
parent b72c772f83
commit 890bab86b4
6 changed files with 19 additions and 0 deletions

View file

@ -140,6 +140,9 @@ struct nak_shader_info {
/** Number of instructions used */
uint32_t num_instrs;
/** Number of cycles used by fixed-latency instructions */
uint32_t num_static_cycles;
/** Size of shader local (scratch) memory */
uint32_t slm_size;

View file

@ -239,6 +239,7 @@ impl ShaderBin {
num_control_barriers: info.num_control_barriers,
_pad0: Default::default(),
num_instrs: info.num_instrs,
num_static_cycles: info.num_static_cycles,
slm_size: info.slm_size,
crs_size: sm.crs_size(info.max_crs_depth),
__bindgen_anon_1: match &info.stage {
@ -313,6 +314,7 @@ impl ShaderBin {
eprintln!("Stage: {}", stage_name);
eprintln!("Instruction count: {}", c_info.num_instrs);
eprintln!("Static cycle count: {}", c_info.num_static_cycles);
eprintln!("Num GPRs: {}", c_info.num_gprs);
eprintln!("SLM size: {}", c_info.slm_size);

View file

@ -23,6 +23,7 @@ fn init_info_from_nir(nak: &nak_compiler, nir: &nir_shader) -> ShaderInfo {
ShaderInfo {
num_gprs: 0,
num_instrs: 0,
num_static_cycles: 0,
num_control_barriers: 0,
slm_size: nir.scratch_size,
max_crs_depth: 0,

View file

@ -201,6 +201,7 @@ impl<'a> TestShaderBuilder<'a> {
num_gprs: 0,
num_control_barriers: 0,
num_instrs: 0,
num_static_cycles: 0,
slm_size: 0,
max_crs_depth: 0,
uses_global_mem: true,

View file

@ -7456,6 +7456,7 @@ pub struct ShaderInfo {
pub num_gprs: u8,
pub num_control_barriers: u8,
pub num_instrs: u32,
pub num_static_cycles: u32,
pub slm_size: u32,
pub max_crs_depth: u32,
pub uses_global_mem: bool,
@ -7535,11 +7536,13 @@ impl Shader<'_> {
pub fn gather_info(&mut self) {
let mut num_instrs = 0;
let mut num_static_cycles = 0;
let mut uses_global_mem = false;
let mut writes_global_mem = false;
self.for_each_instr(&mut |instr| {
num_instrs += 1;
num_static_cycles += instr.deps.delay as u32;
if !uses_global_mem {
uses_global_mem = instr.uses_global_mem();
@ -7551,6 +7554,7 @@ impl Shader<'_> {
});
self.info.num_instrs = num_instrs;
self.info.num_static_cycles = num_static_cycles;
self.info.uses_global_mem = uses_global_mem;
self.info.writes_global_mem = writes_global_mem;
}

View file

@ -1247,6 +1247,14 @@ nvk_shader_get_executable_statistics(
stat->value.u64 = shader->info.num_instrs;
}
vk_outarray_append_typed(VkPipelineExecutableStatisticKHR, &out, stat) {
WRITE_STR(stat->name, "Static cycle count");
WRITE_STR(stat->description,
"Total cycles used by fixed-latency instructions in this shader");
stat->format = VK_PIPELINE_EXECUTABLE_STATISTIC_FORMAT_UINT64_KHR;
stat->value.u64 = shader->info.num_static_cycles;
}
vk_outarray_append_typed(VkPipelineExecutableStatisticKHR, &out, stat) {
WRITE_STR(stat->name, "Code Size");
WRITE_STR(stat->description,