o
    Me+	  ã                   @   s>   d dl m  mZ d dlm  mZ G dd„ dƒZdd„ ZdS )é    Nc                   @   s$   e Zd ZdZdZdZdZdZdZdS )ÚReduceOpaÇ  

    Specify the type of operation used for element-wise reductions.
    It should be one of the following values:

        ReduceOp.SUM

        ReduceOp.MAX

        ReduceOp.MIN

        ReduceOp.PROD

    Examples:
        .. code-block:: python

            # required: distributed
            import paddle
            import paddle.distributed as dist

            dist.init_parallel_env()
            if dist.get_rank() == 0:
                data = paddle.to_tensor([[4, 5, 6], [4, 5, 6]])
            else:
                data = paddle.to_tensor([[1, 2, 3], [1, 2, 3]])
            dist.all_reduce(data, op=dist.ReduceOp.SUM)
            print(data)
            # [[5, 7, 9], [5, 7, 9]] (2 GPUs)
    r   é   é   é   é   N)	Ú__name__Ú
__module__Ú__qualname__Ú__doc__ÚSUMÚMAXÚMINÚPRODZAVG© r   r   úWD:\Projects\ConvertPro\env\Lib\site-packages\paddle/distributed/communication/reduce.pyr      s    r   c                 C   s˜   t  ¡ r)| tjkrtjjS | tjkrtjjS | tjkrtjjS | tjkr(tjjS n| tjkr0dS | tjkr7dS | tjkr>dS | tjkrEdS t	d 
|¡ƒ‚)NZc_allreduce_sumZc_allreduce_maxZc_allreduce_minZc_allreduce_prodzUnknown reduce_op type for {}.)Ú	frameworkZin_dygraph_moder   r   Úcorer   r   r   ZPRODUCTÚ
ValueErrorÚformat)Z	reduce_opÚ	func_namer   r   r   Ú_get_reduce_op8   s&   



ÿ



r   )Zpaddle.fluid.frameworkZfluidr   Zpaddle.fluid.corer   r   r   r   r   r   r   Ú<module>   s   %