class_docstr: BenchmarkRunner is responsible for benchmarking all the registered
  benchmark test groups.
  
  Attributes:
      tag_filter (str): control the benchmarks which matches the tag.
      operator (str): only run benchmark test cases that contains
  this filter string in the test case's id.
      test_name (str): only run benchmark test cases that matches this filter,
      this is a case-sensitive substring match and it happens in
      the _keep_test method.
class_docstr_tok: ["BenchmarkRunner","is","responsible","for","benchmarking","all","the","registered","benchmark","test","groups",".","Attributes",":","tag_filter","(","str",")",":","control","the","benchmarks","which","matches","the","tag",".","operator","(","str",")",":","only","run","benchmark","test","cases","that","contains","this","filter","string","in","the","test","case","'s","id",".","test_name","(","str",")",":","only","run","benchmark","test","cases","that","matches","this","filter",",","this","is","a","case-sensitive","substring","match","and","it","happens","in","the","_keep_test","method","."]
code: def _print_perf_result(self, reported_run_time_us, test_case):
      if self.args.report_aibench:
          # Output for AIBench
          # Print out per iteration execution time instead of avg time
          return
          test_name = "_".join(
              [test_case.framework, test_case.test_config.test_name]
          )
          for run in range(self.num_runs):
              print(
                  f"{test_case.framework}Observer "
                  + json.dumps(
                      {
                          "type": test_name,
                          "metric": "latency",
                          "unit": "us",
                          "value": str(reported_run_time_us[run]),
                      }
                  )
              )
      else:
          if test_case.framework == "PyTorch":
              print(f"# Mode: {'JIT' if self.use_jit else 'Eager'}")
  
          print(
              f"# Name: {test_case.test_config.test_name}\n# Input: {test_case.test_config.input_config}"
          )
  
          mode = (
              "Backward"
              if test_case.test_config.run_backward
              else "Forward"
          )
          if self.num_runs > 1:
              for run in range(self.num_runs):
                  print(
                      f"Run: {run}, {mode} Execution Time (us) : {reported_run_time_us[run]:.3f}"
                  )
              print()
          else:
              print(
                  f"{mode} Execution Time (us) : {reported_run_time_us[0]:.3f}\n"
              )
  
imports: import ast
  import copy
  import functools
  import json
  import timeit
  from collections import namedtuple
  import benchmark_utils
  import numpy
  import torch
  import torch.utils.cpp_extension
label_desc: Use image node_id 3 for calling the BenchmarkRunner obj's underlying member method code with example usage: obj._print_perf_result(reported_run_time_us, test_case) without return types