code: def tile_and_bind3d(
      s, tensor, z, y, x, z_factor=2, y_factor=None, x_factor=None
  ):
      """tile and bind 3d"""
      y_factor = y_factor or z_factor
      x_factor = x_factor or y_factor
      zo, zi = s[tensor].split(z, z_factor)
      yo, yi = s[tensor].split(y, y_factor)
      xo, xi = s[tensor].split(x, x_factor)
      s[tensor].reorder(zo, yo, xo, zi, yi, xi)
  
      thread_z = te.thread_axis((0, z_factor), "threadIdx.z")
      thread_y = te.thread_axis((0, y_factor), "threadIdx.y")
      thread_x = te.thread_axis((0, x_factor), "threadIdx.x")
      s[tensor].bind(zo, te.thread_axis("blockIdx.z"))
      s[tensor].bind(zi, thread_z)
      s[tensor].bind(yo, te.thread_axis("blockIdx.y"))
      s[tensor].bind(yi, thread_y)
      s[tensor].bind(xo, te.thread_axis("blockIdx.x"))
      s[tensor].bind(xi, thread_x)
      return xi, thread_z, thread_y, thread_x
  
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 3 for calling a global function with example usage: tile_and_bind3d(s, tensor, z, y, x, z_factor, y_factor, x_factor) and returns: xi,  thread_z,  thread_y,  thread_x