Ë
    ÃÓ^jéu  ã                   ó  — d dl Z d dlZd dlmc mZ d dlmZ d dlm	Z	 ddl
mZmZ ddlmZ  e j                  e«      Zdej$                  dej&                  d	efd
„Zdej$                  dej&                  ddd	dfd„Zdej$                  d	ej.                  fd„Z e	eeef      «       Zdej.                  d	dfd„Zdej.                  d	efd„Zdej$                  deddfd„Zdej$                  fd„Z d	ej.                  fd„Z!d„ Z"d„ Z#y)é    N)Úis_symbolic)Ú
OrderedSeté   )ÚconfigÚir)ÚVÚxÚcomm_buffer_typeÚreturnc                 óš  — t        | «      }t        |t        j                  «      ryt        |t        j                  «      r|j                  «       sy|j                  «       }t        |t        j                  «      ryt        |t        j                  «      ryt        |t        j                  «      rt        |j                  «       «      syy)ze
    Check if an input can be realized as a comm buffer of the specified
    `comm_buffer_type`.
    TF)Ú	_get_dataÚ
isinstancer   ÚLoopsÚBufferÚshould_allocateÚget_output_specÚCommBufferLayoutÚFixedLayoutÚFlexibleLayoutr   Ú	get_numel)r	   r
   ÚdataÚlayouts       úh/var/www/ramen.bs-engineer-server.com/venv/lib/python3.12/site-packages/torch/_inductor/comm_lowering.pyÚcan_realize_as_comm_bufferr   7   s’   € ô �Q‹<€Dä�$œŸ™Ô!Øô �$œŸ	™	Ô"¨4×+?Ñ+?Ô+AØà×!Ñ!Ó#€FÜ�&œ"×-Ñ-Ô.Øä�&œ"Ÿ.™.Ô)Øä�&œ"×+Ñ+Ô,´[ÀÇÁÓAQÔ5RØàó    Ú
group_nameú,torch.distributed.distributed_c10d.GroupNamec                 óÄ  — | j                  «        t        | «      }t        |t        j                  «      sJ ‚|j                  «       }t        |t        j                  «      ryt        |t        j                  t        j                  f«      st        d|› d�«      ‚t        |j                  «       «      rt        d|› d�«      ‚t        j                  |||¬«      |_        y)zã
    Realize an input as a comm buffer of the specified `comm_buffer_type`.

    Specifically, this realizes the underlying buffer if it's still unrealized
    and changes the layout of the buffer to `ir.CommBufferLayout`.
    Nz`A buffer can only be realized as a comm buffer if it has `FlexibleLayout` or `FixedLayout` (got ú).zGA buffer with symbolic shape cannot be converted to a comm buffer (got )r   r
   r   )Úrealizer   r   r   r   r   r   r   r   ÚAssertionErrorr   r   r   )r	   r
   r   Úbufferr   s        r   Úrealize_as_comm_bufferr#   U   sÓ   € ð ‡I�I„KÜ�q‹\€FÜ�fœbŸi™iÔ(Ð(Ð(à×#Ñ#Ó%€FÜ�&œ"×-Ñ-Ô.Øô �fœr×0Ñ0´"·.±.ÐAÔBÜð:Ø:@¸ÀðEó
ð 	
ô
 �6×#Ñ#Ó%Ô&Üð"Ø"( ¨ð-ó
ð 	
ô
 ×'Ñ'ØØ)Øô€F…Mr   c                 ó”  — t        | j                  t        j                  «      rR| j                  j	                  «       }t        |t        j                  t        j
                  f«      sJ ‚|j                  S t        | j                  t        j                  «      r| j                  j                  S t        d| j                  › d�«      ‚)Nz\Expect the data attr of a `TensorBox` to be either an `ir.BaseView` or `ir.StorageBox` (got r   )r   r   r   ÚBaseViewÚunwrap_viewÚ
MutableBoxÚ
StorageBoxr!   )r	   Únodes     r   r   r   }   s�   € Ü�!—&‘&œ"Ÿ+™+Ô&à�v‰v×!Ñ!Ó#ˆÜ˜$¤§¡¬b¯m©mÐ <Ô=Ð=Ð=Ø�y‰yÐÜ	�A—F‘FœBŸM™MÔ	*à�v‰v�{‰{Ðäð8Ø89¿¹°x¸rðCó
ð 	
r   c                 ó|   — t         j                  t        t        j                  «      | j                  «       f«       y)z¤
    If a non-blocking collective is lowered as a blocking collective, the wait
    node in the original graph becomes useless and we can skip the lowering it.
    N)Ú_bufs_to_skip_waitÚaddÚidr   ÚgraphÚget_name©r	   s    r   Úmark_as_skip_waitr1   �   s%   € ô
 ×ÑœBœqŸw™w›K¨¯©«Ð6Õ7r   c                 ó`   — t        t        j                  «      | j                  «       ft        v S ©N)r-   r   r.   r/   r+   r0   s    r   Úshould_skip_waitr4   ˜   s!   € ÜŒq�w‰w‹K˜Ÿ™›Ð&Ô*<Ð<Ð<r   ÚinpÚ	reduce_opc                 óD  — ddl m} | j                  «       | j                  «       j                  z  }t
        j                  j                  xrT  ||«      xrJ t        | t        j                  j                  «      xr$ |dk(  xr |t
        j                  j                  k  S )Nr   )Úis_symm_mem_enabled_for_groupÚsum)Ú#torch.distributed._symmetric_memoryr8   r   Ú	get_dtypeÚitemsizer   Ú_collectiveÚauto_selectr   r   ÚCommBufferTypeÚSYMM_MEMÚ#one_shot_all_reduce_threshold_bytes)r5   r6   r   r8   Úinp_sizes        r   Ú$_should_lower_as_one_shot_all_reducerC   œ   sŽ   € õ
 Rà�}‰}‹ §¡£×!9Ñ!9Ñ9€Hä×Ñ×&Ñ&ò 	OÙ)¨*Ó5ò	Oä& s¬B×,=Ñ,=×,FÑ,FÓGò	Oð ˜Ñò	Oð œ×*Ñ*×NÑNÑNðr   c           	      ó@  — t        | t        j                  j                  |«       t	        j
                  t        j                  j                  t        j                  j                  t        j                  j                  j                  j                  | ||«      «      S r3   )r#   r   r?   r@   ÚpytreeÚtree_mapÚ	TensorBoxÚcreateÚFallbackKernelÚtorchÚopsÚsymm_memÚone_shot_all_reduceÚdefault)r5   r6   r   s      r   Ú_one_shot_all_reducerO   ­   sn   € Ü˜3¤× 1Ñ 1× :Ñ :¸JÔGÜ�?‰?Ü
