
    çgL+                         d dl mZmZ d dlmZmZmZmZ d dlm	Z	 d dl
mZmZ d dlZ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  e	d           G d	 d
                      Z G d de          ZdS )    )BaseBackend	GPUTarget)irpassesllvmamd)	dataclass)AnyTupleN)PathT)frozenc                   $   e Zd ZU dZeed<   dZeed<   dZeed<   dZeed<   dZ	e
ed	<   d
Zeed<   dZeed<   dZeed<   dZeed<   dZeed<   dZeed<   dZee         ed<   dZeed<   dZeed<   dZeed<   dZeed<   dZeed<   dZeed<   d Zd ZdS )
HIPOptions   	num_warps   waves_per_eur   
num_stagesnum_ctasNextern_libs)r   r   r   cluster_dimsFdebugarchallow_fp8e4nvallow_fp8e4b15ieeedefault_dot_input_precision)r   allowed_dot_input_precisionsTenable_fp_fusionmatrix_instr_nonkdimkpackallow_flush_denormmax_num_imprecise_acc_defaulthipbackend_namec                    t          t                    j        dz  }| j        i nt	          | j                  }d| j        v s	d| j        v rdnd}t                              | d|           ddg}|D ]}t          || d	z            ||<   t                              | d
t          |
                                                     | j        dk    r| j        | j        dz
  z  dk    s
J d            d S )Nlibgfx10gfx11    @   	warp_sizeocmlocklz.bcr   r   r   znum_warps must be a power of 2)r   __file__parentr   dictr   object__setattr__strtupleitemsr   )selfdefault_libdirr   r,   libsr'   s         X/var/www/html/ai-engine/env/lib/python3.11/site-packages/triton/backends/amd/compiler.py__post_init__zHIPOptions.__post_init__#   s   h.6 ,4bb$t?O:P:P!TY..'TY2F2FBBB	4i888 	A 	AC">sKKK#?@@K4k6G6G6I6I0J0JKKK~!!t~!9K'LQR&R&R&R/ 'S&R&R&R&R    c                     d                     d | j                                        D                       }t          j        |                    d                                                    S )N_c                 "    g | ]\  }}| d | S )- ).0namevals      r:   
<listcomp>z#HIPOptions.hash.<locals>.<listcomp>1   s&    OOOID#4#OOOr<   utf-8)join__dict__r6   hashlibsha256encode	hexdigest)r7   keys     r:   hashzHIPOptions.hash0   sX    hhOO9L9L9N9NOOOPP~cjj1122<<>>>r<   )__name__
__module____qualname__r   int__annotations__r   r   r   r   r1   r   r5   r   boolr   r4   r   r   r   r   r   r   r    r!   r"   r#   r%   r;   rN   rA   r<   r:   r   r      s[        IsL#JHcK#L%###E4D#M4 ND   '----/9 %*999!d!!! !#!!!E3NNN$$$$)*!3***L#0 0 0? ? ? ? ?r<   r   c                       e Zd Zedefd            Zdeddf fdZdefdZd Z	d Z
d	 Zed
             Zed             Zed             Zed             Zed             Zed             Zd Z ej                    d             Z xZS )
