code: def subcomm_init(prows, pcols, partition_type):
      sID = get_session_id()
      ngpus = get_n_workers()
      if prows is None and pcols is None:
          if partition_type == 1:
              pcols, prows = __get_2D_div(ngpus)
          else:
              prows, pcols = __get_2D_div(ngpus)
      else:
          if prows is not None and pcols is not None:
              if ngpus != prows * pcols:
                  raise Exception(
                      "prows*pcols should be equal to the\
   number of processes"
                  )
          elif prows is not None:
              if ngpus % prows != 0:
                  raise Exception(
                      "prows must be a factor of the number\
   of processes"
                  )
              pcols = int(ngpus / prows)
          elif pcols is not None:
              if ngpus % pcols != 0:
                  raise Exception(
                      "pcols must be a factor of the number\
   of processes"
                  )
              prows = int(ngpus / pcols)
  
      client = default_client()
      client.run(_subcomm_init, sID, pcols)
      global __subcomm
      __subcomm = (prows, pcols, partition_type)
  
file_path: cugraph/python/cugraph/cugraph/dask/comms/comms.py
imports: from cugraph.dask.common.read_utils import MissingUCXPy
  from pylibraft.common.handle import Handle
  from cugraph.dask.comms.comms_wrapper import init_subcomms
  from dask.distributed import default_client, get_worker
  from cugraph.dask.common import read_utils
  import math
label_desc: Use image node_id 2 for calling a global function with example usage: subcomm_init(prows, pcols, partition_type) without return types