docs: def sg_parallel(func):
      r"""Decorates function as multiple gpu support towers.
      Args:
          func: function to decorate
      """
      @wraps(func)
      def wrapper(**kwargs):
          r"""Manages arguments of `tf.sg_opt`.
  
          Args:
            kwargs: keyword arguments. The wrapped function will be provided with gpu_index argument.
          """
          # parse option
          opt = tf.sg_opt(kwargs)
  
          # loop for all available GPUs
          res = []
          for i in range(sg_gpus()):
              # specify device
              with tf.device('/gpu:%d' % i):
                  # give new scope only to operation
                  with tf.name_scope('gpu_%d' % i):
                      # save reuse flag
                      with sg_context(reuse=(True if i > 0 else False)):
                          # call function
                          res.append(func(opt * tf.sg_opt(gpu_index=i)))
  
          return res
  
      return wrapper