o
    Ne                     @   sB   d dl mZ ddl mZ ejjZddlmZ G dd dejZdS )	   )
collective   )core    )fleetc                       s,   e Zd Z fddZdd Zdd Z  ZS )AscendTranspilerc                    s(   d| _ tt| | j  || _|| _d S )Nr   )nringssuperr   __init__Z_startup_program_main_program)selfZstartup_programZmain_program	__class__ YD:\Projects\ConvertPro\env\Lib\site-packages\paddle/fluid/transpiler/ascend_transpiler.pyr
      s   
zAscendTranspiler.__init__c           
      C   s4  | j  }d}d }ttt|jD ]\}}| |r| j|jv r|	 | j }t
|dkr/qt
|d dks9J |}tdt
|dD ]M}|j||  }	|j||d   }|	jrYqC|d | j }|j|d dd|id|id|| jtjid	 |j|d d
d|id|id
dt  | jtjid	 qCq|d u rd S d S )Nr   r   r   Zc_allreduce_sumXZOutring_id)typeZinputsZoutputsattrsscaleg      ?)r   Zglobal_blockreversedlist	enumerateopsZ_is_backward_opZop_role_var_keyZ
attr_namesZ	all_attrslenrangevarsZis_distributedr   Z
_insert_opZop_role_keyOpRoleZBackwardr   Z
worker_num)
r   blockr   ZgradidxopZop_role_varoffsetiparamr   r   r   _insert_allreduce_ops   sJ   



	z&AscendTranspiler._insert_allreduce_opsc                 C   s   |    d S )N)r%   )r   r   r   r   	transpileI   s   zAscendTranspiler.transpile)__name__
__module____qualname__r
   r%   r&   __classcell__r   r   r   r   r      s    +r   N)	 r   r   Zop_proto_and_checker_makerr   Zpaddle.distributedr   Z
Collectiver   r   r   r   r   <module>   s
   