code: def _scatter(link, array, target):
      size, num = size_num_grads(link)
  
      ptrs = numpy.zeros(num, dtype=numpy.uint64)
      dtypes = numpy.zeros(num, dtype=numpy.int8)
      info = numpy.zeros(num + 1, dtype=numpy.int32)
      info[0] = 0
      i = 0
      for _, param in sorted(link.namedparams()):
          if param.size == 0:
              continue
          ptrs[i] = 0  # NULL pointer
          d = getattr(param, target)
          if d is None:
              d = cuda.cupy.zeros(param.shape, dtype=param.dtype)
              setattr(param, target, d)
          ptrs[i] = d.data.ptr
          dtypes[i] = 0  # fp32
          if param.dtype == numpy.float16:
              dtypes[i] = 1  # fp16
          info[i + 1] = info[i] + param.size
          i += 1
      if i != num:
          raise ()
      info[0] = num
  
      ptrs = cuda.to_gpu(ptrs)
      dtypes = cuda.to_gpu(dtypes)
      info = cuda.to_gpu(info)
  
      return _memcpy_scatter()(ptrs, dtypes, info, array, size=size)
  
imports: import multiprocessing
  import warnings
  import numpy
  import six
  import chainer
  from chainer.backends import cuda
  from chainer.dataset import convert
  from chainer import reporter
  from chainer.training.updaters import standard_updater
label_desc: Use image node_id 8 for calling a global function with example usage: _scatter(link, array, target) and returns: _memcpy_scatter