§
    NŠtjøF  ã                   óÔ  — d dl Z d dlZd dlZd dlZd dlZd dlmZ d dlmZ d dlm	Z	 d dl
mZ d dlmZ d dlmZ ej                             ej                             e¦  «        ¦  «        Zej                             ed¦  «        gZdadadadadad	„ Z e j        ¦   «         d
„ ¦   «         Z G d„ de¦  «        Zd„ Z d„ Z!d„ Z"d„ Z#d„ Z$d„ Z% G d„ de¦  «        Z& G d„ de¦  «        Z'dS )é    N)ÚPath)Úknobs)Ú	GPUTarget)Ú	GPUDriver)Ú_allocation)Úcompile_module_from_srcÚincludec                 ó:  ‡ ‡‡‡‡— dd l }|                     ¦   «         dk    rd S dd lŠddlm}m}m}mŠmŠm}  G ˆˆfd„d‰j	        ¦  «        }‰ 
                    | ||¦  «         ||¦  «         ||¦  «        ¦  «        }	 ‰                     d¦  «        j        }n# t          $ r Y d S w xY w|‰g|_        ||_        dŠ‰                     ‰dz   ¦  «        }	ˆˆ ˆfd	„}
 | ||
¦  «        |	¦  «        r't#          j        ‰                     |	¦  «        ¦  «        S d S )
Nr   ÚLinux)Úc_charÚc_intÚc_size_tÚc_void_pÚc_char_pÚPOINTERc                   ó    •— e Zd Zd”fd” fgZdS )ú8_find_already_mmapped_dylib_on_linux.<locals>.DlPhdrInfoÚ	dlpi_addrÚ	dlpi_nameN)Ú__name__Ú
__module__Ú__qualname__Ú_fields_)r   r   s   €€úX/var/www/html/CA-Chatbot/venv/lib/python3.11/site-packages/triton/backends/amd/driver.pyÚ
DlPhdrInfor   !   s&   ø€ € € € € à˜(Ð#Ø˜(Ð#ð
ˆˆˆó    r   z	libc.so.6i   é   c           
      óÜ   •— | j         j        }t          t          j        |¦  «        ¦  «        }‰|j        v r4‰                     ||t          ‰t          |¦  «        ¦  «        ¦  «         dS dS )Nr   r   )	Úcontentsr   r   ÚosÚfsdecodeÚnameÚmemmoveÚminÚlen)ÚinfoÚsizeÚdatar   ÚpÚctypesÚlib_nameÚmax_path_lengths        €€€r   Úcallbackz6_find_already_mmapped_dylib_on_linux.<locals>.callback8   sa   ø€ Ø”MÔ+ˆ	Ý•”˜YÑ'Ô'Ñ(Ô(ˆØ�q”vÐÐà�NŠN˜4 ­C°ÅÀYÁÄÑ,PÔ,PÑQÔQÐQØ�1Øˆqr   )ÚplatformÚsystemr*   r   r   r   r   r   r   Ú	StructureÚ	CFUNCTYPEÚCDLLÚdl_iterate_phdrÚ	ExceptionÚargtypesÚrestypeÚcreate_string_bufferr    r!   Ú	string_at)r+   r.   r   r   r   r   r   Ú
