class_docstr: This class includes all the information needed to benchmark an operator.
  op_bench: it's a user-defined class (child of Caffe2BenchmarkBase)
  which includes input and operator, .etc
  test_config: a namedtuple includes test_name, input_shape, tag, run_backward.
  When run_backward is false, the run_forward method will be executed, otherwise
  run_backward method will be executed.
class_docstr_tok: ["This","class","includes","all","the","information","needed","to","benchmark","an","operator",".","op_bench",":","it","'s","a","user-defined","class","(","child","of","Caffe2BenchmarkBase",")","which","includes","input","and","operator",",",".etc","test_config",":","a","namedtuple","includes","test_name",",","input_shape",",","tag",",","run_backward",".","When","run_backward","is","false",",","the","run_forward","method","will","be","executed",",","otherwise","run_backward","method","will","be","executed","."]
docstr: Run the backward path of an operator in a loop
docstr_tok: ["Run","the","backward","path","of","an","operator","in","a","loop"]
code: def run_backward(self, num_runs, print_per_iter=False):
      """Run the backward path of an operator in a loop"""
      with core.DeviceScope(self.op_bench.dev):
          op = self.op_bench.backward()
      if not workspace.RunOperatorMultiple(op, num_runs):
          raise ValueError(
              f"Unable to run operator gradient test case: {self.test_name}"
          )
  
imports: from collections import namedtuple
  import benchmark_utils
  from benchmark_test_generator import _register_test
  from caffe2.proto import caffe2_pb2
  from caffe2.python import core, workspace
  from .benchmark_core import TestConfig
label_desc: Use image node_id 3 for calling the Caffe2OperatorTestCase obj's underlying member method code with example usage: obj.run_backward(num_runs, print_per_iter) without return types