Ë
    0²jø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                   j#                  ej                   j%                  e«      «      Zej                   j)                  ed«      gZdadadadadad	„ Z e j8                  «       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'y)é    N)ÚPath)Úknobs)Ú	GPUTarget)Ú	GPUDriver)Ú_allocation)Úcompile_module_from_srcÚincludec                 óø  ‡ ‡‡‡‡— dd l }|j                  «       dk7  ry dd lŠddlm}m}m}mŠmŠm}  G ˆˆfd„d‰j                  «      }‰j                  | ||«       ||«       ||«      «      }	 ‰j                  d«      j                  }|‰g|_        ||_        dŠ‰j!                  ‰dz   «      }	ˆˆ ˆfd	„}
 | ||
«      |	«      r$t#        j$                  ‰j'                  |	«      «      S y # t        $ r Y y w xY w)
Nr   ÚLinux)Úc_charÚc_intÚc_size_tÚc_void_pÚc_char_pÚPOINTERc                   ó"   •— e Zd ZdW °fdW ° fgZy)ú8_find_already_mmapped_dylib_on_linux.<locals>.DlPhdrInfoÚ	dlpi_addrÚ	dlpi_nameN)Ú__name__Ú
__module__Ú__qualname__Ú_fields_)r   r   s   €€úY/var/www/html/ia-enhanced/venv/lib/python3.12/site-packages/triton/backends/amd/driver.pyÚ
DlPhdrInfor   !   s   ø„ à™(Ð#Ø™(Ð#ð
‰ó    r   z	libc.so.6i   é   c           
      óØ   •— | j                   j                  }t        t        j                  |«      «      }‰|j
                  v r'‰j                  ||t        ‰t        |«      «      «       yy)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   sR   ø€ Ø—M‘M×+Ñ+ˆ	Ü”—‘˜YÓ'Ó(ˆØ�q—v‘vÑà�N‰N˜4 ¬C°ÄÀYÃÓ,PÔQØØr   )Ú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ï   ü€ ÛØ‡�Ó˜GÒ#Øó
 ßK×K÷