�‰×ÑÜ
×Ñ× Ñ Ü�I‰I×Ñ×2Ñ2×:Ñ:ØØØó		
óð r   c                 óº   — t        j                  j                  | |g|¢­Ž }t        |t         j                  «      sJ ‚t         j
                  j                  |«      S r3   )r   Ú_CollectiveKernelÚcreate_out_of_placer   ÚIRNoderG   rH   )ÚkernelÚinputsÚargsr)   s       r   Ú_create_out_of_placerW   º   sH   € Ü×Ñ×3Ñ3°F¸FÐJÀTÒJ€DÜ�dœBŸI™IÔ&Ð&Ð&Ü�<‰<×Ñ˜tÓ$Ð$r   c            	      ó€  ‡‡‡‡‡‡— 	 t         j                  j                  j                   ddlmŠm	Šm
ŠmŠmŠ ˆˆˆfd„} t         j                  j                  Š | ‰j                  «      dt        j                  dt        dd	d
t        j                  fˆˆfd„«       } | ‰j                   «      dt        j                  dt        dd	d
t        j                  fˆˆfd„«       } | ‰j"                  «      ˆˆfd„«       } | ‰j$                  «      ˆfd„«       } | ‰j&                  «      ˆfd„«       } | ‰j(                  «      ˆfd„«       } | ‰j*                  «      ˆfd„«       } | ‰j,                  «      ˆfd„«       } | ‰j.                  «      ˆfd„«       }	 | ‰j0                  «      ˆfd„«       }
 | ‰j2                  «      ˆfd„«       } | ‰j4                  «      ˆˆfd„«       } | ‰j6                  «      ˆfd„«       } | t         j                  j8                  j:                  «      d„ «       } | ‰j<                  «      ˆfd„«       } | ‰j>                  «      ˆfd„«       } | ‰j@                  «      ˆfd„«       } | ‰jB                  «      ˆfd„«       }y# t        $ r t
        j                  d«       Y yw xY w)z4
    Register lowerings for the comm subsystem.
    zRInductor support for distributed collectives depends on building torch.distributedNr   )Úadd_layout_constraintÚcloneÚconstrain_to_fx_stridesÚcopy_Úregister_loweringc                 ó&   •—  ‰| ‰«        ‰| «      S r3   © )ÚfnrY   r[   r]   s    €€€r   Úregister_comm_loweringz7register_comm_lowerings.<locals>.register_comm_loweringÕ   s   ø€ Ù˜bÐ"9Ô:Ù  Ó$Ð$r   r5   r6   r   r   r   c                 ó¤  •— t        | ||«      rt        | ||«      S  ‰| «      } t        j                  rG| j	                  «        t
        j                  j                  j                  | j                  «       «       t        j                  j                  | «      } t        j                  j                  ‰j                  j                   | ||«       | S r3   )rC   rO   r   Ú reorder_for_compute_comm_overlapr    r   r.   Úno_fuse_buffer_namesr,   r/   r   ÚExternKernelÚrequire_contiguousÚ_AllReduce_KernelÚcreate_inplaceÚall_reduce_rN   )r5   r6   r   Úc10drZ   s      €€r   Ú_all_reducez,register_comm_lowerings.<locals>._all_reduceÛ   s¦   ø€ ô 0°°YÀ
