code: def _channelizer(x, h, y, n_chans, n_taps, n_pts):
      #  Blocks per grid sized for 2048 threads per SM
      np_type = str(x.dtype) + "_" + str(y.dtype)
  
      if n_taps <= 8:
          k_type = "channelizer_8x8"
  
          threadsperblock = (8, 8)
          blockspergrid = ((n_chans + 7) // 8, _get_numSM() * 32)
  
          _populate_kernel_cache(np_type, k_type)
  
          kernel = _get_backend_kernel(
              np_type,
              blockspergrid,
              threadsperblock,
              k_type,
          )
  
      elif n_taps <= 16:
          k_type = "channelizer_16x16"
  
          threadsperblock = (16, 16)
          blockspergrid = ((n_chans + 15) // 16, _get_numSM() * 8)
  
          _populate_kernel_cache(np_type, k_type)
  
          kernel = _get_backend_kernel(
              np_type,
              blockspergrid,
              threadsperblock,
              k_type,
          )
  
      elif n_taps <= 32:
          k_type = "channelizer_32x32"
  
          threadsperblock = (32, 32)
          blockspergrid = ((n_chans + 31) // 32, _get_numSM() * 2)
  
          _populate_kernel_cache(np_type, k_type)
  
          kernel = _get_backend_kernel(
              np_type,
              blockspergrid,
              threadsperblock,
              k_type,
          )
  
      kernel(n_chans, n_taps, n_pts, x, h, y)
  
      _print_atts(kernel)
  
file_path: cusignal/python/cusignal/filtering/_channelizer_cuda.py
imports: from ..utils._caches import _cupy_kernel_cache
  from ..utils.helper_tools import _get_function, _get_numSM, _print_atts
label_desc: Use image node_id 3 for calling a global function with example usage: _channelizer(x, h, y, n_chans, n_taps, n_pts) without return types