callback_tr3   Úpathr-   r   r   r*   r,   s   `          @@@@r   Ú$_find_already_mmapped_dylib_on_linuxr;      s´  øøøøø€ Ø€O€O€OØ‡‚ÑÔ˜GÒ#Ð#Øˆtð
 €M€M€MØKÐKÐKÐKÐKÐKÐKÐKÐKÐKÐKÐKÐKÐKÐKÐKð
ð 
ð 
ð 
ð 
ð 
ð 
ð 
�VÔ%ñ 
ô 
ð 
ð ×!Ò! %¨¨°Ñ)<Ô)<¸g¸gÀhÑ>OÔ>OÐQXÐQXÐY_ÑQ`ÔQ`ÑaÔa€JðØ Ÿ+š+ kÑ2Ô2ÔBˆˆøÝð ð ð Øˆtˆtðøøøð !+¨HÐ5€OÔØ#€OÔà€OØ×&Ò& ¸Ñ':Ñ;Ô;€Dðð ð ð ð ð ð ð €�z�z (Ñ+Ô+¨TÑ2Ô2ð 3ÝŒ{˜6×+Ò+¨DÑ1Ô1Ñ2Ô2Ð2Øˆ4s   ÂB Â
B+Â*B+c                  ó~	  ‡— dŠt           j        j        x} rK|                      ‰¦  «        r!t          j                             | ¦  «        r| S t          d| › d‰› �¦  «        ‚t          ‰¦  «        }|r6t          j                             |¦  «        r|S t          d|› d‰› �¦  «        ‚g }t          j         	                    t          j         
                    t          ¦  «        d‰¦  «        }t          j                             |¦  «        r|S |                     |¦  «         dd l}|                     ¦   «         }|                     ¦   «         }|j        r|g|z   }|D ]\}t          j         	                    |dd‰¦  «        }t          j                             |¦  «        r|c S |                     |¦  «         Œ]t	          j        d	¦  «        }|rp|                     d
¦  «        D ]Z}	t          j         	                    |	‰¦  «        }
t          j                             |
¦  «        r|
c S |                     |
¦  «         Œ[t	          j        d¦  «        }|rWt          j         	                    |d‰¦  «        }t          j                             |¦  «        r|S |                     |¦  «         	 t'          j        ddg¦  «                             ¦   «                              ¦   «         }|rWt          j         	                    |d‰¦  «        }t          j                             |¦  «        r|S |                     |¦  «         n# t&          j        t0          f$ r Y nw xY wt	          j        d¦  «        }|rWt          j         	                    |d‰¦  «        }t          j                             |¦  «        r|S |                     |¦  «         t'          j        ddg¦  «                             d¬¦  «        }ˆfd„|                     ¦   «         D ¦   «         }|D ]:}t          j                             |¦  «        r|c S |                     |¦  «         Œ;t          j         	                    d‰¦  «        }t          j                             |¦  «        r|S |                     |¦  «         t          d‰› d|› �¦  «        ‚)Nzlibamdhip64.sozTRITON_LIBHIP_PATH 'z' does not point to a valid zmemory mapped 'z'' in process does not point to a valid Úlibr   ÚtorchÚLD_LIBRARY_PATHú:ÚHIP_PATHÚ	hipconfigz--pathÚ	ROCM_PATHz/sbin/ldconfigz-pÚignore)Úerrorsc                 ó’   •— g | ]C}|                      ¦   «                              ‰¦  «        ¯)|                     ¦   «         d          ‘ŒDS )éÿÿÿÿ)ÚstripÚendswithÚsplit)Ú.0Úliner+   s     €r   ú
<listcomp>z2_get_path_to_hip_runtime_dylib.<locals>.<listcomp>—   sB   ø€ Ð^Ð^Ð^ ¸d¿jºj¹l¼l×>SÒ>SÐT\Ñ>]Ô>]Ð^ˆD�JŠJ‰LŒL˜ÔÐ^Ð^Ð^r   z/opt/rocm/lib/zcannot locate z after attempted paths )r   ÚamdÚlibhip_pathrI   r    r:   ÚexistsÚRuntimeErrorr;   ÚjoinÚdirnameÚ__file__ÚappendÚsiteÚgetsitepackagesÚgetusersitepackagesÚENABLE_USER_SITEÚgetenvrJ   Ú
subprocessÚcheck_outputÚdecoderH   ÚCalledProcessErrorÚFileNotFoundErrorÚ
splitlines)Úenv_libhip_pathÚmmapped_pathÚpathsÚ	local_librV   Úsite_packagesÚ	user_siter:   Úenv_ld_library_pathÚdÚfÚenv_hip_pathÚhip_lib_pathÚhip_rootÚenv_rocm_pathÚrocm_lib_pathÚlibsÚlocsÚlocÚcommon_install_pathr+   s                       @r   Ú_get_path_to_hip_runtime_dylibrs   F   s˜  ø€ à€Hõ  œ)Ô/Ð/€ð kØ×#Ò# HÑ-Ô-ð 	#µ"´'·.².ÀÑ2QÔ2Qð 	#Ø"Ð"ÝÐi°/ÐiÐiÐ_gÐiÐiÑjÔjÐjõ 8¸ÑAÔA€LØð nÝŒ7�>Š>˜,Ñ'Ô'ð 	 ØÐÝÐl¨\ÐlÐlÐbjÐlÐlÑmÔmÐmà€Eõ ”—’�RœWŸ_š_­XÑ6Ô6¸¸xÑHÔH€IÝ	„w‡~‚~�iÑ Ô ð ØÐØ	‡L‚L�ÑÔÐà€K€K€Kð ×(Ò(Ñ*Ô*€MØ×(Ò(Ñ*Ô*€IØÔð 4Ø"˜ mÑ3ˆØð ð ˆÝŒw�|Š|˜D '¨5°(Ñ;Ô;ˆÝŒ7�>Š>˜$ÑÔð 	ØˆKˆKˆKØ�Š�TÑÔÐÐõ œ)Ð$5Ñ6Ô6ÐØð Ø$×*Ò*¨3Ñ/Ô/ð 	ð 	ˆAÝ”—’˜Q Ñ)Ô)ˆAÝŒw�~Š~˜aÑ Ô ð Ø���Ø�LŠL˜‰OŒOˆOˆOõ ”9˜ZÑ(Ô(€LØð #Ý”w—|’| L°%¸ÑBÔBˆÝŒ7�>Š>˜,Ñ'Ô'ð 	 ØÐØ�Š�\Ñ"Ô"Ð"ð	ÝÔ*¨K¸Ð+BÑCÔC×JÒJÑLÔL×RÒRÑTÔTˆØð 	'Ýœ7Ÿ<š<¨°%¸ÑBÔBˆLÝŒw�~Š~˜lÑ+Ô+ð $Ø#Ð#Ø�LŠL˜Ñ&Ô&Ð&øøÝÔ)Õ+<Ð=ð ð ð àˆðøøøõ
 ”I˜kÑ*Ô*€MØð $ÝœŸš ]°E¸8ÑDÔDˆÝŒ7�>Š>˜-Ñ(Ô(ð 	!Ø Ð Ø�Š�]Ñ#Ô#Ð#õ Ô"Ð$4°dÐ#;Ñ<Ô<×CÒCÈ8ÐCÑTÔT€Dð _Ð^Ð^Ð^¨¯ªÑ):Ô):Ð^Ñ^Ô^€DØð ð ˆÝŒ7�>Š>˜#ÑÔð 	ØˆJˆJˆJØ�Š�SÑÔÐÐõ œ'Ÿ,š,Ð'7¸ÑBÔBÐÝ	„w‡~‚~Ð)Ñ*Ô*ð #Ø"Ð"Ø	‡L‚LÐ$Ñ%Ô%Ð%å
ÐP¨ÐPÐPÈÐPÐPÑ
QÔ
QÐQs   Ê0A=M Ì.M ÍMÍMc                   ó$   ‡ — e Zd Zˆ fd„Zd„ Zˆ xZS )ÚHIPUtilsc                 óŒ   •— t          | d¦  «        s-t          t          | ¦  «                             | ¦  «        | _        | j        S )NÚinstance)ÚhasattrÚsuperru   Ú__new__rw   )ÚclsÚ	__class__s    €r   rz   zHIPUtils.__new__¨   s<   ø€ Ý�s˜JÑ'Ô'ð 	=Ý ¥¨3Ñ/Ô/×7Ò7¸Ñ<Ô<ˆCŒLØŒ|Ðr   c                 óÄ  — t          ¦   «         }t          t          j                             t
          d¦  «        ¦  «                             ¦   «         }|                     d|d¦  «        }t          |dt          ¬¦  «        }|j
        | _
        |j        | _        |j        | _        |j        | _        |j        | _        |j        a|j        a|j        a|j        a|j        ad S )Nzdriver.cz/*py_libhip_search_path*/r   Ú	hip_utils)Úsrcr"   Úinclude_dirs)rs   r   r    r:   rR   rS   Ú	read_textÚreplacer   r€   Úload_binaryÚget_device_propertiesÚcreate_tdm_descriptorÚlaunchÚbuild_signature_metadataÚPyTDMDescriptorÚPyKernelArgÚARG_CONSTEXPRÚ
ARG_KERNELÚ	ARG_TUPLE)ÚselfrO   r   Úmods       r   Ú__init__zHIPUtils.__init__­   sÁ   € Ý4Ñ6Ô6ˆÝ•2”7—<’<¥¨Ñ4Ô4Ñ5Ô5×?Ò?ÑAÔAˆð �kŠkÐ5°{ÀAÑFÔFˆÝ%¨#°KÍlÐ[Ñ[Ô[ˆØœ?ˆÔØ%(Ô%>ˆÔ"Ø%(Ô%>ˆÔ"Ø”jˆŒØ(+Ô(DˆÔ%ð Ô-ˆØ”oˆØÔ)ˆØ”^ˆ
Ø”Mˆ	ˆ	ˆ	r   )r   r   r   rz   r�   Ú__classcell__©r|   s   @r   ru   ru   ¦   sG   ø€ € € € € ðð ð ð ð ð
"ð "ð "ð "ð "ð "ð "r   ru   c                 óp   — |                       d¦  «        rdS | dk    rdS dddddd	d	d
ddddddddœ|          S )NÚ*ÚhipDeviceptr_tÚ
tensordescÚTDMDescriptorÚint8_tÚint16_tÚint32_tÚint64_tÚuint8_tÚuint16_tÚuint32_tÚuint64_tÚdouble)Úi1Úi8Úi16Úi32Úi64Úu1Úu8Úu16Úu32Úu64Úfp16Úbf16Úfp32Úf32Úfp64)Ú
startswith)Útys    r   Ú	ty_to_cppr±   Ç   sr   € Ø	‡}‚}�SÑÔð  ØÐØ	ˆ\ÒÐØˆàØØØØØØØØØØØØØØðð ð  	ô!
ð 
r   c                 ó  — g }d}| D �]€}t          |t          ¦  «        �rR|                     d¦  «        �r<|r||         nd }|dz  }t          j        d|¦  «        }|                     d¦  «        }|                     d¦  «        }|                     d¦  «        dz   }	|€m|                     d|z   ¦  «         t          d|	z  ¦  «        D ]}
|                     d¦  «         Œ|                     d	¦  «         |                     d	¦  «         n|                     d¦  «         t          |	¦  «        D ]}
|                     d
¦  «         Œt          |	¦  «        D ]}
|                     d¦  «         Œ�Œk|                     |¦  «         �Œ‚|S )Nr   r•   r   ztensordesc<([^[>]*)\[([^]]*)\]é   ú,r“   r¤   r    r£   )	Ú
isinstanceÚstrr¯   ÚreÚmatchÚgroupÚcountrU   Úrange)Ú	signatureÚtensordesc_metaÚoutputÚtensordesc_idxÚsigÚmetar¸   ÚdtypeÚshapeÚndimÚ_s              r   Úexpand_signaturerÆ   ß   s�  € Ø€FØ€NØð ñ ˆÝ�c�3ÑÔñ 	 C§N¢N°<Ñ$@Ô$@ñ 	Ø6EÐO�? >Ô2Ð2È4ˆDØ˜aÑˆNå”HÐ?ÀÑEÔEˆEØ—K’K ‘N”NˆEØ—K’K ‘N”NˆEØ—;’;˜sÑ#Ô# aÑ'ˆDð ˆ|Ø—’˜c E™kÑ*Ô*Ð*Ý˜q 4™x™œð )ð )�AØ—M’M %Ñ(Ô(Ð(Ð(Ø—’˜dÑ#Ô#Ð#Ø—’˜dÑ#Ô#Ð#Ð#à—’˜lÑ+Ô+Ð+å˜4‘[”[ð %ð %�Ø—’˜eÑ$Ô$Ð$Ð$Ý˜4‘[”[ð %ð %�Ø—’˜eÑ$Ô$Ð$Ð$ñ%ð �MŠM˜#ÑÔÐÑà€Mr   c                 ó¨   ‡— ˆfd„Šg }| D ]} ‰||¦  «         Œd„ |D ¦   «         }t           j        j        j        j                             |¦  «        S )zj
    Creates a kernel signature in C to be able to efficiently extract
    arguments in the launcher.
    c                 ó‚   •— t          | t          ¦  «        r| D ]} ‰||¦  «         Œd S |                     | ¦  «         d S ©N)rµ   ÚtuplerU   )rÀ   r¾   ÚxÚ_flatten_signatures      €r   rÌ   z1make_kernel_signature.<locals>._flatten_signature  s^   ø€ å�c�5Ñ!Ô!ð 	Øð .ð .�Ø"Ð" 1 fÑ-Ô-Ð-Ð-ð.ð .ð �MŠM˜#ÑÔÐÐÐr   c                 ó   — g | ]
}|d k    ¯|‘ŒS )Ú	constexpr© )rK   rË   s     r   rM   z)make_kernel_signature.<locals>.<listcomp>  s"   € ÐFÐFÐF˜a°Q¸+Ò5EÐ5E˜Ð5EÐ5EÐ5Er   )ÚtritonÚruntimeÚdriverÚactiveÚutilsr‡   )r¼   Úflat_signaturerÀ   Úkernel_signaturerÌ   s       @r   Úmake_kernel_signaturer×      s|   ø€ ðð ð ð ð ð €NØð 0ð 0ˆØÐ˜3 Ñ/Ô/Ð/Ð/ØFÐF >ÐFÑFÔFÐåŒ>Ô Ô'Ô-×FÒFÐGWÑXÔXÐXr   c                 ó^  — g }| D ]§}t          |t          ¦  «        r7|                     t          t	          |¦  «        t
          ¬¦  «        ¦  «         ŒN|dk    r*|                     t          dt          ¬¦  «        ¦  «         Œ~|                     t          dt          ¬¦  «        ¦  «         Œ¨|S )z¤
    This recreates the signature with annotations as C objects which can then
    be used to efficiently flatten tuples, and remove constexpr in the launcher.
    )Únested_tupleÚtyperÎ   N)rµ   rÊ   rU   r‰   Úannotate_argumentsrŒ   r‹   rŠ   )r¼   Úannotated_argumentsrÀ   s      r   rÛ   rÛ     s¶   € ð
 ÐØð [ð [ˆÝ�c�5Ñ!Ô!ð 	[Ø×&Ò&­ÕASÐTWÑAXÔAXÕ_hÐ(iÑ(iÔ(iÑkÔkÐkÐkØ�KÒÐØ×&Ò&¥{ÀÍ:Ð'VÑ'VÔ'VÑWÔWÐWÐWà×&Ò&¥{ÀÍ=Ð'YÑ'YÔ'YÑZÔZÐZÐZØÐr   c           
      óZ  — |€6| j         g| j        ¢| j        ¢| j        dk    ‘| j        ‘| j        ¢| j        ¢S | j        }| j        }| j                              ¦   «         }d|v rd|v sJ ‚|d         }|d         }d\  }}	|                     dg ¦  «        }
|
r9t          |
¦  «        dk    rt          |
d         ¦  «        d	k    sJ ‚|
d         \  }}	|d         }t          j	        j
        j        }t          |t          ¦  «        sJ ‚|j                             |||||	|||¦  «        }|g|¢|¢S )
a�  
    Translate a tensor descriptor argument into the appropriate list of kernel
    arguments. If `tensordesc_metadata` is provided, we will create a
    TDMDescriptor object. Otherwise, we decompose the tensor descriptor into
    base pointer, shape, strides, and padding flag. In both cases, we append the
    shape and strides at the end to match the expected kernel signature.
    NÚnanÚ	elem_bitsÚ
block_size)r   r   Úinterval_padding_pairsr   r   r³   )ÚbaserÃ   ÚstridesÚpaddingÚround_f32_to_tf32Údata_ptrÚgetr%   rÐ   rÑ   rÒ   rÓ   rµ   Ú	HIPDriverrÔ   r…   )ÚargÚkernel_metadataÚtensordesc_metadatarÃ   rã   râ   rß   rà   Úpad_intervalÚ
pad_amountrá   Ú	num_warpsrÒ   Údescs                 r   Úmake_tensordesc_argrð   &  s“  € ð Ð"ð ŒHð
àŒYð
ð Œ[ð
ð ŒK˜5Ò ð	
ð
 Ô!ð
ð ŒYð
ð Œ[ð
ð 	
ð ŒI€EØŒk€GØŒ8×ÒÑÔ€DàÐ-Ð-Ð-°,ÐBUÐ2UÐ2UÐ2UÐUØ# KÔ0€IØ$ \Ô2€JØ#Ñ€L�*Ø0×4Ò4Ð5MÈrÑRÔRÐØð =ÝÐ)Ñ*Ô*¨aÒ/Ð/µCÐ8NÈqÔ8QÑ4RÔ4RÐVWÒ4WÐ4WÐ4WÐWØ#9¸!Ô#<Ñ ˆ�jØ Ô"€IåŒ^Ô"Ô)€FÝ�f�iÑ(Ô(Ð(Ð(Ð(àŒ<×-Ò-¨i¸ÀYÐP\Ð^hÐjoØ.5°tñ=ô =€Dð Ð#�5Ð#˜7Ð#Ð#r   c                 óZ  ‡ ‡‡— t          d„ |                     ¦   «         D ¦   «         ¦  «        }|s‰ S t          d„ t          |                     ¦   «         ¦  «        D ¦   «         ¦  «        Š‰r"t	          ‰¦  «        t	          ‰¦  «        k    sJ ‚‰sdgt	          ‰¦  «        z  Šˆ ˆˆfd„}|S )a»  
    Wrap a kernel launcher function to handle tensor descriptor arguments.
    Use the provided `tensordesc_metadata` to determine whether to create
    TDMDescriptor objects or decompose the tensor descriptors.

    Args:
        launcher (callable): The original kernel launcher function.
        signature (Dict[int, str]): The kernel signature mapping argument indices to types.
        tensordesc_metadata (List[Dict] or None): The list of tensor descriptor metadata, following the order
                                                  of tensor descriptor arguments. If None, decompose tensor descriptors.
    Returns:
        launcher (callable): The wrapped kernel launcher function.
    c              3   ój   K  — | ].}t          |t          ¦  «        o|                     d ¦  «        V — Œ/dS )r•   N©rµ   r¶   r¯   )rK   rÀ   s     r   ú	<genexpr>z)wrap_handle_tensordesc.<locals>.<genexpr>f  s>   è è € ÐrÐrÐX[�j¨­cÑ2Ô2ÐS°s·~²~ÀlÑ7SÔ7SÐrÐrÐrÐrÐrÐrr   c                 ól   — g | ]1\  }}t          |t          ¦  «        ¯|                     d ¦  «        ¯/|‘Œ2S )r•   ró   )rK   ÚirÀ   s      r   rM   z*wrap_handle_tensordesc.<locals>.<listcomp>k  s@   € ÐpÐpÐp‰vˆq�#½*ÀSÍ#Ñ:NÔ:NÐpÐSV×SaÒSaÐbnÑSoÔSoÐpˆÐpÐpÐpr   Nc            	      ó  •— | d d…         }|d         }| d         }g }d}t          |¦  «        D ]N\  }}|‰	v r0|                     t          ||‰
|         ¦  «        ¦  «         |dz  }Œ9|                     |¦  «         ŒO ‰g |¢|‘R Ž S )NrG   é   r   r   )Ú	enumerateÚextendrð   rU   )ÚargsÚ	base_argsrê   Úkernel_argsÚfinal_kernel_argsr¿   rö   ré   ÚlauncherÚtensordesc_indicesrë   s           €€€r   Úinnerz%wrap_handle_tensordesc.<locals>.innerp  s»   ø€ Ø˜˜"˜”Iˆ	Ø# Aœ,ˆØ˜2”hˆàÐØˆÝ Ñ,Ô,ð 	.ð 	.‰FˆAˆsØÐ&Ð&Ð&Ø!×(Ò(Õ)<¸SÀ/ÐSfÐguÔSvÑ)wÔ)wÑxÔxÐxØ !Ñ#��à!×(Ò(¨Ñ-Ô-Ð-Ð-àˆxÐ6˜Ð6Ð$5Ð6Ð6Ð6Ð6r   )ÚanyÚvaluesÚsetrù   r%   )rÿ   r¼   rë   Úhas_tensor_desc_argr  r   s   ` `  @r   Úwrap_handle_tensordescr  W  så   øøø€ õ ÐrÐrÐ_h×_oÒ_oÑ_qÔ_qÐrÑrÔrÑrÔrÐØð ØˆåØpÐp� 9×#3Ò#3Ñ#5Ô#5Ñ6Ô6ÐpÑpÔpñrô rÐà"ÐY¥cÐ*=Ñ&>Ô&>Å#ÐFXÑBYÔBYÒ&YÐ&YÐ&YÐYØð ?Ø#˜f¥sÐ+=Ñ'>Ô'>Ñ>Ðð7ð 7ð 7ð 7ð 7ð 7ð 7ð  €Lr   c                   ó   — e Zd Zd„ Zd„ ZdS )ÚHIPLauncherc                 óN  ‡‡— t          ‰d¦  «        r‰j        nt          ¦   «         }ˆfd„Šˆfd„|                     ¦   «         D ¦   «         }d„ ‰j                             ¦   «         D ¦   «         }t          |dd ¦  «        }t          j        j        j	        j
        j        }t          |                     ¦   «         |¦  «        }t          |¦  «        | _        t!          |¦  «        | _        t%          |||¦  «        | _        |j        | _        |j        | _        | j        rmt          j        j        j	        }t+          |t,          ¦  «        sJ ‚|                     ¦   «         }	|j
                             |	¦  «        }
|
d         s
J d¦   «         ‚|j        | _        |j        | _        d S )NÚ	constantsc                 ór   •— t          | t          ¦  «        r ‰j        j                             | ¦  «        fn| S rÉ   )rµ   r¶   ÚfnÚ	arg_namesÚindex)rË   r   s    €r   ú<lambda>z&HIPLauncher.__init__.<locals>.<lambda>‡  s2   ø€ ½ZÈÍ3Ñ=OÔ=OÐV˜SœVÔ-×3Ò3°AÑ6Ô6Ð9Ð9ÐUV€ r   c                 ó.   •— i | ]\  }} ‰|¦  «        |“ŒS rÏ   rÏ   )rK   ÚidxÚvalueÚarg_idxs      €r   ú
<dictcomp>z(HIPLauncher.__init__.<locals>.<dictcomp>ˆ  s'   ø€ ÐMÐMÐM©Z¨S°%�W�W˜S‘\”\ 5ÐMÐMÐMr   c                 ó   — i | ]\  }}||“Œ	S rÏ   rÏ   )rK   r  r  s      r   r  z(HIPLauncher.__init__.<locals>.<dictcomp>‰  s   € ÐHÐHÐH¡J C¨�S˜%ÐHÐHÐHr   r½   ÚcooperativeLaunchz8Cooperative launch requested but not supported by device)rx   r
  ÚdictÚitemsr¼   ÚgetattrrÐ   rÑ   rÒ   rÓ   rÔ   r†   rÆ   r  rÛ   Úarg_annotationsr×   rÖ   r  Úlaunch_cooperative_gridÚ	warp_sizerµ   rè   Úget_current_devicer„   Úprofile_scratch_sizeÚprofile_scratch_align)r�   r   Úmetadatar
  r¼   r½   rÿ   Úexpanded_signaturerÒ   ÚdeviceÚdevice_propertiesr  s    `         @r   r�   zHIPLauncher.__init__…  s˜  øø€ Ý%,¨S°+Ñ%>Ô%>ÐJ�C”M�MÅDÁFÄFˆ	ØVÐVÐVÐVˆØMÐMÐMÐM¸9¿?º?Ñ;LÔ;LÐMÑMÔMˆ	ØHÐH°#´-×2EÒ2EÑ2GÔ2GÐHÑHÔHˆ	Ý! (Ð,=¸tÑDÔDˆÝ”>Ô(Ô/Ô5Ô<ˆÝ-¨i×.>Ò.>Ñ.@Ô.@À/ÑRÔRÐÝ1Ð2DÑEÔEˆÔÝ 5Ð6HÑ IÔ IˆÔÝ,¨X°yÀ/ÑRÔRˆŒØ'/Ô'GˆÔ$Ø!Ô+ˆŒàÔ'ð 	KÝ”^Ô*Ô1ˆFÝ˜f¥iÑ0Ô0Ð0Ð0Ð0Ø×.Ò.Ñ0Ô0ˆFØ &¤× BÒ BÀ6Ñ JÔ JÐØ$Ð%8Ô9ð Kð KØJñKô KÐ9à$,Ô$AˆÔ!Ø%-Ô%CˆÔ"Ð"Ð"r   c
                 óÎ   ‡‡‡‡— ˆˆˆˆfd„} || j         | j        t          j        ¦  «        }|                      | j        ‰‰‰‰||||||	| j        | j        | j        |