�V×%Ñ%ô 
ð ×!Ñ! %©°Ó)<¹gÀhÓ>OÑQXÐY_ÓQ`Óa€JðØ Ÿ+™+ kÓ2×BÑBˆð !+¨HÐ5€OÔØ#€OÔà€OØ×&Ñ& ¸Ñ':Ó;€Döñ ‘z (Ó+¨TÔ2Ü�{‰{˜6×+Ñ+¨DÓ1Ó2Ð2Øøô+ ò Ùðús   Á1C- Ã-	C9Ã8C9c                  ó€	  — d} t         j                  j                  x}rC|j                  | «      r!t        j
                  j                  |«      r|S t        d|› d| › �«      ‚t        | «      }|r2t        j
                  j                  |«      r|S t        d|› d| › �«      ‚g }t        j
                  j                  t        j
                  j                  t        «      d| «      }t        j
                  j                  |«      r|S |j                  |«       dd l}|j                  «       }|j                  «       }|j                   r|g|z   }|D ]X  }t        j
                  j                  |dd| «      }t        j
                  j                  |«      r|c S |j                  |«       ŒZ t	        j"                  d	«      }	|	rj|	j%                  d
«      D ]V  }
t        j
                  j                  |
| «      }t        j
                  j                  |«      r|c S |j                  |«       ŒX t	        j"                  d«      }|rSt        j
                  j                  |d| «      }t        j
                  j                  |«      r|S |j                  |«       	 t'        j(                  ddg«      j+                  «       j-                  «       }|rSt        j
                  j                  |d| «      }t        j
                  j                  |«      r|S |j                  |«       t	        j"                  d«      }|rSt        j
                  j                  |d| «      }t        j
                  j                  |«      r|S |j                  |«       t'        j(                  ddg«      j+                  d¬«      }|j3                  «       D �cg c]5  }|j-                  «       j                  | «      sŒ#|j%                  «       d   ‘Œ7 }}|D ]6  }t        j
                  j                  |«      r|c S |j                  |«       Œ8 t        j
                  j                  d| «      }t        j
                  j                  |«      r|S |j                  |«       t        d| › d|› �«      ‚# t&        j.                  t0        f$ r Y �Œ™w xY wc c}w )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)Úerrorséÿÿÿÿz/opt/rocm/lib/zcannot locate z after attempted paths )r   ÚamdÚlibhip_pathÚendswithr    r:   ÚexistsÚRuntimeErrorr;   ÚjoinÚdirnameÚ__file__ÚappendÚsiteÚgetsitepackagesÚgetusersitepackagesÚENABLE_USER_SITEÚgetenvÚsplitÚ
subprocessÚcheck_outputÚdecodeÚstripÚCalledProcessErrorÚFileNotFoundErrorÚ
splitlines)r+   Úenv_libhip_pathÚmmapped_pathÚpathsÚ	local_librP   Ú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ÚlineÚlocsÚlocÚcommon_install_paths                         r   Ú_get_path_to_hip_runtime_dylibrp   F   sÓ  € à€Hô  Ÿ)™)×/Ñ/Ð/€Ð/Ø×#Ñ# HÔ-´"·'±'·.±.ÀÔ2QØ"Ð"ÜÐ1°/Ð1BÐB^Ð_gÐ^hÐiÓjÐjô 8¸ÓA€LÙÜ�7‰7�>‰>˜,Ô'ØÐÜ˜_¨\¨NÐ:aÐbjÐakÐlÓmÐmà€Eô —‘—‘œRŸW™WŸ_™_¬XÓ6¸¸xÓH€IÜ	‡w�w‡~�~�iÔ ØÐØ	‡L�L�Ôãð ×(Ñ(Ó*€MØ×(Ñ(Ó*€IØ×ÒØ"˜ mÑ3ˆØò ˆÜ�w‰w�|‰|˜D '¨5°(Ó;ˆÜ�7‰7�>‰>˜$ÔØŠKØ�‰�TÕð	ô Ÿ)™)Ð$5Ó6ÐÙØ$×*Ñ*¨3Ó/ò 	ˆAÜ—‘—‘˜Q Ó)ˆAÜ�w‰w�~‰~˜aÔ Ø’Ø�L‰L˜�Oð		ô —9‘9˜ZÓ(€LÙÜ—w‘w—|‘| L°%¸ÓBˆÜ�7‰7�>‰>˜,Ô'ØÐØ�‰�\Ô"ð	Ü×*Ñ*¨K¸Ð+BÓC×JÑJÓL×RÑRÓTˆÙÜŸ7™7Ÿ<™<¨°%¸ÓBˆLÜ�w‰w�~‰~˜lÔ+Ø#Ð#Ø�L‰L˜Ô&ô —I‘I˜kÓ*€MÙÜŸ™Ÿ™ ]°E¸8ÓDˆÜ�7‰7�>‰>˜-Ô(Ø Ð Ø�‰�]Ô#ô ×"Ñ"Ð$4°dÐ#;Ó<×CÑCÈ8ÐCÓT€Dð *.¯©Ó):Ö^ ¸d¿j¹j»l×>SÑ>SÐT\Õ>]ˆD�J‰J‹L˜ÓÐ^€DÐ^Øò ˆÜ�7‰7�>‰>˜#ÔØŠJØ�‰�SÕðô Ÿ'™'Ÿ,™,Ð'7¸ÓBÐÜ	‡w�w‡~�~Ð)Ô*Ø"Ð"Ø	‡L�LÐ$Ô%ä
˜¨ zÐ1HÈÈÐPÓ
QÐQøô; ×)Ñ)Ô+<Ð=ò âðüò" _s%   ÊA6R ÌR Ï$R;Ï&R;ÒR8Ò7R8c                   ó$   ‡ — e Zd Zˆ fd„Zd„ Zˆ xZS )ÚHIPUtilsc                 ód   •— t        | d«      st        t        | �  | «      | _        | j                  S )NÚinstance)ÚhasattrÚsuperrr   Ú__new__rt   )ÚclsÚ	__class__s    €r   rw   zHIPUtils.__new__¨   s*   ø€ Ü�s˜JÔ'Ü ¤¨3Ñ7¸Ó<ˆCŒLØ�|‰|Ðr   c                 óú  — t        «       }t        t        j                  j	                  t
        d«      «      j                  «       }|j                  d|d«      }t        |dt        ¬«      }|j                  | _
        |j                  | _        |j                  | _        |j                  | _        |j                  | _        |j                  a|j                   a|j"                  a|j$                  a|j&                  ay )Nzdriver.cz/*py_libhip_search_path*/r   Ú	hip_utils)Úsrcr"   Úinclude_dirs)rp   r   r    r:   rL   rM   Ú	read_textÚreplacer   r}   Úload_binaryÚget_device_propertiesÚcreate_tdm_descriptorÚlaunchÚbuild_signature_metadataÚPyTDMDescriptorÚPyKernelArgÚARG_CONSTEXPRÚ
ARG_KERNELÚ	ARG_TUPLE)ÚselfrH   r|   Úmods       r   Ú__init__zHIPUtils.__init__­   sÃ   € Ü4Ó6ˆÜ”2—7‘7—<‘<¤¨Ó4Ó5×?Ñ?ÓAˆð �k‰kÐ5°{ÀAÓFˆÜ%¨#°KÌlÔ[ˆØŸ?™?ˆÔØ%(×%>Ñ%>ˆÔ"Ø%(×%>Ñ%>ˆÔ"Ø—j‘jˆŒØ(+×(DÑ(DˆÔ%ð ×-Ñ-ˆØ—o‘oˆØ×)Ñ)ˆØ—^‘^ˆ
Ø—M‘M‰	r   )r   r   r   rw   rŒ   Ú__classcell__©ry   s   @r   rr   rr   ¦   s   ø„ ôö
"r   rr   c                 ó\   — | j                  d«      ry| dk(  ry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®   Ç   s]   € Ø	‡}�}�SÔØØ	ˆ\ÒØàØØØØØØØØØØØØØØñð  	ñ!
ð 
r   c                 ó   — g }d}| D �]C  }t        |t        «      �r|j                  d«      �r|r||   nd }|dz  }t        j                  d|«      }|j                  d«      }|j                  d«      }|j                  d«      dz   }	|€[|j                  d|z   «       t        d|	z  «      D ]  }
|j                  d«       Œ |j                  d	«       |j                  d	«       n|j                  d«       t        |	«      D ]  }
|j                  d
«       Œ t        |	«      D ]  }
|j                  d«       Œ �Œ3|j                  |«       �ŒF |S )Nr   r’   r   ztensordesc<([^[>]*)\[([^]]*)\]é   ú,r�   r¡   r�   r    )	Ú
isinstanceÚstrr¬   ÚreÚmatchÚgroupÚcountrO   Úrange)Ú	signatureÚtensordesc_metaÚoutputÚtensordesc_idxÚsigÚmetarµ   ÚdtypeÚshapeÚndimÚ_s              r   Úexpand_signaturerÃ   ß   s7  € Ø€FØ€NØó ˆÜ�cœ3Õ C§N¡N°<Õ$@Ù6E�? >Ò2È4ˆDØ˜aÑˆNä—H‘HÐ?ÀÓEˆEØ—K‘K “NˆEØ—K‘K “NˆEØ—;‘;˜sÓ# aÑ'ˆDð ˆ|Ø—‘˜c E™kÔ*Ü˜q 4™x›ò )�AØ—M‘M %Õ(ð)à—‘˜dÔ#Ø—‘˜dÕ#à—‘˜lÔ+ä˜4“[ò %�Ø—‘˜eÕ$ð%ä˜4“[ò %�Ø—‘˜eÕ$ò%ð �M‰M˜#Öð3ð6 €Mr   c                 óà   ‡— ˆfd„Šg }| D ]  } ‰||«       Œ |D �cg c]
  }|dk7  sŒ	|‘Œ }}t         j                  j                  j                  j                  j                  |«      S c c}w )zj
    Creates a kernel signature in C to be able to efficiently extract
    arguments in the launcher.
    c                 ój   •— t        | t        «      r| D ]  } ‰||«       Œ y |j                  | «       y ©N)r²   ÚtuplerO   )r½   r»   ÚxÚ_flatten_signatures      €r   rÉ   z1make_kernel_signature.<locals>._flatten_signature  s4   ø€ ä�cœ5Ô!Øò .�Ù" 1 fÕ-ñ.ð �M‰M˜#Õr   Ú	constexpr)ÚtritonÚruntimeÚdriverÚactiveÚutilsr„   )r¹   Úflat_signaturer½   rÈ   Úkernel_signaturerÉ   s        @r   Úmake_kernel_signaturerÒ      sq   ø€ ôð €NØò 0ˆÙ˜3 Õ/ð0à#1ÖF˜a°Q¸+Ó5EšÐFÐÐFä�>‰>× Ñ ×'Ñ'×-Ñ-×FÑFÐGWÓXÐXùò Gs
   �
A+¨A+c                 ó  — g }| D ]‚  }t        |t        «      r*|j                  t        t	        |«      t
        ¬«      «       Œ=|dk7  r!|j                  t        dt        ¬«      «       Œc|j                  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Ç   rO   r†   Úannotate_argumentsr‰   rˆ   r‡   )r¹   Úannotated_argumentsr½   s      r   rÖ   rÖ     s|   € ð
 ÐØò [ˆÜ�cœ5Ô!Ø×&Ñ&¬ÔASÐTWÓAXÔ_hÔ(iÕkØ�KÒØ×&Ñ&¤{ÀÌ:Ô'VÕWà×&Ñ&¤{ÀÌ=Ô'YÕZð[ð Ðr   c           
      óŽ  — |€X| j                   g| j                  ¢| j                  ¢| j                  dk(  ‘| j                  ‘| j                  ¢| j                  ¢S | j                  }| j                  }| j                   j                  «       }d|v rd|v sJ ‚|d   }|d   }d\  }}	|j                  dg «      }
|
r)t        |
«      dk(  rt        |
d   «      dk(  sJ ‚|
d   \  }}	|d   }t        j                  j                  j                  }t        |t        «      sJ ‚|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.
    Ú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‰Hð
à�Y‰Yð
ð �[‰[ð
ð �K‰K˜5Ñ ð	
ð
 ×!Ñ!ð
ð �Y‰Yð
ð �[‰[ð
ð 	
ð �I‰I€EØ�k‰k€GØ�8‰8×ÑÓ€DàÐ-Ñ-°,ÐBUÑ2UÐUÐUØ# KÑ0€IØ$ \Ñ2€JØ#Ñ€L�*Ø0×4Ñ4Ð5MÈrÓRÐÙÜÐ)Ó*¨aÒ/´CÐ8NÈqÑ8QÓ4RÐVWÒ4WÐWÐWØ#9¸!Ñ#<Ñ ˆ�jØ Ñ"€Iä�^‰^×"Ñ"×)Ñ)€FÜ�fœiÔ(Ð(Ð(à�<‰<×-Ñ-¨i¸ÀYÐP\Ð^hÐjoØ.5°tó=€Dð Ð#�5Ð#˜7Ð#Ð#r   c           
      óv  ‡ ‡‡— t        d„ |j                  «       D «       «      }|s‰ S t        t        |j                  «       «      D ��cg c]*  \  }}t	        |t
        «      sŒ|j                  d«      sŒ)|‘Œ, c}}«      Š‰rt        ‰«      t        ‰«      k(  sJ ‚‰sdgt        ‰«      z  Šˆ ˆˆfd„}|S c c}}w )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   ób   K  — | ]'  }t        |t        «      xr |j                  d «      –— Œ) y­w)r’   N)r²   r³   r¬   )Ú.0r½   s     r   ú	<genexpr>z)wrap_handle_tensordesc.<locals>.<genexpr>f  s)   è ø€ ÒrÐX[œj¨¬cÓ2ÒS°s·~±~ÀlÓ7SÓSÑrùs   ‚-/r’   Nc            	      óØ   •— | d d }|d   }| d   }g }d}t        |«      D ]?  \  }}|‰	v r%|j                  t        ||‰
|   «      «       |dz  }Œ/|j                  |«       ŒA  ‰g |¢|‘­Ž S )NrF   é   r   r   )Ú	enumerateÚextendrë   rO   )ÚargsÚ	base_argsrå   Úkernel_argsÚfinal_kernel_argsr¼   Úirä   ÚlauncherÚtensordesc_indicesræ   s           €€€r   Úinnerz%wrap_handle_tensordesc.<locals>.innerp  s™   ø€ Ø˜˜"�Iˆ	Ø# A™,ˆØ˜2‘hˆàÐØˆÜ Ó,ò 	.‰FˆAˆsØÐ&Ñ&Ø!×(Ñ(Ô)<¸SÀ/ÐSfÐguÑSvÓ)wÔxØ !Ñ#‘à!×(Ñ(¨Õ-ð	.ñ Ð6˜Ð6Ð$5Ò6Ð6r   )ÚanyÚvaluesÚsetrò   r²   r³   r¬   r%   )rù   r¹   ræ   Úhas_tensor_desc_argrø   r½   rû   rú   s   ` `    @r   Úwrap_handle_tensordescr   W  s°   ú€ ô ÑrÐ_h×_oÑ_oÓ_qÔrÓrÐÙØˆäÜ" 9×#3Ñ#3Ó#5Ó6×p‰vˆq�#¼*ÀSÌ#Õ:NÐSV×SaÑSaÐbnÕSoŠÓpórÐá"¤cÐ*=Ó&>Ä#ÐFXÓBYÒ&YÐYÐYÙØ#˜f¤sÐ+=Ó'>Ñ>Ðö7ð  €Lùó+ 	qs   Á	B5
Á"B5
Á4B5
c                   ó   — e Zd Zd„ Zd„ Zy)ÚHIPLauncherc                 ó´  ‡— t        ‰d«      r‰j                  n	t        «       }ˆfd„}|j                  «       D ��ci c]  \  }} ||«      |“Œ }}}‰j                  j                  «       D ��ci c]  \  }}||“Œ
 }}}t        |dd «      }t        j                  j                  j                  j                  j                  }	t        |j                  «       |«      }
t        |
«      | _        t!        |
«      | _        t%        |	||«      | _        |j&                  | _        |j(                  | _        | j&                  rmt        j                  j                  j                  }t+        |t,        «      sJ ‚|j/                  «       }|j                  j1                  |«      }|d   sJ d«       ‚|j2                  | _        |j4                  | _        y c c}}w c c}}w )NÚ	constantsc                 ót   •— t        | t        «      r&‰j                  j                  j	                  | «      fS | S rÆ   )r²   r³   ÚfnÚ	arg_namesÚindex)rÈ   r|   s    €r   ú<lambda>z&HIPLauncher.__init__.<locals>.<lambda>‡  s-   ø€ ¼ZÈÌ3Ô=O˜SŸV™V×-Ñ-×3Ñ3°AÓ6Ð9€ ÐUV€ r   rº   ÚcooperativeLaunchz8Cooperative launch requested but not supported by device)ru   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  Úarg_idxÚidxÚvaluer¹   rº   rù   Úexpanded_signaturerÍ   ÚdeviceÚdevice_propertiess    `            r   rŒ   zHIPLauncher.__init__…  s‹  ø€ Ü%,¨S°+Ô%>�C—M’MÄDÃFˆ	ÛVˆØ;D¿?¹?Ó;L×M©Z¨S°%‘W˜S“\ 5Ñ(ÐMˆ	ÑMØ25·-±-×2EÑ2EÓ2G×H¡J C¨�S˜%‘ZÐHˆ	ÑHÜ! (Ð,=¸tÓDˆÜ—>‘>×(Ñ(×/Ñ/×5Ñ5×<Ñ<ˆÜ-¨i×.>Ñ.>Ó.@À/ÓRÐÜ1Ð2DÓEˆÔÜ 5Ð6HÓ IˆÔÜ,¨X°yÀ/ÓRˆŒØ'/×'GÑ'GˆÔ$Ø!×+Ñ+ˆŒà×'Ò'Ü—^‘^×*Ñ*×1Ñ1ˆFÜ˜f¤iÔ0Ð0Ð0Ø×.Ñ.Ó0ˆFØ &§¡× BÑ BÀ6Ó JÐØ$Ð%8Ò9ð KØJóKÐ9à$,×$AÑ$AˆÔ!Ø%-×%CÑ%CˆÕ"ùó' NùÛHs   ¼GÁ/Gc
                 ó  ‡‡‡‡— ˆˆˆˆfd„} || j                   | j                  t        j                  «      }| j	                  | j
                  ‰‰‰‰||||||	| j                  | j                  | j                  |
«       y )Nc                 ó^   •— | dkD  r'‰‰z  ‰z  }|| z  }|j                  «       } |||‰	«      S y ©Nr   )râ   )
r'   ÚalignÚ	allocatorÚ	grid_sizeÚ
alloc_sizeÚalloc_fnÚgridXÚgridYÚgridZÚstreams
         €€€€r   Úallocate_scratchz.HIPLauncher.__call__.<locals>.allocate_scratch   s?   ø€ Ø�aŠxØ! E™M¨EÑ1�	Ø&¨Ñ-�
Ø$Ÿ=™=›?�Ù 
¨E°6Ó:Ð:Ør   )	r  r  r   Ú_profile_allocatorrƒ   r  r  r  rÑ   )rŠ   r#  r$  r%  r&  Úfunctionrå   Úlaunch_metadataÚlaunch_enter_hookÚlaunch_exit_hookrô   r'  Úprofile_scratchs    ````        r   Ú__call__zHIPLauncher.__call__�  sy   û€ ÷	ñ +¨4×+DÑ+DÀd×F`ÑF`Ü+6×+IÑ+IóKˆð 	�‰�D×0Ñ0°%¸ÀÀvÈxÐYhØ# _Ð6GÐIYÐ[_×[iÑ[iØ×(Ñ(¨$×*?Ñ*?Àõ	Gr   N)r   r   r   rŒ   r.  © r   r   r  r  ƒ  s   „ òDó0Gr   r  c                   ób   ‡ — 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                 óV   •— t         ‰| �  «        t        «       | _        t        | _        y rÆ   )rv   rŒ   rr   rÏ   r  Úlauncher_cls)rŠ   ry   s    €r   rŒ   zHIPDriver.__init__²  s   ø€ Ü‰ÑÔÜ“ZˆŒ
Ü'ˆÕr   c                 ó"   — dd l }|j                  S r  )r>   Úcuda©rŠ   r>   s     r   Úget_device_interfacezHIPDriver.get_device_interface·  s   € ÛØ�z‰zÐr   c                  ó’   — 	 dd l } | j                  j                  «       xr | j                  j                  d uS # t
        $ r Y yw xY w)Nr   F)r>   r4  Úis_availableÚversionÚhipÚImportError)r>   s    r   Ú	is_activezHIPDriver.is_active»  sC   € ð	ÛØ—:‘:×*Ñ*Ó,ÒP°%·-±-×2CÑ2CÈ4Ð2OÐPøÜò 	Ùð	ús   ‚7: º	AÁA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                  «       }| j                  j                  |«      }t        j                  j
                  xs |d   }|d   }t        d|j                  d«      d   |«      S )NÚarchÚwarpSizer:  r@   r   )r  rÏ   r�   r   rÌ   Úoverride_archr   rU   )rŠ   r  r  rA  r  s        r   Úget_current_targetzHIPDriver.get_current_targetÆ  se   € Ø×(Ñ(Ó*ˆØ ŸJ™J×<Ñ<¸VÓDÐÜ�}‰}×*Ñ*ÒGÐ.?ÀÑ.GˆØ% jÑ1ˆ	Ü˜ §
