code: def _create_schedule_template(
      cfg, dshape, kshape, strides, padding, dilation
  ):
      """Create schedule configuration from input arguments"""
      n, ic, h, w = dshape
      oc, _, kh, kw = kshape
  
      pt, pl, pb, pr = nn.get_pad_tuple(padding, (kh, kw))
      sh, sw = (
          strides
          if isinstance(strides, (tuple, list))
          else (strides, strides)
      )
      oh = (h - kh + pt + pb) // sh + 1
      ow = (w - kw + pl + pr) // sw + 1
      ic_bn_upper = 32
      oc_bn_upper = 64
      oc_bn_lower = min(oc, 8)
      ic_bn_candidates, oc_bn_candidates = [], []
      for i in range(1, ic + 1):
          if ic % i == 0 and i <= ic_bn_upper:
              ic_bn_candidates.append(i)
      if not ic_bn_candidates:
          ic_bn_candidates.append(1)
          ic_bn_candidates.append(ic)
  
      for i in range(1, oc + 1):
          if oc % i == 0 and oc_bn_lower <= i <= oc_bn_upper:
              oc_bn_candidates.append(i)
      if not oc_bn_candidates:
          oc_bn_candidates.append(1)
          oc_bn_candidates.append(oc)
  
      blk_candidates_low_limits = 5
      blk_oh_list, blk_ow_list = [], []
      for i, j in zip(range(oh, 0, -1), range(ow, 0, -1)):
          if i <= 16 and oh % i == 0:
              blk_oh_list.append(i)
          if j <= 16 and ow % j == 0:
              blk_ow_list.append(j)
  
      if len(blk_oh_list) < blk_candidates_low_limits:
          for i in range(2, oh):
              if i not in blk_oh_list:
                  blk_oh_list.append(i)
                  if len(blk_oh_list) >= 5:
                      break
  
      if len(blk_ow_list) < blk_candidates_low_limits:
          for i in range(min(ow - 1, 16), 1, -1):
              if i not in blk_ow_list:
                  blk_ow_list.append(i)
                  if len(blk_ow_list) >= 5:
                      break
  
      # Create schedule config
      cfg.define_knob("tile_ic", ic_bn_candidates)
      cfg.define_knob("tile_oc", oc_bn_candidates)
      cfg.define_knob("block_oh", blk_oh_list)
      cfg.define_knob("block_ow", blk_ow_list)
  
file_path: tvm/python/tvm/topi/intel_graphics/conv2d.py
imports: from __future__ import absolute_import
  import tvm
  from tvm import te
  from tvm import autotvm
  from tvm.autotvm.task.space import SplitEntity, OtherOptionEntity
  from ..None import nn
  from ..None import utils
  from ..utils import simplify, get_const_tuple, traverse_inline
label_desc: Use image node_id 2 for calling a global function with example usage: _create_schedule_template(cfg, dshape, kshape, strides, padding, dilation) without return types