
    ^jF                        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   e/var/www/ramen.bs-engineer-server.com/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    MM++	Y'(qvvNN4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%% 
 !!%)<gh>OQXY_Q`aJ ++k2BB !+H5O#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)errorsz/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/1BB^_g^hijj 8AL77>>,'_\N:abjaklmmE RWW__X6xHI	ww~~i 	LL ((*M((*I"m3 ww||D'5(;77>>$KT	 ))$56$**3/ 	AQ)Aww~~a LLO		 99Z(Lww||L%B77>>,'\"	**K+BCJJLRRT77<<%BLww~~l+##LL& IIk*M]E8D77>>-(  ]# ""$4d#;<CC8CTD *.):^djjl>S>ST\>]DJJL^D^ 77>>#JS '',,'7B	ww~~)*""	LL$%
z1H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*    sJ' 37<CL||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277<<45??A kk5{AF%#Kl[??%(%>%>"%(%>%>"jj(+(D(D% --oo))^^
MM	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 c3CNN<$@6E?>24DaNHH?EEKKNEKKNE;;s#a'D |cEk*q4x )AMM%()d#d#l+4[ %e$%4[ %e$% MM#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    c5! ."1f-. MM#r   	constexpr)tritonruntimedriveractiveutilsr   )r   flat_signaturer   r   kernel_signaturer   s        @r   make_kernel_signaturer      sq     N 03/0#1FaQ+5EFF>>  ''--FFGW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|    
  [c5!&&ASTWAX_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    " HH
YY
 [[
 KK5 	

 !!
 YY
 [[
 	
 IIEkkG88D--,BU2UUU#K0I$\2J#L*0445MrR)*a/C8Nq8Q4RVW4WWW#9!#< j"I^^""))Ffi(((<<--iYP\^hjo.5t=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)     rX[jc2Ss~~l7SSrs   -/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,2h, 	.FAs&&!(()<S/SfguSv)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pvq#*S#:NSVSaSabnSopr"c*=&>#FXBY&YYY#fs+='>>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=OSVV--33A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+%>CMMDF	V;D??;LMZS%WS\5(M	M25--2E2E2GHJCS%ZH	H!(,=tD>>((//55<<-i.>.>.@/R12DE 56H I,Xy/R'/'G'G$!++''^^**11Ffi000..0F & B B6 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?    ax!EME1	&-
$==?
E6::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+DdF`F`+6+I+IK 	D00%vxYh#_6GIY[_[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    zz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%--2C2C42O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    ((* JJ<<VD}}**G.?.G%j1	

3 2I>>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    ||FD$;$;$=>>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.     '
{{3zQ/uyy{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Wi01
	-` \R \R~"v "B
0BY, .$b)X*G& *GZ.	 .r   