code: def schedule_spconv2d_3x3_nchw(cfg, outs):
      """Sparse Conv2d 3x3 schedule (NCHW)."""
      outs = [outs] if isinstance(outs, te.tensor.Tensor) else outs
      s = te.create_schedule([x.op for x in outs])
  
      def _callback(op):
          if op.tag == "conv3x3_spNCHW":
              # wptr, wind, im2col, wdat
              _, _, im2col, _ = op.input_tensors
  
              n_samples, f_o, f_i, b_c, imglen = s[op].op.axis
              (sum_ax,) = s[op].op.reduce_axis
              hw1, hw2, hw3 = cfg["tile_hw"].apply(s, op, imglen)
              s[op].reorder(
                  n_samples, hw1, f_o, hw2, sum_ax, f_i, b_c, hw3
              )
              s[op].unroll(f_i)
              s[op].unroll(b_c)
              s[op].vectorize(hw3)
  
              s[im2col].compute_at(s[op], hw1)
              n_samples, ckk, imglen = s[im2col].op.axis
              ckk1, ckk2, ckk3 = cfg["tile_ckk"].apply(s, im2col, ckk)
              hw2, hw3 = s[im2col].split(
                  imglen, factor=cfg["tile_hw"].size[-1]
              )
              s[im2col].reorder(n_samples, ckk1, ckk2, hw2, ckk3, hw3)
              s[im2col].unroll(ckk3)
              s[im2col].vectorize(hw3)
  
      traverse_inline(s, outs[0].op, _callback)
      return s
  
file_path: tvm/python/tvm/topi/x86/sparse.py
imports: from functools import partial, reduce
  from tvm import autotvm, te, tir
  from tvm.target.x86 import get_simd_32bit_lanes
  from ..transform import reshape
  from ..utils import get_const_int, traverse_inline
label_desc: Use image node_id 5 for calling a global function with example usage: schedule_spconv2d_3x3_nchw(cfg, outs) and returns: s