ÔKÜ'¨¨Y¸
ÓCÐCñ �C‹jˆÜ×2Ò2ð �K‰KŒMÜ�G‰G×(Ñ(×,Ñ,¨S¯\©\«^Ô<ä�o‰o×0Ñ0°Ó5ˆô 	×Ñ×+Ñ+Ø×Ñ×$Ñ$ØØØô		
ð ˆ
r   c                 ó  •— t        | ||«      r! ‰| t        | ||«      «      }t        |«       | S t        j                  j                  | «      } t        j                  j                  ‰j                  j                  | ||«       | S r3   )
rC   rO   r1   r   re   rf   rg   rh   ri   rN   )r5   r6   r   Úretrj   r\   s       €€r   Ú_all_reduce_z-register_comm_lowerings.<locals>._all_reduce_ú   s‚   ø€ ô 0°°YÀ
ÔKÙØÜ$ S¨)°ZÓ@óˆCô ˜cÔ"ØˆJô �o‰o×0Ñ0°Ó5ˆÜ
×Ñ×+Ñ+Ø×Ñ×$Ñ$ØØØô		
ð ˆ
r   c                 ó¨   •— | D �cg c]
  } ‰|«      ‘Œ } }t         j                  j                  ‰j                  j                  | ||«       | S c c}w r3   ©r   rQ   rh   Úall_reduce_coalesced_rN   )rU   r6   r   r5   rj   rZ   s       €€r   Ú_all_reduce_coalescedz6register_comm_lowerings.<locals>._all_reduce_coalesced  sR   ø€ à(.Ö/ ‘%˜•*Ð/ˆÐ/Ü
×Ñ×+Ñ+Ø×&Ñ&×.Ñ.ØØØô		
ð ˆùò 0s   †Ac                 ót   •— t         j                  j                  ‰j                  j                  | ||«       | S r3   rp   )rU   r6   r   rj   s      €r   Ú_all_reduce_coalesced_z7register_comm_lowerings.<locals>._all_reduce_coalesced_  s6   ø€ ä
×Ñ×+Ñ+Ø×&Ñ&×.Ñ.ØØØô		
ð ˆr   c                 óH   •— t        ‰j                  j                  | ||«      S r3   )rW   Úall_gather_into_tensorrN   )r5   Ú
group_sizer   rj   s      €r   Ú_all_gather_into_tensorz8register_comm_lowerings.<locals>._all_gather_into_tensor(  s(   ø€ ä#Ø×'Ñ'×/Ñ/ØØØó	
ð 	
r   c           	      óÈ   •— t        j                  t        j                  j                  t        j
                  j                  ‰j                  j                  | ||«      «      S r3   )	rE   rF   r   rG   rH   rQ   rR   Ú all_gather_into_tensor_coalescedrN   )rU   rw   r   rj   s      €r   Ú!_all_gather_into_tensor_coalescedzBregister_comm_lowerings.<locals>._all_gather_into_tensor_coalesced1  sM   ø€ ä�‰Ü�L‰L×ÑÜ× Ñ ×4Ñ4Ø×5Ñ5×=Ñ=ØØØó	ó
ð 	
r   c                óx   •— t         j                  j                  ‰j                  j                  | |||¬«       |S ©N)Úout)r   rQ   rh   Úall_gather_into_tensor_outrN   )r5   rw   r   r~   rj   s       €r   Ú_all_gather_into_tensor_outz<register_comm_lowerings.<locals>._all_gather_into_tensor_out=  s>   ø€ ä
×Ñ×+Ñ+Ø×+Ñ+×3Ñ3ØØØØð 	,ô 	
ð ˆ
r   c                 óJ   •— t        ‰j                  j                  | |||«      S r3   )rW   Úreduce_scatter_tensorrN   )r5   r6   rw   r   rj   s       €r   Ú_reduce_scatter_tensorz7register_comm_lowerings.<locals>._reduce_scatter_tensorH  s+   ø€ ä#Ø×&Ñ&×.Ñ.ØØØØó
ð 	
r   c                óz   •— t         j                  j                  ‰j                  j                  | ||||¬«       |S r}   )r   rQ   rh   Úreduce_scatter_tensor_outrN   )r5   r6   rw   r   r~   rj   s        €r   Ú_reduce_scatter_tensor_outz;register_comm_lowerings.<locals>._reduce_scatter_tensor_outR  sA   ø€ ä
×Ñ×+Ñ+Ø×*Ñ*×2Ñ2ØØØØØð 	,ô 	
ð ˆ
r   c           
      óÊ   •— t        j                  t        j                  j                  t        j
                  j                  ‰j                  j                  | |||«      «      S r3   )	rE   rF   r   rG   rH   rQ   rR   Úreduce_scatter_tensor_coalescedrN   )rU   r6   rw   r   rj   s       €r   Ú _reduce_scatter_tensor_coalescedzAregister_comm_lowerings.<locals>._reduce_scatter_tensor_coalesced^  sP   ø€ ä�‰Ü�L‰L×ÑÜ× Ñ ×4Ñ4Ø×4Ñ4×<Ñ<ØØØØóó	
ð 		
r   c                 óJ   •— t        ‰j                  j                  | |||«      S r3   )rW   Úall_to_all_singlerN   )r5   Úoutput_split_sizesÚinput_split_sizesr   rj   s       €r   Ú_all_to_all_singlez3register_comm_lowerings.<locals>._all_to_all_singlek  s+   ø€ ä#Ø×"Ñ"×*Ñ*ØØØØó
ð 	
r   c                 ó„   •—  ‰| «      } t         j                  j                  ‰j                  j                  | ||«       | S r3   ©r   rQ   rh   Ú
broadcast_rN   )r5   Úsrcr   rj   rZ   s      €€r   Ú
_broadcastz+register_comm_lowerings.<locals>._broadcastu  s:   ø€ á�C‹jˆÜ
×Ñ×+Ñ+Ø�O‰O×#Ñ# S¨#¨zô	
ð ˆ
r   c                 ót   •— t         j                  j                  ‰j                  j                  | ||«       | S r3   r�   )r5   r’   r   rj   s      €r   Ú_broadcast_z,register_comm_lowerings.<locals>._broadcast_}  s1   ø€ ä
×Ñ×+Ñ+Ø�O‰O×#Ñ# S¨#¨zô	
ð ˆ
r   c                 óx   — t        t        j                  j                  j                  j
                  | |||«      S r3   )rW   rJ   rK   Ú_dtensorÚshard_dim_alltoallrN   )r5   Ú
gather_dimÚ	shard_dimr   s       r   Ú_shard_dim_alltoallz4register_comm_lowerings.<locals>._shard_dim_alltoall„  s4   € ä#Ü�I‰I×Ñ×1Ñ1×9Ñ9ØØØØó
ð 	
r   c                 óŠ   •— t        | «      r| S t        j                  j                  ‰j                  j
                  | «       | S r3   )r4   r   Ú_WaitKernelÚcreate_waitÚwait_tensorrN   )r5   rj   s    €r   Ú_wait_tensorz-register_comm_lowerings.<locals>._wait_tensorŽ  s5   ø€ ä˜CÔ ØˆJä
