diff options
author | Dave Airlie <airlied@redhat.com> | 2022-01-20 11:36:16 +1000 |
---|---|---|
committer | Matt Turner <mattst88@gmail.com> | 2022-05-09 12:43:36 -0400 |
commit | 502823aef7c084b111268165d67f8bad2f43c627 (patch) | |
tree | 3eef4f34d5c040aae4041595b7b43ccaad1aa740 | |
parent | 45b4a998d6667612bef930c3b6587c4ddbe1e370 (diff) |
intel/perf: use a function to do common allocations
This cuts the compile time down for this file on my ryzen from
real 1m4.077s
to
real 0m30.827s
Reviewed-by: Emma Anholt <emma@anholt.net>
Reviewed-by: Matt Turner <mattst88@gmail.com>
(cherry picked from commit acc2d08cf908a5d25cf5491f7602901d2c310262)
Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/16405>
-rw-r--r-- | src/intel/perf/gen_perf.py | 79 |
1 files changed, 46 insertions, 33 deletions
diff --git a/src/intel/perf/gen_perf.py b/src/intel/perf/gen_perf.py index bdaeb685894..41c4b3ca43b 100644 --- a/src/intel/perf/gen_perf.py +++ b/src/intel/perf/gen_perf.py @@ -691,7 +691,48 @@ def main(): #define MIN(a, b) ((a < b) ? (a) : (b)) #define MAX(a, b) ((a > b) ? (a) : (b)) - + static struct intel_perf_query_info * + intel_query_alloc(struct intel_perf_config *perf, int ncounters) + { + struct intel_perf_query_info *query = rzalloc(perf, struct intel_perf_query_info); + query->perf = perf; + query->kind = INTEL_PERF_QUERY_TYPE_OA; + query->n_counters = 0; + query->oa_metrics_set_id = 0; /* determined at runtime, via sysfs */ + query->counters = rzalloc_array(query, struct intel_perf_query_counter, ncounters); + return query; + } + + static struct intel_perf_query_info * + hsw_query_alloc(struct intel_perf_config *perf, int ncounters) + { + struct intel_perf_query_info *query = intel_query_alloc(perf, ncounters); + query->oa_format = I915_OA_FORMAT_A45_B8_C8; + /* Accumulation buffer offsets... */ + query->gpu_time_offset = 0; + query->a_offset = query->gpu_time_offset + 1; + query->b_offset = query->a_offset + 45; + query->c_offset = query->b_offset + 8; + query->perfcnt_offset = query->c_offset + 8; + query->rpstat_offset = query->perfcnt_offset + 2; + return query; + } + + static struct intel_perf_query_info * + bdw_query_alloc(struct intel_perf_config *perf, int ncounters) + { + struct intel_perf_query_info *query = intel_query_alloc(perf, ncounters); + query->oa_format = I915_OA_FORMAT_A32u40_A4u32_B8_C8; + /* Accumulation buffer offsets... */ + query->gpu_time_offset = 0; + query->gpu_clock_offset = query->gpu_time_offset + 1; + query->a_offset = query->gpu_clock_offset + 1; + query->b_offset = query->a_offset + 36; + query->c_offset = query->b_offset + 8; + query->perfcnt_offset = query->c_offset + 8; + query->rpstat_offset = query->perfcnt_offset + 2; + return query; + } """)) # Print out all equation functions. @@ -713,43 +754,15 @@ def main(): c("{\n") c_indent(3) - c("struct intel_perf_query_info *query = rzalloc(perf, struct intel_perf_query_info);\n") + if gen.chipset == "hsw": + c("struct intel_perf_query_info *query = hsw_query_alloc(perf, %u);\n" % len(counters)) + else: + c("struct intel_perf_query_info *query = bdw_query_alloc(perf, %u);\n" % len(counters)) c("\n") - c("query->perf = perf;\n") - c("query->kind = INTEL_PERF_QUERY_TYPE_OA;\n") c("query->name = \"" + set.name + "\";\n") c("query->symbol_name = \"" + set.symbol_name + "\";\n") c("query->guid = \"" + set.hw_config_guid + "\";\n") - c("query->counters = rzalloc_array(query, struct intel_perf_query_counter, %u);" % len(counters)) - c("query->n_counters = 0;") - c("query->oa_metrics_set_id = 0; /* determined at runtime, via sysfs */") - - if gen.chipset == "hsw": - c(textwrap.dedent("""\ - query->oa_format = I915_OA_FORMAT_A45_B8_C8; - /* Accumulation buffer offsets... */ - query->gpu_time_offset = 0; - query->a_offset = query->gpu_time_offset + 1; - query->b_offset = query->a_offset + 45; - query->c_offset = query->b_offset + 8; - query->perfcnt_offset = query->c_offset + 8; - query->rpstat_offset = query->perfcnt_offset + 2; - """)) - else: - c(textwrap.dedent("""\ - query->oa_format = I915_OA_FORMAT_A32u40_A4u32_B8_C8; - /* Accumulation buffer offsets... */ - query->gpu_time_offset = 0; - query->gpu_clock_offset = query->gpu_time_offset + 1; - query->a_offset = query->gpu_clock_offset + 1; - query->b_offset = query->a_offset + 36; - query->c_offset = query->b_offset + 8; - query->perfcnt_offset = query->c_offset + 8; - query->rpstat_offset = query->perfcnt_offset + 2; - """)) - - c("\n") c("struct intel_perf_query_counter *counter = query->counters;\n") |