¦  «         d S )Nc                 óp   •— | dk    r.‰‰z  ‰z  }|| z  }|                      ¦   «         } |||‰	¦  «        S d S ©Nr   )rç   )
r'   ÚalignÚ	allocatorÚ	grid_sizeÚ
alloc_sizeÚalloc_fnÚgridXÚgridYÚgridZÚstreams
         €€€€r   Úallocate_scratchz.HIPLauncher.__call__.<locals>.allocate_scratch   sJ   ø€ Ø�aŠxˆxØ! E™M¨EÑ1�	Ø&¨Ñ-�
Ø$Ÿ=š=™?œ?�Ø�x 
¨E°6Ñ:Ô:Ð:Ø�4r   )	r  r  r   Ú_profile_allocatorr†   r  r  r  rÖ   )r�   r,  r-  r.  r/  Úfunctionrê   Úlaunch_metadataÚlaunch_enter_hookÚlaunch_exit_hookrû   r0  Úprofile_scratchs    ````        r   Ú__call__zHIPLauncher.__call__�  s«   øøøø€ ð	ð 	ð 	ð 	ð 	ð 	ð 	ð 	ð +Ð*¨4Ô+DÀdÔF`Ý+6Ô+IñKô Kˆð 	�Š�DÔ0°%¸ÀÀvÈxÐYhØ# _Ð6GÐIYÐ[_Ô[iØÔ(¨$Ô*?Àñ	Gô 	Gð 	Gð 	Gð 	Gr   N)r   r   r   r�   r7  rÏ   r   r   r  r  ƒ  s:   € € € € € ðDð Dð Dð0Gð Gð Gð Gð Gr   r  c                   óh   ‡ — e Zd Zˆ fd„Zd„ Zed„ ¦   «         Zdedefd„Zd„ Z	d„ Z
d	„ Zd
„ Zd„ Zˆ xZS )rè   c                 ó†   •— t          ¦   «                              ¦   «          t          ¦   «         | _        t          | _        d S rÉ   )ry   r�   ru   rÔ   r  Úlauncher_cls)r�   r|   s    €r   r�   zHIPDriver.__init__²  s2   ø€ Ý‰Œ×ÒÑÔÐÝ‘Z”ZˆŒ
Ý'ˆÔÐÐr   c                 ó   — dd l }|j        S r&  )r>   Úcuda©r�   r>   s     r   Úget_device_interfacezHIPDriver.get_device_interface·  s   € ØˆˆˆØŒzÐr   c                  ó|   — 	 dd l } | j                             ¦   «         o| j        j        d uS # t
          $ r Y dS w xY w)Nr   F)r>   r<  Úis_availableÚversionÚhipÚImportError)r>   s    r   Ú	is_activezHIPDriver.is_active»  sU   € ð	ØˆLˆLˆLØ”:×*Ò*Ñ,Ô,ÐP°%´-Ô2CÈ4Ð2OÐPøÝð 	ð 	ð 	Ø�5�5ð	øøøs   ‚*- ­
;º;r°   Úreturnc                 ó    — t          |¦  «        S rÉ   )r±   )r�   r°   s     r   Úmap_python_to_cpp_typez HIPDriver.map_python_to_cpp_typeÃ  s   € Ý˜‰}Œ}Ðr   c                 óô   — |                       ¦   «         }| j                             |¦  «        }t          j        j        p|d         }|d         }t          d|                     d¦  «        d         |¦  «        S )NÚarchÚwarpSizerB  r@   r   )r  rÔ   r„   r   rÑ   Úoverride_archr   rJ   )r�   r"  r#  rI  r  s        r   Úget_current_targetzHIPDriver.get_current_targetÆ  si   € Ø×(Ò(Ñ*Ô*ˆØ œJ×<Ò<¸VÑDÔDÐÝŒ}Ô*ÐGÐ.?ÀÔ.GˆØ% jÔ1ˆ	Ý˜ §
¢
¨3¡¤°Ô 2°IÑ>Ô>Ð>r   c                 óZ   — dd l }|                     d|                      ¦   «         ¦  «        S )Nr   r<  )r>   r"  r  r=  s     r   Úget_active_torch_devicez!HIPDriver.get_active_torch_deviceÍ  s+   € Øˆˆˆà�|Š|˜F D×$;Ò$;Ñ$=Ô$=Ñ>Ô>Ð>r   c                 ó   — ddl m} |S )Nr   )Údo_bench)Útriton.testingrP  )r�   rP  s     r   Úget_benchmarkerzHIPDriver.get_benchmarkerÒ  s   € Ø+Ð+Ð+Ð+Ð+Ð+Øˆr   c                 óh   — dd l }d}|                     t          |dz  ¦  «        |j        d¬¦  «        S )Nr   i   é   r<  )rÂ   r"  )r>   ÚemptyÚint)r�   r>   Ú
cache_sizes      r   Úget_empty_cache_for_benchmarkz'HIPDriver.get_empty_cache_for_benchmarkÖ  s8   € Øˆˆˆð 'ˆ
Ø�{Š{�3˜z¨Q™Ñ/Ô/°u´yÈˆ{ÑPÔPÐPr   c                 ó.   — |                      ¦   «          d S rÉ   )Úzero_)r�   Úcaches     r   Úclear_cachezHIPDriver.clear_cacheÝ  s   € Ø�Š‰Œˆˆˆr   )r   r   r   r�   r>  ÚstaticmethodrD  r¶   rG  rL  rN  rR  rX  r\  r�   r‘   s   @r   rè   rè   °  sÒ   ø€ € € € € ð(ð (ð (ð (ð (ð
ð ð ð ðð ñ „\ðð¨ð °ð ð ð ð ð?ð ?ð ?ð?ð ?ð ?ð
ð ð ðQð Qð Qðð ð ð ð ð ð r   rè   )(Ú	functoolsr    r[   r·   rÐ   Úpathlibr   r   Útriton.backends.compilerr   Útriton.backends.driverr   Útriton.runtimer   Útriton.runtime.buildr   r:   rS   ÚrealpathrT   rR   r€   rˆ   r‰   rŠ   r‹   rŒ   r;   Ú	lru_cachers   Úobjectru   r±   rÆ   r×   rÛ   rð   r  r  rè   rÏ   r   r   ú<module>rg     s(  ðØ Ð Ð Ð Ø 	€	€	€	Ø Ð Ð Ð Ø 	€	€	€	Ø €€€Ø Ð Ð Ð Ð Ð Ø Ð Ð Ð Ð Ð Ø .Ð .Ð .Ð .Ð .Ð .Ø ,Ð ,Ð ,Ð ,Ð ,Ð ,Ø &Ð &Ð &Ð &Ð &Ð &Ø 8Ð 8Ð 8Ð 8Ð 8Ð 8à
Œ'�/Š/˜"œ'×*Ò*¨8Ñ4Ô4Ñ
5Ô
5€Ø”—’˜W iÑ0Ô0Ð1€Ø€Ø€Ø€Ø€
Ø€	ð-ð -ð -ð` €ÔÑÔð\Rð \Rñ Ôð\Rð~"ð "ð "ð "ð "ˆvñ "ô "ð "ðB
ð 
ð 
ð0ð ð ðBYð Yð Yð,ð ð ð .$ð .$ð .$ðb)ð )ð )ðX*Gð *Gð *Gð *Gð *G�&ñ *Gô *Gð *GðZ.ð .ð .ð .ð .�	ñ .ô .ð .ð .ð .r   