�‰×"Ñ" 4×#3Ñ#3×#;Ñ#;¸SÔAØˆ
r   c                 óˆ   •— t         j                  j                  | «      } t        ‰j                  j
                  | |||«      S r3   )r   re   rf   rW   ÚisendrN   )r5   ÚdstÚtagr   rj   s       €r   Ú_isendz'register_comm_lowerings.<locals>._isend–  s4   ø€ ä�o‰o×0Ñ0°Ó5ˆÜ# D§J¡J×$6Ñ$6¸¸SÀ#ÀzÓRÐRr   c                 ó´   •— t         j                  j                  | «      } t         j                  j	                  ‰j
                  j                  | |||«       | S r3   )r   re   rf   rQ   rh   ÚirecvrN   )r5   r’   r¤   r   rj   s       €r   Ú_irecvz'register_comm_lowerings.<locals>._irecv›  sG   ø€ ä�o‰o×0Ñ0°Ó5ˆÜ
×Ñ×+Ñ+Ø�J‰J×Ñ  S¨#¨zô	
ð ˆ
r   c           	      ó¶  •— |D �cg c]!  }t         j                  j                  |«      ‘Œ# }}‰j                  j                  }t
        j                  j                  5  t         j                  j                  || ||||«      \  }}}	}
}d d d «       rJ |› d|› �«       ‚t        | «      D ]H  \  }}|j                  «        |dk(  sŒt
        j                  j                  |j                  «       «       ŒJ |d   j                  «       }t        j                  t        j                  |¬«      ||	
«      }g }t!        t        | |«      «      D ]ö  \  }\  }}}|dk(  r|j"                  j%                  t        j&                  t        j(                  |¬«      ||«      «       |j*                  j%                  |j                  «       «       |j%                  |«       ŒŽt        j,                  t         j                  j/                  |«      |t0        |fg«      }|j%                  t         j2                  j5                  |«      «       Œø |S c c}w # 1 sw Y   �ŒÇxY w)Nú r§   r   )Údevice)r   re   rf   Úbatch_p2p_opsrN   r   r.   Ú	fake_moderQ   Úprocess_kernelÚzipr    Úmark_buffer_mutatedr/   Ú
get_deviceÚMultiOutputLayoutÚ	enumerateÚmutation_outputsÚappendÚMutationOutputÚ
NoneLayoutÚalias_namesÚMultiOutputÚtensor_to_layoutÚlistrG   rH   )Úop_listÚ	peer_listÚtag_listÚtensorsr   ÚtrT   Úexample_outputÚtensor_argsÚnon_tensor_argsÚunflatten_argsÚunbacked_bindingsÚopÚ
tensor_argr«   ÚpackedÚresultsÚiÚex_outÚplaceholderrj   s                       €r   Ú_batch_p2p_opsz/register_comm_lowerings.<locals>._batch_p2p_ops£  s#  ø€ àBIÖJ¸Q”2—?‘?×5Ñ5°aÕ8ÐJˆÐJØ×#Ñ#×+Ñ+ˆÜ�W‰W×Ññ 	ô ×$Ñ$×3Ñ3ØØØØØØóñØØØØØ!÷	ñ %ÐE¨¨°Ð2CÐ1DÐ&EÓEÐ$Ü! '¨;Ó7ò 	C‰NˆB�
Ø×ÑÔ Ø�W‹}Ü—‘×+Ñ+¨J×,?Ñ,?Ó,AÕBð	Cð
 ˜Q‘×*Ñ*Ó,ˆÜ×%Ñ%Ü× Ñ ¨Ô/ØØØØó
