code: def _schedule_depthwise_conv2d_NCHWc_impl(
      s, cfg, data_vec, kernel_vec, conv_out, output
  ):
      tile_ow, oc_bn = cfg["tile_ow"].size[-1], cfg["tile_oc"].size[-1]
      unroll_kw = cfg["unroll_kw"].val
  
      # schedule pad
      if (
          isinstance(s[data_vec].op, tvm.te.ComputeOp)
          and "pad" in data_vec.op.tag
      ):
          batch, ic_chunk, ih, iw, ic_block = s[data_vec].op.axis
          s[data_vec].vectorize(ic_block)
          parallel_axis = s[data_vec].fuse(batch, ic_chunk, ih)
          s[data_vec].parallel(parallel_axis)
  
      C, O = conv_out, output
      CC = s.cache_write(C, "global")
  
      _, ic_chunk, oh, ow, ic_block = s[C].op.axis
      ow_chunk, ow_block = s[C].split(ow, factor=tile_ow)
      s[C].reorder(ic_chunk, oh, ow_chunk, ow_block, ic_block)
      s[C].vectorize(ic_block)
      parallel_axis = s[C].fuse(ic_chunk, oh)
      s[C].parallel(parallel_axis)
      s[CC].compute_at(s[C], ow_chunk)
  
      # the ow axis in the cached block CC is the ow_block in C
      _, ic_chunk, oh, ow, ic_block = s[CC].op.axis
      kh, kw = s[CC].op.reduce_axis
      s[CC].reorder(ic_chunk, oh, kh, kw, ow, ic_block)
      if unroll_kw:
          s[CC].unroll(kw)
      s[CC].vectorize(ic_block)
      s[CC].unroll(ow)
  
      if C != O:
          out_ndim = len(s[O].op.axis)
          if out_ndim == 5:
              batch, oc_chunk, oh, ow, oc_block = s[O].op.axis
              ow_chunk, ow_block = s[O].split(ow, factor=tile_ow)
              s[O].reorder(oc_chunk, oh, ow_chunk, ow_block, oc_block)
              parallel_axis = s[O].fuse(oc_chunk, oh)
              s[C].compute_at(s[O], parallel_axis)
              s[O].vectorize(oc_block)
              s[O].parallel(parallel_axis)
          elif out_ndim == 4:
              batch, oc, oh, ow = s[O].op.axis
              ow_chunk, ow_block = s[O].split(ow, factor=tile_ow)
              oc_chunk, oc_block = s[O].split(oc, factor=oc_bn)
              s[O].reorder(oc_chunk, oh, ow_chunk, ow_block, oc_block)
              parallel_axis = s[O].fuse(oc_chunk, oh)
              s[C].compute_at(s[O], parallel_axis)
              s[O].vectorize(oc_block)
              s[O].parallel(parallel_axis)
          else:
              raise ValueError(f"Unsupported output ndim: {out_ndim}")
  
      return s
  
file_path: tvm/python/tvm/topi/x86/depthwise_conv2d.py
imports: import tvm
  from tvm import autotvm, te
  from tvm.autotvm.task.space import OtherOptionEntity, SplitEntity
  from tvm.target.x86 import get_simd_32bit_lanes
  from ..nn.conv2d import unpack_NCHWc_to_nchw
  from ..nn.depthwise_conv2d import _get_workload, depthwise_conv2d_infer_layout
  from ..nn.pad import pad
  from ..nn.utils import get_pad_tuple
  from ..utils import get_const_tuple, traverse_inline
label_desc: Use image node_id 7 for calling a global function with example usage: _schedule_depthwise_conv2d_NCHWc_impl(s, cfg, data_vec, kernel_vec, conv_out, output) and returns: s