code: def schedule_spconv2d_3x3_nhwc(cfg, outs):
      """Sparse Conv2d 3x3 schedule (NHWC)."""
      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_spNHWC":
              (matmul,) = op.input_tensors
              # wptr, wind, im2col, wdat
              _, _, im2col, _ = matmul.op.input_tensors
              (data,) = im2col.op.input_tensors
              bsrr = matmul.shape[-2].value
              chanin = data.shape[-1].value
  
              mm_y, mm_x = s[op].op.axis
              y_t, y_o, y_i = cfg["tile_y"].apply(s, op, mm_y)
              x_o, x_i = s[op].split(mm_x, factor=bsrr)
              x_t, x_o = cfg["tile_x"].apply(s, op, x_o)
              (sum_ax,) = s[op].op.reduce_axis
              s[op].reorder(y_t, x_t, y_o, x_o, y_i, x_i, sum_ax)
              s[op].unroll(sum_ax)
              s[op].vectorize(x_i)
              s[op].unroll(y_i)
  
              s[matmul].compute_at(s[op], x_o)
              y_i, x_i, bsrr, bsrc = s[matmul].op.axis
              (sum_ax,) = s[matmul].op.reduce_axis
              s[matmul].reorder(x_i, sum_ax, y_i, bsrr, bsrc)
              s[matmul].unroll(bsrc)
              s[matmul].vectorize(bsrr)
              s[matmul].unroll(y_i)
  
              s[im2col].compute_at(s[op], y_o)
              y_i, sum_ax = s[im2col].op.axis
              _, k_i = s[im2col].split(sum_ax, factor=chanin)
              s[im2col].vectorize(k_i)
  
      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 3 for calling a global function with example usage: schedule_spconv2d_3x3_nhwc(cfg, outs) and returns: s