code: def send(x, communicator, rank, tag=0):
      """Send elements to target process.
  
      This function returns a dummy variable only holding the computational
      graph. If ``backward()`` is invoked by this dummy variable, it will
      try to receive gradients from the target process and send them back
      to the parent nodes.
  
      Args:
          x (~chainer.Variable): Variable holding a matrix which you would like
              to send.
          communicator (chainer.communicators.CommunicatorBase):
              ChainerMN communicator.
          rank (int): Target process specifier.
          tag (int): Optional message ID (MPI feature).
  
      Returns:
          ~chainer.Variable:
              A dummy variable with no actual data, only holding the
              computational graph. Please refer
              ``chainermn.functions.pseudo_connect`` for detail.
  
      """
      chainer.utils.experimental("chainermn.functions.send")
  
      if rank == communicator.rank:
          raise ValueError(
              "rank must be different from communicator rank, "
              "otherwise deadlock occurs"
          )
  
      xp = backend.get_array_module(*x)
  
      # Dummy variable to retain gradient computation of send,
      # otherwise the corresponding recv will cause deadlock in backward
      # in the case where all inputs for this function does not require_grad.
      dummy_var = chainer.Variable(xp.array([], dtype=xp.float32))
  
      if isinstance(x, list) or isinstance(x, tuple):
          inputs = x + type(x)([dummy_var])
          delegate_variable = Send(
              communicator, peer_rank=rank, peer_tag=tag
          )(*inputs)
      else:
          delegate_variable = Send(
              communicator, peer_rank=rank, peer_tag=tag
          )(x, dummy_var)
  
      delegate_variable.name = "delegate_variable"
      return delegate_variable
  
file_path: chainer/chainermn/functions/point_to_point_communication.py
imports: import chainer
  from chainer import backend
  import chainer.utils
label_desc: Use image node_id 1 for calling a global function with example usage: send(x, communicator, rank, tag) and returns: delegate_variable