code: def _parallel_sch(sch, oshape, do_vectorize=False):
      def vectorize(fused_axis, num_parallel_axis, vectorize_limit=64):
          """Internal vectorization utility function."""
          reorder_axis = [fused_axis]
          for i in range(num_parallel_axis, len(sch.op.axis) - 1):
              reorder_axis.append(sch.op.axis[i])
          k = sch.op.reduce_axis
          fuse_k = sch.fuse(*k)
          c = sch.op.axis[len(sch.op.axis) - 1]
          reorder_axis += [fuse_k, c]
          sch.reorder(*reorder_axis)
          inner_length = oshape[len(oshape) - 1].value
          if inner_length <= vectorize_limit:
              sch.vectorize(c)
          else:
              split_factor = 1
              for i in range(vectorize_limit, 1, -1):
                  if inner_length % i == 0:
                      split_factor = i
                      break
              if split_factor > 1:
                  _, c_i = sch.split(c, split_factor)
                  sch.vectorize(c_i)
  
      if len(sch.op.axis) >= 5:
          fused = sch.fuse(
              sch.op.axis[0], sch.op.axis[1], sch.op.axis[2]
          )
          if do_vectorize:
              vectorize(fused, 3)
  
      elif len(sch.op.axis) >= 3:
          fused = sch.fuse(sch.op.axis[0], sch.op.axis[1])
          if do_vectorize:
              vectorize(fused, 2)
      else:
          sch.parallel(sch.op.axis[0])
          return
      sch.parallel(fused)
  
imports: from tvm import te
  from ..None import tag
label_desc: Use image node_id 1 for calling a global function with example usage: _parallel_sch(sch, oshape, do_vectorize) without return types