[igt-dev] [PATCH i-g-t v6 33/36] lib/i915: prepare codegen for new ACM/DG2 variables
Umesh Nerlige Ramappa
umesh.nerlige.ramappa at intel.com
Mon Oct 10 23:04:42 UTC 2022
On Mon, Oct 10, 2022 at 09:42:12PM +0000, Umesh Nerlige Ramappa wrote:
>From: Lionel Landwerlin <lionel.g.landwerlin at intel.com>
>
>Signed-off-by: Lionel Landwerlin <lionel.g.landwerlin at intel.com>
lgtm,
Reviewed-by: Umesh Nerlige Ramappa <umesh.nerlige.ramappa at intel.com>
>---
> lib/i915/perf-configs/codegen.py | 84 +++++++++++++++----
> .../perf-configs/perf-metricset-codegen.py | 13 +++
> 2 files changed, 81 insertions(+), 16 deletions(-)
>
>diff --git a/lib/i915/perf-configs/codegen.py b/lib/i915/perf-configs/codegen.py
>index 93a2df4a..755142cc 100644
>--- a/lib/i915/perf-configs/codegen.py
>+++ b/lib/i915/perf-configs/codegen.py
>@@ -1,3 +1,4 @@
>+import re
> import xml.etree.ElementTree as et
>
> class Codegen:
>@@ -123,6 +124,51 @@ class Set:
> return self.xml.find(path)
>
>
>+hw_vars_mapping = {
>+ "$EuCoresTotalCount": { 'c': "perf->devinfo.n_eus", 'desc': "The total number of execution units" },
>+ "$EuSlicesTotalCount": { 'c': "perf->devinfo.n_eu_slices" },
>+ "$EuSubslicesTotalCount": { 'c': "perf->devinfo.n_eu_sub_slices" },
>+ "$EuDualSubslicesTotalCount": { 'c': "perf->devinfo.n_eu_sub_slices" },
>+ "$EuDualSubslicesSlice0123Count": { 'c': "perf->devinfo.n_eu_sub_slices_half_slices" },
>+ "$EuThreadsCount": { 'c': "perf->devinfo.eu_threads_count" },
>+
>+ "$VectorEngineTotalCount": { 'c': "perf->devinfo.n_eus", 'desc': "The total number of execution units" },
>+ "$VectorEnginePerXeCoreCount": { 'c': "perf->devinfo.n_eu_sub_slices" },
>+ "$VectorEngineThreadsCount": { 'c': "perf->devinfo.eu_threads_count" },
>+
>+ "$SliceMask": { 'c': "perf->devinfo.slice_mask" },
>+ "$SliceTotalCount": { 'c': "perf->devinfo.n_eu_slices" },
>+
>+ "$SubsliceMask": { 'c': "perf->devinfo.subslice_mask" },
>+ "$DualSubsliceMask": { 'c': "perf->devinfo.subslice_mask" },
>+
>+ "$GtSliceMask": { 'c': "perf->devinfo.slice_mask" },
>+ "$GtSubsliceMask": { 'c': "perf->devinfo.subslice_mask" },
>+ "$GtDualSubsliceMask": { 'c': "perf->devinfo.subslice_mask" },
>+
>+ "$GtXeCoreMask": { 'c': "perf->devinfo.slice_mask" },
>+ "$XeCoreMask": { 'c': "perf->devinfo.slice_mask" },
>+ "$XeCoreTotalCount": { 'c': 'perf->devinfo.n_eu_sub_slices' },
>+
>+ "$GpuTimestampFrequency": { 'c': "perf->devinfo.timestamp_frequency" },
>+ "$GpuMinFrequency": { 'c': "perf->devinfo.gt_min_freq" },
>+ "$GpuMaxFrequency": { 'c': "perf->devinfo.gt_max_freq" },
>+ "$SkuRevisionId": { 'c': "perf->devinfo.revision" },
>+ "$QueryMode": { 'c': "perf->devinfo.query_mode" },
>+}
>+
>+def is_hw_var(name):
>+ m = re.search('\$GtSlice([0-9]+)XeCore([0-9]+)$', name)
>+ if m:
>+ return True
>+ m = re.search('\$GtSlice([0-9]+)$', name)
>+ if m:
>+ return True
>+ m = re.search('\$GtSlice([0-9]+)DualSubslice([0-9]+)$', name)
>+ if m:
>+ return True
>+ return name in hw_vars_mapping
>+
> class Gen:
> def __init__(self, filename, c):
> self.filename = filename
>@@ -163,23 +209,11 @@ class Gen:
> self.exp_ops["ULTE"] = (2, self.splice_ulte)
> self.exp_ops["ULT"] = (2, self.splice_ult)
> self.exp_ops["&&"] = (2, self.splice_logical_and)
>+ self.exp_ops["<<"] = (2, self.splice_lshft)
>+ self.exp_ops[">>"] = (2, self.splice_rshft)
>+ self.exp_ops["UMUL"] = (2, self.splice_uml)
>
>- self.hw_vars = {
>- "$EuCoresTotalCount": { 'c': "perf->devinfo.n_eus", 'desc': "The total number of execution units" },
>- "$EuSlicesTotalCount": { 'c': "perf->devinfo.n_eu_slices" },
>- "$EuSubslicesTotalCount": { 'c': "perf->devinfo.n_eu_sub_slices" },
>- "$EuDualSubslicesTotalCount": { 'c': "perf->devinfo.n_eu_sub_slices" },
>- "$EuDualSubslicesSlice0123Count": { 'c': "perf->devinfo.n_eu_sub_slices_half_slices" },
>- "$EuThreadsCount": { 'c': "perf->devinfo.eu_threads_count" },
>- "$SliceMask": { 'c': "perf->devinfo.slice_mask" },
>- "$DualSubsliceMask": { 'c': "perf->devinfo.subslice_mask" },
>- "$SubsliceMask": { 'c': "perf->devinfo.subslice_mask" },
>- "$GpuTimestampFrequency": { 'c': "perf->devinfo.timestamp_frequency" },
>- "$GpuMinFrequency": { 'c': "perf->devinfo.gt_min_freq" },
>- "$GpuMaxFrequency": { 'c': "perf->devinfo.gt_max_freq" },
>- "$SkuRevisionId": { 'c': "perf->devinfo.revision" },
>- "$QueryMode": { 'c': "perf->devinfo.query_mode" },
>- }
>+ self.hw_vars = hw_vars_mapping
>
> def emit_fadd(self, tmp_id, args):
> self.c("double tmp{0} = {1} + {2};".format(tmp_id, args[1], args[0]))
>@@ -286,11 +320,29 @@ class Gen:
> def splice_ugt(self, args):
> return self.brkt(args[1]) + " > " + self.brkt(args[0])
>
>+ def splice_lshft(self, args):
>+ return '(' + self.brkt(args[1]) + " << " + self.brkt(args[0]) + ')'
>+
>+ def splice_rshft(self, args):
>+ return '(' + self.brkt(args[1]) + " >> " + self.brkt(args[0]) + ')'
>+
>+ def splice_uml(self, args):
>+ return self.brkt(args[1]) + " * " + self.brkt(args[0])
>+
> def resolve_variable(self, name, set):
> if name in self.hw_vars:
> return self.hw_vars[name]['c']
> if name in set.counter_vars:
> return set.read_funcs[name] + "(perf, metric_set, accumulator)"
>+ m = re.search('\$GtSlice([0-9]+)$', name)
>+ if m:
>+ return 'intel_perf_devinfo_slice_available(&perf->devinfo, {0})'.format(m.group(1))
>+ m = re.search('\$GtSlice([0-9]+)DualSubslice([0-9]+)$', name)
>+ if m:
>+ return 'intel_perf_devinfo_subslice_available(&perf->devinfo, {0}, {1})'.format(m.group(1), m.group(2))
>+ m = re.search('\$GtSlice([0-9]+)XeCore([0-9]+)$', name)
>+ if m:
>+ return 'intel_perf_devinfo_subslice_available(&perf->devinfo, {0}, {1})'.format(m.group(1), m.group(2))
> return None
>
> def output_rpn_equation_code(self, set, counter, equation):
>diff --git a/lib/i915/perf-configs/perf-metricset-codegen.py b/lib/i915/perf-configs/perf-metricset-codegen.py
>index 00528c31..80b01be5 100644
>--- a/lib/i915/perf-configs/perf-metricset-codegen.py
>+++ b/lib/i915/perf-configs/perf-metricset-codegen.py
>@@ -126,6 +126,19 @@ def generate_metric_sets(args, gen):
> metric_set->c_offset = metric_set->b_offset + 8;
> metric_set->perfcnt_offset = metric_set->c_offset + 8;
>
>+ """))
>+ elif gen.chipset.startswith("acm"):
>+ c(textwrap.dedent("""\
>+ metric_set->perf_oa_format = I915_OA_FORMAT_A24u40_A14u32_B8_C8;
>+
>+ metric_set->perf_raw_size = 256;
>+ metric_set->gpu_time_offset = 0;
>+ metric_set->gpu_clock_offset = 1;
>+ metric_set->a_offset = 2;
>+ metric_set->b_offset = metric_set->a_offset + 38;
>+ metric_set->c_offset = metric_set->b_offset + 8;
>+ metric_set->perfcnt_offset = metric_set->c_offset + 8;
>+
> """))
> else:
> c(textwrap.dedent("""\
>--
>2.25.1
>
More information about the igt-dev
mailing list