HIPBackendtargetc                     | j         dk    S )Nr$   )backend)rW   s    r:   supports_targetzHIPBackend.supports_target7   s    ~&&r<   returnNc                     t                                          |           t          |j        t                    sJ d| _        d S )Nhsaco)super__init__
isinstancer   r4   
binary_ext)r7   rW   	__class__s     r:   r_   zHIPBackend.__init__;   s>       &+s+++++!r<   c                     d| j         j        i}|                    fdt          j                                        D                        t          di |S )Nr   c                 *    i | ]}|v ||         S rA   rA   )rB   koptss     r:   
<dictcomp>z,HIPBackend.parse_options.<locals>.<dictcomp>B   s+    ]]]ASTX\S\S\QQS\S\S\r<   rA   )rW   r   updater   __dataclass_fields__keys)r7   rf   argss    ` r:   parse_optionszHIPBackend.parse_options@   s\    ()]]]])H)M)M)O)O]]]^^^!!D!!!r<   c                 r    |j         |j        |j        |j        d         |j        d         |j        d         fS )Nr   r      )r   r   sharedr   )r7   metadatas     r:   pack_metadatazHIPBackend.pack_metadataE   s>    O!!$!!$!!$
 	
r<   c                 "    t                      }|S N)r1   )r7   codegen_fnss     r:   get_codegen_implementationz%HIPBackend.get_codegen_implementationO   s    ffr<   c                 .    t          j        |           d S rs   )r   load_dialects)r7   ctxs     r:   rw   zHIPBackend.load_dialectsS   s    #r<   c                     t          j        d          } | %t          |           }|                                r|S t          t                    j        dz  }|                                r|S t          d          }|                                r|S t          d          }|                                r|S t          d          )NTRITON_HIP_LLD_PATHzllvm/bin/ld.lldz/opt/rocm/llvm/bin/ld.lldz/usr/bin/ld.lldz/ROCm linker /opt/rocm/llvm/bin/ld.lld not found)osgetenvr   is_filer/   r0   	Exception)lld_env_pathllds     r:   path_to_rocm_lldzHIPBackend.path_to_rocm_lldV   s     y!677#|$$C{{}} 
8nn#&77;;== 	J.//;;== 	J$%%;;== 	JIJJJr<   c                 z   t          j        | j                  }|                                 t          j                            |           t          j                            |           t          j        	                    |           t          j        
                    |           t          j                            |           t          j                            |           t          j                            |           t          j                            |           |                    |            | S rs   )r   pass_managercontextenable_debugr   commonadd_inlinerttiradd_rewrite_tensor_pointeradd_combineadd_canonicalizeradd_reorder_broadcastadd_cseadd_licmadd_symbol_dcerunmodrp   optionspms       r:   	make_ttirzHIPBackend.make_ttirj   s    _S[))
!!"%%%..r222###''+++))"---b!!!r"""$$R(((
s
r<   c                    t          j        | j                  }|                                 t          j                            |d|j         |j        |j	        |j
                   |                    |            t          j        | j                  }|                                 t          j                            |           t          j                            |           t          j                            |           t           j        j                            ||j        |j        |j                   t          j                            |           t           j        j                            |           t          j                            |d           |j        dk    r\t!          j        |j                  rCt           j        j                            |           t          j                            |           t          j                            |d           t          j                            |           t          j                            |           |j        dk    r$t           j        j                            |           t          j                            |           t          j                            |           |                    |            | S )Nzhip:Tr   )r   r   r   r   r   r   add_convert_to_ttgpuirr   r   r,   r   r   ttgpuiradd_coalesceadd_remove_layout_conversionsadd_optimize_thread_localityr   add_accelerate_matmulr    r!   add_optimize_epilogueadd_optimize_dot_operandsr   has_matrix_core_featureadd_stream_pipeliner   r   add_reduce_data_duplicationadd_reorder_instructionsr   r   r   s       r:   
make_ttgirzHIPBackend.make_ttgiry   s8   _S[))
**2/Dgl/D/DgFWY`Yj+2+;	= 	= 	=
s_S[))
##B'''44R88833B777
00W\7C_ahanooo44R888
0044400T:::""s'B7<'P'P"J222666M++B///00T:::44R888222666""J77;;;b!!!$$R(((
s
r<   c                   
 | }t          j        |j                  }|                                 t          j        j                            ||j                   t
          j	        
                    |           t
          j	                            |           t
          j                            |           d}t          j        j                            ||j        |           t
          j                            |           t
          j                            |           t
          j	                            |           t
          j	                            |           t
          j                            |           t
          j                            |           t
          j                            |           t(          j                            dd          dk    rt
          j                            |           t          j        j                            |           |                    |           t7          j                     t7          j                    }t7          j        ||          
t	          j        
|j                   t	          j        
d           t	          j         
dd           t	          j         
dd           t	          j         
dd           t	          j         
d	|j!        d
k               d 
"                                D             }|d         #                    t          j$                   |d         %                    dd|j&        |j!        z              |d         %                    d|j'                    |j(        rdnd}|d         %                    d|           |j)        r(
fd|j)        D             }	t7          j*        
|	           t7          j+        
t6          j,        t          j-                   | .                    d          |d<   t	          j/        
           ta          
          S )NTTRITON_DISABLE_LINE_INFO0i  __oclc_finite_only_optF__oclc_correctly_rounded_sqrt32__oclc_unsafe_math_opt__oclc_wavefrontsize64r+   c                 :    g | ]}|                                 |S rA   )is_declaration)rB   fns     r:   rE   z(HIPBackend.make_llir.<locals>.<listcomp>   s)    PPPbB<M<M<O<OPrPPPr<   r   zamdgpu-flat-work-group-sizez1,zamdgpu-waves-per-euzpreserve-signr   zdenormal-fp-math-f32c                 D    g | ]\  }}t          j        |          |S rA   )r   need_extern_lib)rB   rC   pathllvm_mods      r:   rE   z(HIPBackend.make_llir.<locals>.<listcomp>   s1    iiiltTSEXYacgEhEhiTiiir<   ztriton_gpu.sharedro   )1r   r   r   r   r   r   r   %add_decompose_unsupported_conversionsr   convertadd_scf_to_cfadd_index_to_llvmiradd_allocate_shared_memoryadd_to_llvmirr   r   r   add_cf_to_llvmiradd_arith_to_llvmirr   r{   environgetllvmiradd_di_scopeadd_builtin_func_to_llvmirr   r   init_targets	to_moduleset_isa_versionset_abi_versionset_bool_control_constantr,   get_functionsset_calling_convCALLING_CONV_AMDGPU_KERNELadd_fn_attrr   r   r"   r   link_extern_libsoptimize_moduleOPTIMIZE_O3TARGET_TRIPLEget_int_attrcleanup_bitcode_metadatar4   )srcrp   r   r   r   _HIPBackend__HIP_FTZr   fnsdenormal_modepathsr   s             @r:   	make_llirzHIPBackend.make_llir   s   _S[))

@@W\RRR$$R(((**2...11"555 	
((W\9EEE''+++b!!!''+++**2...''+++b!!!$$R(((:>>4c::cAAM&&r*** 	
55b999
s 	,..>#w// 	Hgl333Hc***%h0H%PPP%h0QSWXXX%h0H%PPP%h0H'J[_aJabbb QPH2244PPPA >???A8:dw?PQXQb?b:d:deeeA0W5I2KLLL+2+EQ6A1=AAA 	3iiiig.AiiiE!(E222Xt'79JKKK !--.ABB$X...8}}r<   c           	      P   t          j        d|           }t          |          dk    sJ |d         |d<   t          j        | t
          j        |j        dg |j        d          }t          j
                            dd          d	k    rt          d
           t          |           |S )Nz3define amdgpu_kernel void @([a-zA-Z_][a-zA-Z0-9_]*)r   r   rC    FAMDGCN_ENABLE_DUMPr   1z!// -----// AMDGCN Dump //----- //)refindalllenr   translate_to_asmr   r   r   r   r{   r   r   print)r   rp   r   namesamdgcns        r:   make_amdgcnzHIPBackend.make_amdgcn   s    
 
QSVWW5zzQ 8&sC,=w|RQSU\Umotuu:>>.44;;5666&MMMr<   c                 j   t          j        | |j        d          }t                                          }t          j                    5 }t          j                    5 }t          |j        d          5 }|	                    |           d d d            n# 1 swxY w Y   t          j        |ddd|j        d|j        g           d d d            n# 1 swxY w Y   t          |j        d          5 }|                                }	d d d            n# 1 swxY w Y   d d d            n# 1 swxY w Y   |	S )Nr   wbz-flavorgnuz-sharedz-orb)r   assemble_amdgcnr   rV   r   tempfileNamedTemporaryFileopenrC   write
subprocess
check_callread)
r   rp   r   r]   	rocm_pathtmp_outtmp_infd_infd_outrets
             r:   