¡
¨3£°Ñ 2°IÓ>Ð>r   c                 óJ   — dd l }|j                  d| j                  «       «      S )Nr   r4  )r>   r  r  r5  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.testingrH  )rŠ   rH  s     r   Úget_benchmarkerzHIPDriver.get_benchmarkerÒ  s
   € Ý+Øˆr   c                 ób   — dd l }d}|j                  t        |dz  «      |j                  d¬«      S )Nr   i   é   r4  )r¿   r  )r>   ÚemptyÚint)rŠ   r>   Ú
cache_sizes      r   Úget_empty_cache_for_benchmarkz'HIPDriver.get_empty_cache_for_benchmarkÖ  s.   € Ûð 'ˆ
Ø�{‰{œ3˜z¨Q™Ó/°u·y±yÈˆ{ÓPÐPr   c                 ó$   — |j                  «        y rÆ   )Úzero_)rŠ   Úcaches     r   Úclear_cachezHIPDriver.clear_cacheÝ  s   € Ø�‰�r   )r   r   r   rŒ   r6  Ústaticmethodr<  r³   r?  rD  rF  rJ  rP  rT  r�   rŽ   s   @r   rã   rã   °  sN   ø„ ô(ò
ð ñó ðð¨ð °ó ò?ò?ò
òQör   rã   )(Ú	functoolsr    rV   r´   rË   Úpathlibr   r   Útriton.backends.compilerr   Útriton.backends.driverr   Útriton.runtimer   Útriton.runtime.buildr   r:   rM   ÚrealpathrN   rL   r}   r…   r†   r‡   rˆ   r‰   r;   Ú	lru_cacherp   Úobjectrr   r®   rÃ   rÒ   rÖ   rë   r   r  rã   r/  r   r   ú<module>r_     së   ðÛ Û 	Û Û 	Û Ý Ý Ý .Ý ,Ý &Ý 8à
�'‰'�/‰/˜"Ÿ'™'×*Ñ*¨8Ó4Ó
5€Ø—‘—‘˜W iÓ0Ð1€Ø€Ø€Ø€Ø€
Ø€	ò-ð` €×ÑÓñ\Ró ð\Rô~"ˆvô "òB
ò0òBYò,ò .$òb)ôX*G�&ô *GôZ.�	õ .r   