ˆð ˆÜ"+¬C°¸À.Ó,QÓ"Rò 	AÑˆA‰��A�vØ�WŠ}Ø×'Ñ'×.Ñ.Ü×%Ñ%¤b§m¡m¸6Ô&BÀAÀvÓNôð ×"Ñ"×)Ñ)¨!¯*©*«,Ô7Ø—‘˜qÕ!ô !Ÿn™nÜ×(Ñ(×9Ñ9¸&ÓAØÜ˜A�Y�Kó�ð
 —‘œrŸ|™|×2Ñ2°;Ó?Õ@ð	Að ˆùòa K÷	ñ 	ús   †&I	Á+IÉI)"rJ   rK   Ú_c10d_functionalÚ
all_reduceÚAttributeErrorÚlogÚinfoÚloweringrY   rZ   r[   r\   r]   r   rG   Ústrri   Úall_reduce_coalescedrq   rv   rz   r   r‚   r…   rˆ   r‹   Ú	broadcastr‘   r—   r˜   rŸ   r¢   r§   r¬   )ra   rk   rn   rr   rt   rx   r{   r€   rƒ   r†   r‰   rŽ   r“   r•   r›   r    r¥   r¨   rÍ   rY   rj   rZ   r[   r\   r]   s                      @@@@@@r   Úregister_comm_loweringsr×   À   sî  ý€ ðÜ�	‰	×"Ñ"×-Ò-÷õ ö%ô �9‰9×%Ñ%€Dá˜DŸO™OÓ,ðÜ�\‰\ðäðð Cðô 
�‰õ	ó -ðñ< ˜D×,Ñ,Ó-ðÜ�\‰\ðäðð Cðô 
�‰õ	ó .ðñ0 ˜D×5Ñ5Ó6ôó 7ðñ ˜D×6Ñ6Ó7óó 8ðñ ˜D×7Ñ7Ó8ó
ó 9ð
ñ ˜D×AÑAÓBó	
ó Cð	
ñ ˜D×;Ñ;Ó<óó =ðñ ˜D×6Ñ6Ó7ó
ó 8ð
ñ ˜D×:Ñ:Ó;ó	ó <ð	ñ ˜D×@Ñ@ÓAó

ó Bð

ñ ˜D×2Ñ2Ó3ó
ó 4ð
ñ ˜DŸN™NÓ+ôó ,ðñ ˜DŸO™OÓ,óó -ðñ œEŸI™I×.Ñ.×AÑAÓBñ
ó Cð
ñ ˜D×,Ñ,Ó-óó .ðñ ˜DŸJ™JÓ'óSó (ðSñ ˜DŸJ™JÓ'óó (ðñ ˜D×.Ñ.Ó/ó1ó 0ñ1øô} ò Ü�‰ð ô	
ñ 	ðús   ˆ$J ÊJ=Ê<J=c                  óÔ  ‡‡‡— 	 t         j                  j                  Š‰j                   ddlm}   | ‰j                  j                  ‰j                  j                  «        | ‰j                  j                  ‰j                  j                  «       ddlm} dt        j                   dt        j"                  d	d
dt        j                   fd„Šdt        j                   d	t$        dt        j                   fˆfd„Š |‰j                  «      dt        j                   dt$        d	t$        fˆˆfd„«       } |‰j                  «      dt        j                   dt$        d	t$        dt        j                   fˆˆfd„«       } |‰j                  «      dt        j                   dt        j                   dt$        d	t$        fˆˆfd„«       } |‰j                  «      dt        j                   dt        j                   dt$        d	t$        dt        j                   f
ˆˆfd„«       } |‰j&                  «      dt        j                   dt$        d	t$        fˆˆfd„«       } |‰j(                  «      dt        j                   dt$        d	t$        dt        j                   fˆˆfd„«       } |‰j*                  «      dt        j                   dt$        d	t$        fˆˆfd„«       } |‰j,                  «      dt        j                   dt$        d	t$        fˆˆfd„«       }	 |‰j.                  «      dt        j                   dt$        d	t$        dt        j                   fˆˆfd„«       }
 |‰j0                  «      dt        j                   dt$        dt2        d	t$        dt        j                   f