make_hsacozHIPBackend.make_hsaco   s   #Cr:://11	(** 	$g,.. q&&+t,, 'KK&&&' ' ' ' ' ' ' ' ' ' ' ' ' ' '%y)UIv{\`bibn&opppq q q q q q q q q q q q q q q glD)) $Vkkmm$ $ $ $ $ $ $ $ $ $ $ $ $ $ $	$ 	$ 	$ 	$ 	$ 	$ 	$ 	$ 	$ 	$ 	$ 	$ 	$ 	$ 	$ 
s~   D(C2BCBCB(CD(C	D(C	D(0DD(D	D(D	D((D,/D,c                 d      fd|d<    fd|d<    fd|d<    fd|d<    fd	|d
<   d S )Nc                 2                         | |          S rs   )r   r   rp   r   r7   s     r:   <lambda>z'HIPBackend.add_stages.<locals>.<lambda>       t~~c8W/U/U r<   r   c                 2                         | |          S rs   )r   r   s     r:   r   z'HIPBackend.add_stages.<locals>.<lambda>       Xw0W0W r<   ttgirc                 2                         | |          S rs   )r   r   s     r:   r   z'HIPBackend.add_stages.<locals>.<lambda>   r   r<   llirc                 2                         | |          S rs   )r   r   s     r:   r   z'HIPBackend.add_stages.<locals>.<lambda>   s    1A1A#xQX1Y1Y r<   r   c                 2                         | |          S rs   )r   r   s     r:   r   z'HIPBackend.add_stages.<locals>.<lambda>  r   r<   r]   rA   )r7   stagesr   s   ` `r:   
add_stageszHIPBackend.add_stages   sr    UUUUUvWWWWWwUUUUUvYYYYYxWWWWWwr<   c                 x    t          j        t                                          dgd          }| d| j         S )Nz	--versionrF   )encodingr@   )r   check_outputrV   r   rW   )r7   versions     r:   rN   zHIPBackend.hash  s?    ):+F+F+H+H+*Vahiii))DK)))r<   )rO   rP   rQ   staticmethodr   rZ   r_   r
   rl   rq   ru   rw   r   r   r   r   r   r   r   	functools	lru_cacherN   __classcell__)rb   s   @r:   rV   rV   5   s       '	 ' ' ' \'"y "T " " " " " "
"S " " " "

 
 
     K K \K&   \   \8 F F \FP   \   \X X X Y* * * * * * *r<   rV   )triton.backends.compilerr   r   triton._C.libtritonr   r   r   r   dataclassesr	   typingr
   r   rI   r   r{   r   r   r  pathlibr   r   rV   rA   r<   r:   <module>r     s:   ; ; ; ; ; ; ; ; 5 5 5 5 5 5 5 5 5 5 5 5 ! ! ! ! ! !           				 				               $#? #? #? #? #? #? #? #?LQ* Q* Q* Q* Q* Q* Q* Q* Q* Q*r<   