code: def schedule_pool_grad(outs):
      """Schedule for pool_grad on CUDA
  
      Parameters
      ----------
      outs: Array of Tensor
          The computation graph description of pool_grad
          in the format of an array of tensors.
  
      Returns
      -------
      s: Schedule
          The computation schedule for pool_grad.
      """
      outs = [outs] if isinstance(outs, te.tensor.Tensor) else outs
      s = te.create_schedule([x.op for x in outs])
  
      def _schedule_pool_grad(op):
          if op in s.outputs:
              out = op
          else:
              out = outs[0].op.output(0)
          fused = s[out].fuse(*s[out].op.axis)
          num_thread = tvm.target.Target.current(
              allow_none=False
          ).max_num_threads
          bx, tx = s[out].split(fused, factor=num_thread)
          s[out].bind(bx, te.thread_axis("blockIdx.x"))
          s[out].bind(tx, te.thread_axis("threadIdx.x"))
  
          if tag.COMM_REDUCE_IDX in op.input_tensors[0].op.tag:
              max_pool_index = op.input_tensors[0]
              s[max_pool_index].compute_at(s[out], tx)
  
              pool_input = max_pool_index.op.input_tensors[0]
              if isinstance(pool_input.op, tvm.te.ComputeOp):
                  # handle padding
                  s[pool_input].compute_inline()
          if op not in s.outputs:
              s[op].compute_at(s[out], tx)
  
      def _callback(op):
          if op.tag.startswith("pool_grad"):
              _schedule_pool_grad(op)
  
      traverse_inline(s, outs[0].op, _callback)
  
      return s
  
file_path: tvm/python/tvm/topi/cuda/pooling.py
imports: import tvm
  from tvm import te
  from ..None import tag
  from ..utils import traverse_inline
  from .reduction import _schedule_reduce
  from .injective import schedule_injective_from_existing
label_desc: Use image node_id 3 for calling a global function with example usage: schedule_pool_grad(outs) and returns: s