ˆˆfd„«       } |‰j4                  «      dt        j                   d	t$        dt        j                   fˆˆfd„«       } |‰j6                  «      dt        j                   d	t$        dt8        dt        j                   fˆˆfd „«       } |‰j:                  «      dt        j                   dt        j                   d!t        j                   d"t        j                   d	t$        f
ˆˆfd#„«       } |‰j<                  «      	 d-dt        j                   dt        j                   d!t        j                   d"t        j                   d	t$        f
ˆˆfd$„«       } |‰j>                  «      dt        j                   dt        j                   d%t        j                   d"t        j                   d	t$        f
ˆˆfd&„«       } |‰j@                  «      	 d.d't        j                   d(t        j                   dt2        d	t$        dt$        f
ˆˆfd)„«       } |‰jB                  «      	 d.d(t        j                   d	t$        dt$        fˆˆfd*„«       } |‰jD                  «      dt        j                   d	t$        fˆfd+„«       } |‰jF                  «      dt        j                   dt$        d	t$        fˆfd,„«       }y# t        $ r t
        j                  d«       Y yw xY w)/zH
    Register lowerings for symmetric memory (symm_mem) operations.
    z7symm_mem ops not available, skipping symm_mem loweringsNr   )Úregister_out_variantr   )r]   r5   r
   r   r   r   c                 óö   — | j                  «        t        j                  j                  | j	                  «       | j                  «       | j                  «       | j                  «       ¬«      }t        |||«       |S )zŸ
        Fallback: insert a Pointwise identity copy allocated in P2P via
        CommBufferLayout.  Used when we don't control the input's allocation.
        )r«   ÚdtypeÚinner_fnÚranges)	r    r   Ú	PointwiserH   r±   r;   Úmake_loaderÚget_sizer#   )r5   r
   r   Úcopys       r   Ú_copy_input_to_comm_bufferz?register_symm_mem_lowerings.<locals>._copy_input_to_comm_bufferõ  s`   € ð 	�‰ŒÜ�|‰|×"Ñ"Ø—>‘>Ó#Ø—-‘-“/Ø—_‘_Ó&Ø—<‘<“>ð	 #ó 
ˆô 	˜tÐ%5°zÔBØˆr   c                 óÞ   •— t        | t        j                  j                  «      r't	        | t        j                  j                  |«       | S  ‰| t        j                  j                  |«      S )aƒ  
        Ensure inp is in P2P memory for a symm_mem collective.

        If inductor controls the buffer's allocation (ComputedBuffer,
        or any buffer with FlexibleLayout/FixedLayout), switch its
        layout to CommBufferLayout in-place, zero-copy.

        If inductor does not control allocation (e.g. InputBuffer),
        insert a Pointwise identity copy into a new CommBufferLayout buffer.
        This adds an extra Triton kernel. Returns the possibly new TensorBox.

        TODO(tianrengao): eliminate the extra kernel for static-shape
        InputBuffers by pre-allocating P2P memory in the wrapper and DMA .copy_()
        )r   r   r?   r@   r#   )r5   r   râ   s     €r   Ú_maybe_realize_symm_memz<register_symm_mem_lowerings.<locals>._maybe_realize_symm_mem  sZ   ø€ ô$ & c¬2×+<Ñ+<×+EÑ+EÔFÜ" 3¬×(9Ñ(9×(BÑ(BÀJÔOØˆJá-ØÜ×!Ñ!×*Ñ*Øóð r   r6   c           	      óÚ   •—  ‰| |«      } t        j                  t        j                  j                  t        j
                  j	                  ‰j                  j                  | ||«      «      S r3   )rE   rF   r   rG   rH   rI   rM   rN   ©r5   r6   r   rä   rL   s      €€r   Ú_symm_mem_one_shot_all_reducezBregister_symm_mem_lowerings.<locals>._symm_mem_one_shot_all_reduce$  s[   ø€ ñ & c¨:Ó6ˆÜ�‰Ü�L‰L×ÑÜ×Ñ×$Ñ$Ø×,Ñ,×4Ñ4ØØØó	ó
ð 	
r   r~   c           
      óÜ   •—  ‰| |«      } t        j                  t        j                  j                  t        j
                  j	                  ‰j                  j                  | |||«      «      S r3   )rE   rF   r   rG   rH   rI   Úone_shot_all_reduce_outrN   ©r5   r6   r   r~   rä   rL   s       €€r   Ú!_symm_mem_one_shot_all_reduce_outzFregister_symm_mem_lowerings.<locals>._symm_mem_one_shot_all_reduce_out5  s^   ø€ ñ & c¨:Ó6ˆÜ�‰Ü�L‰L×ÑÜ×Ñ×$Ñ$Ø×0Ñ0×8Ñ8ØØØØóó	
ð 		
r   Úsymm_bufferÚlocal_inputc           
      óÜ   •—  ‰| |«      } t        j                  t        j                  j                  t        j
                  j	                  ‰j                  j                  | |||«      «      S r3   )rE   rF   r   rG   rH   rI   Úone_shot_all_reduce_copyrN   )rì   rí   r6   r   rä   rL   s       €€r   Ú"_symm_mem_one_shot_all_reduce_copyzGregister_symm_mem_lowerings.<locals>._symm_mem_one_shot_all_reduce_copyH  s^   ø€ ñ .¨k¸:ÓFˆÜ�‰Ü�L‰L×ÑÜ×Ñ×$Ñ$Ø×1Ñ1×9Ñ9ØØØØóó	
ð 		
r   c                 óÞ   •—  ‰| |«      } t        j                  t        j                  j                  t        j
                  j	                  ‰j                  j                  | ||||«      «      S r3   )rE   rF   r   rG   rH   rI   Úone_shot_all_reduce_copy_outrN   )rì   rí   r6   r   r~   rä   rL   s        €€r   Ú&_symm_mem_one_shot_all_reduce_copy_outzKregister_symm_mem_lowerings.<locals>._symm_mem_one_shot_all_reduce_copy_out[  sa   ø€ ñ .¨k¸:ÓFˆÜ�‰Ü�L‰L×ÑÜ×Ñ×$Ñ$Ø×5Ñ5×=Ñ=ØØØØØóó

ð 
	
r   c                 ó†   •—  ‰| |«      } t         j                  j                  ‰j                  j                  | ||«       | S r3   )r   rI   rH   Útwo_shot_all_reduce_rN   ræ   s      €€r   Ú_symm_mem_two_shot_all_reduce_zCregister_symm_mem_lowerings.<locals>._symm_mem_two_shot_all_reduce_p  óD   ø€ ñ & c¨:Ó6ˆÜ
×Ñ× Ñ Ø×)Ñ)×1Ñ1ØØØô		
ð ˆ
r   Úoutputc           
      óÜ   •—  ‰| |«      } t        j                  t        j                  j                  t        j
                  j	                  ‰j                  j                  | |||«      «      S r3   )rE   rF   r   rG   rH   rI   Útwo_shot_all_reduce_outrN   )r5   r6   r   rø   rä   rL   s       €€r   Ú!_symm_mem_two_shot_all_reduce_outzFregister_symm_mem_lowerings.<locals>._symm_mem_two_shot_all_reduce_out  s^   ø€ ñ & c¨:Ó6ˆÜ�‰Ü�L‰L×ÑÜ×Ñ×$Ñ$Ø×0Ñ0×8Ñ8ØØØØóó	
ð 		
r   c                 ó†   •—  ‰| |«      } t         j                  j                  ‰j                  j                  | ||«       | S r3   )r   rI   rH   Úmultimem_all_reduce_rN   ræ   s      €€r   Ú_symm_mem_multimem_all_reduce_zCregister_symm_mem_lowerings.<locals>._symm_mem_multimem_all_reduce_’  r÷   r   c           	      óÚ   •—  ‰| |«      } t        j                  t        j                  j                  t        j
                  j	                  ‰j                  j                  | ||«      «      S r3   )rE   rF   r   rG   rH   rI   Úmultimem_one_shot_all_reducerN   ræ   s      €€r   Ú&_symm_mem_multimem_one_shot_all_reducezKregister_symm_mem_lowerings.<locals>._symm_mem_multimem_one_shot_all_reduce¡  s[   ø€ ñ & c¨:Ó6ˆÜ�‰Ü�L‰L×ÑÜ×Ñ×$Ñ$Ø×5Ñ5×=Ñ=ØØØó	ó
ð 	
r   c           
      óÜ   •—  ‰| |«      } t        j                  t        j                  j                  t        j
                  j	                  ‰j                  j                  | |||«      «      S r3   )rE   rF   r   rG   rH   rI   Ú multimem_one_shot_all_reduce_outrN   rê   s       €€r   Ú*_symm_mem_multimem_one_shot_all_reduce_outzOregister_symm_mem_lowerings.<locals>._symm_mem_multimem_one_shot_all_reduce_out²  s^   ø€ ñ & c¨:Ó6ˆÜ�‰Ü�L‰L×ÑÜ×Ñ×$Ñ$Ø×9Ñ9×AÑAØØØØóó	
ð 		
r   Úrootc                 óÞ   •—  ‰| |«      } t        j                  t        j                  j                  t        j
                  j	                  ‰j                  j                  | ||||«      «      S r3   )rE   rF   r   rG   rH   rI   Úmultimem_one_shot_reduce_outrN   )r5   r6   r  r   r~   rä   rL   s        €€r   Ú&_symm_mem_multimem_one_shot_reduce_outzKregister_symm_mem_lowerings.<locals>._symm_mem_multimem_one_shot_reduce_outÅ  sa   ø€ ñ & c¨:Ó6ˆÜ�‰Ü�L‰L×ÑÜ×Ñ×$Ñ$Ø×5Ñ5×=Ñ=ØØØØØóó

ð 
	
r   c           	      óÚ   •—  ‰| |«      } t        j                  t        j                  j                  t        j
                  j	                  ‰j                  j                  | ||«      «      S r3   )rE   rF   r   rG   rH   rI   Úmultimem_all_gather_outrN   )r5   r   r~   rä   rL   s      €€r   Ú!_symm_mem_multimem_all_gather_outzFregister_symm_mem_lowerings.<locals>._symm_mem_multimem_all_gather_outÚ  s[   ø€ ñ & c¨:Ó6ˆÜ�‰Ü�L‰L×ÑÜ×Ñ×$Ñ$Ø×0Ñ0×8Ñ8ØØØó	ó
ð 	
r   Úsplit_last_dimc           
      óÜ   •—  ‰| |«      } t        j                  t        j                  j                  t        j
                  j	                  ‰j                  j                  | |||«      «      S r3   )rE   rF   r   rG   rH   rI   Úreduce_scatter_outrN   )r5   r   r  rø   rä   rL   s       €€r   Ú_symm_mem_reduce_scatter_outzAregister_symm_mem_lowerings.<locals>._symm_mem_reduce_scatter_outë  s^   ø€ ñ & c¨:Ó6ˆÜ�‰Ü�L‰L×ÑÜ×Ñ×$Ñ$Ø×+Ñ+×3Ñ3ØØØØóó	
ð 		
r   Ú	in_splitsÚout_splits_offsetsc                 óš   •—  ‰| |«      }  ‰||«      }t         j                  j                  ‰j                  j                  | ||||«       y r3   )r   rI   rH   Úall_to_all_vdevrN   )r5   r~   r  r  r   rä   rL   s        €€r   Ú_symm_mem_all_to_all_vdevz>register_symm_mem_lowerings.<locals>._symm_mem_all_to_all_vdevþ  sT   ø€ ñ & c¨:Ó6ˆÙ% c¨:Ó6ˆÜ
×Ñ× Ñ Ø×$Ñ$×,Ñ,ØØØØØô	
ð r   c           	      óœ   •—  ‰| |«      }  ‰||«      }t         j                  j                  ‰j                  j                  | |||||«       y r3   )r   rI   rH   Úall_to_all_vdev_2drN   )r5   r~   r  r  r   Úmajor_alignrä   rL   s         €€r   Ú_symm_mem_all_to_all_vdev_2dzAregister_symm_mem_lowerings.<locals>._symm_mem_all_to_all_vdev_2d  sW   ø€ ñ & c¨:Ó6ˆÙ% c¨:Ó6ˆÜ
×Ñ× Ñ Ø×'Ñ'×/Ñ/ØØØØØØô	
ð r   Úin_splits_offsetsc                 óš   •—  ‰| |«      }  ‰||«      }t         j                  j                  ‰j                  j                  | ||||«       y r3   )r   rI   rH   Úall_to_all_vdev_2d_offsetrN   )r5   r~   r  r  r   rä   rL   s        €€r   Ú#_symm_mem_all_to_all_vdev_2d_offsetzHregister_symm_mem_lowerings.<locals>._symm_mem_all_to_all_vdev_2d_offset(  sT   ø€ ñ & c¨:Ó6ˆÙ% c¨:Ó6ˆÜ
×Ñ× Ñ Ø×.Ñ.×6Ñ6ØØØØØô	
ð r   Úin_tileÚout_tilec                 óš   •—  ‰| |«      }  ‰||«      }t         j                  j                  ‰j                  j                  | ||||«       y r3   )r   rI   rH   Útile_reducerN   )r  r  r  r   r6   rä   rL   s        €€r   Ú_symm_mem_tile_reducez:register_symm_mem_lowerings.<locals>._symm_mem_tile_reduce<  sT   ø€ ñ *¨'°:Ó>ˆÙ*¨8°ZÓ@ˆÜ
×Ñ× Ñ Ø× Ñ ×(Ñ(ØØØØØô	
ð r   c                 óÆ   •— t        | «      D ]  \  }} ‰||«      | |<   Œ  ‰||«      }t        j                  j                  ‰j                  j
                  | ||||«       y r3   )r³   r   rI   rH   Úmulti_root_tile_reducerN   )	Úin_tilesr  Úrootsr   r6   rÊ   r  rä   rL   s	          €€r   Ú _symm_mem_multi_root_tile_reducezEregister_symm_mem_lowerings.<locals>._symm_mem_multi_root_tile_reduceP  sr   ø€ ô $ HÓ-ò 	G‰JˆAˆwÙ1°'¸:ÓFˆH�QŠKð	Gá*¨8°ZÓ@ˆÜ
×Ñ× Ñ Ø×+Ñ+×3Ñ3ØØØØØô	
ð r   c                 óF   •— t        ‰j                  j                  | |«      S r3   )rW   Ú_low_contention_all_gatherrN   )r5   r   rL   s     €r   Ú#_symm_mem_low_contention_all_gatherzHregister_symm_mem_lowerings.<locals>._symm_mem_low_contention_all_gathere  s'   ø€ ô $Ø×/Ñ/×7Ñ7ØØó
ð 	
r   c                 óH   •— t        ‰j                  j                  | ||«      S r3   )rW   Ú_low_contention_reduce_scatterrN   )r5   r6   r   rL   s      €r   Ú'_symm_mem_low_contention_reduce_scatterzLregister_symm_mem_lowerings.<locals>._symm_mem_low_contention_reduce_scattert  s*   ø€ ô $Ø×3Ñ3×;Ñ;ØØØó	
ð 	
r   r3   )r9   )$rJ   rK   rL   rM   rÐ   rÑ   rÒ   Útorch._library._out_variantrÙ   rN   ré   rï   rò   rÓ   r]   r   rG   r?   rÔ   rõ   rú   rý   r   r  r  Úintr
  r  Úboolr  r  r  r   r#  r(  r+  )rÙ   r]   rç   rë   rð   ró   rö   rû   rþ   r  r  r  r  r  r  r  r  r!  r&  r)  r,  râ   rä   rL   s                        @@@r   Úregister_symm_mem_loweringsr0  Ø  s„  ú€ ð	Ü—9‘9×%Ñ%ˆð
 	×$Ò$õ
 Añ Ø×$Ñ$×,Ñ,Ø×(Ñ(×0Ñ0ôñ Ø×)Ñ)×1Ñ1Ø×-Ñ-×5Ñ5ôõ
 ,ðÜ�\‰\ðä×+Ñ+ðð Cðô 
�‰ó	ð&Ü�\‰\ðäðô 
�‰õñ8 �x×3Ñ3Ó4ð
Ü�\‰\ð
äð
ô õ
ó 5ð
ñ  �x×7Ñ7Ó8ð
Ü�\‰\ð
äð
ô ð
ô �\‰\õ	
ó 9ð
ñ$ �x×8Ñ8Ó9ð
Ü—\‘\ð
ä—\‘\ð
ô ð
ô õ	
ó :ð
ñ$ �x×<Ñ<Ó=ð
Ü—\‘\ð
ä—\‘\ð
ô ð
ô ð	
ô
 �\‰\õ
ó >ð
ñ( �x×4Ñ4Ó5ðÜ�\‰\ðäðô õó 6ðñ �x×7Ñ7Ó8ð
Ü�\‰\ð
äð
ô ð
ô —‘õ	
ó 9ð
ñ$ �x×4Ñ4Ó5ðÜ�\‰\ðäðô õó 6ðñ �x×<Ñ<Ó=ð
Ü�\‰\ð
äð
ô õ
ó >ð
ñ  �x×@Ñ@ÓAð
Ü�\‰\ð
äð
ô ð
ô �\‰\õ	
ó Bð
ñ$ �x×<Ñ<Ó=ð
Ü�\‰\ð
äð
ô ð
ô ð	
ô
 �\‰\õ
ó >ð
ñ( �x×7Ñ7Ó8ð
Ü�\‰\ð
äð
ô �\‰\õ
ó 9ð
ñ  �x×2Ñ2Ó3ð
Ü�\‰\ð
äð
ô ð
ô —‘õ	
ó 4ð
ñ$ �x×/Ñ/Ó0ðÜ�\‰\ðä�\‰\ðô —<‘<ðô ŸL™Lð	ô
 õó 1ðñ& �x×2Ñ2Ó3ð ñÜ�\‰\ðä�\‰\ðô —<‘<ðô ŸL™Lð	ô
 õó 4ðñ* �x×9Ñ9Ó:ðÜ�\‰\ðä�\‰\ðô Ÿ<™<ðô ŸL™Lð	ô
 õó ;ðñ& �x×+Ñ+Ó,ð ñÜ—‘ðä—,‘,ðô ðô ð	ô
 õó -ðñ& �x×6Ñ6Ó7ð ñä—,‘,ðô ð	ô
 õó 8ðñ( �x×:Ñ:Ó;ð
Ü�\‰\ð
äô
ó <ð
ñ �x×>Ñ>Ó?ð
Ü�\‰\ð
äð
ô ô
ó @ñ
øôe ò Ü�‰ÐJÔKÙðús   …&Y ÙY'Ù&Y')$ÚloggingrJ   Útorch.utils._pytreeÚutilsÚ_pytreerE   Útorch._inductor.utilsr   Útorch.utils._ordered_setr   Ú r   r   Úvirtualizedr   Ú	getLoggerÚ__name__rÑ   rG   r?   r/  r   r#   rS   r   Útupler.  rÔ   r+   r1   r4   rC   rO   rW   r×   r0  r_   r   r   ú<module>r<     s@  ðã ã ß $Ð $Ý -Ý /ç Ý ð €g×Ñ˜Ó!€ðTØ	‡|�|ðØ')×'8Ñ'8ðà	óð<%Ø	‡|�|ð%à×'Ñ'ð%ð ?ð%ð 
ó	%ðP
�—‘ð 
 "§)¡)ó 
ð  1�Z  c¨3 h¡Ñ0Ó2Ð ð8˜Ÿ™ð 8 tó 8ð=˜Ÿ	™	ð = dó =ðØ	�‰ðàðð ?óð"
˜bŸl™ló 
ð%°2·9±9ó %òUópk
r   