
    ^j 4                     v   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ej                   j)                  ed	      Zd
gZdadadadada e j:                         d        Z e j:                         d        Z G d de       Z!d Z"d Z#d Z$d Z% e&d  e'd      D              Z(de(d<   de(d<   de(d<   dZ)d Z*d Z+ G d de       Z, G d de      Z-y)    N)Path)knobs)compile_module_from_src)_allocation)	GPUTarget)	GPUDriverincludeliblibcuda.so.1c            	         t         j                  j                  x} r| gS t        j                  ddg      j                  d      }|j                         D cg c]  }d|v s|j                         d    }}|D cg c]!  }t        j                  j                  |      # }}t        j                  d      }|r^|s\|j                  d      D cg c]B  }t        j                  j                  t        j                  j                  |d            sA|D }}d	}|r|d
t        |      z  z  }|dz  }n
|dz  }|dz  }t        d |D              sJ |       |S c c}w c c}w c c}w )Nz/sbin/ldconfigz-pignore)errorsr   LD_LIBRARY_PATH:zlibcuda.so cannot found!
z!Possible files are located at %s.z:Please create a symlink of libcuda.so to any of the files.z<Please make sure GPU is set up and then run "/sbin/ldconfig"z- (requires sudo) to refresh the linker cache.c              3      K   | ]A  }t         j                  j                  t         j                  j                  |d              C yw)r   N)ospathexistsjoin).0r   s     h/var/www/ramen.bs-engineer-server.com/venv/lib/python3.12/site-packages/triton/backends/nvidia/driver.py	<genexpr>zlibcuda_dirs.<locals>.<genexpr>,   s,     Sdrww~~bggll4@ASs   AA	)r   nvidialibcuda_path
subprocesscheck_outputdecode
splitlinessplitr   r   dirnamegetenvr   r   strany)	env_libcuda_pathlibslinelocslocdirsenv_ld_library_pathdirmsgs	            r   libcuda_dirsr.      sW    <<4444 !!""$4d#;<CC8CTD *.):UnPT>TDJJLUDU,01SBGGOOC 1D1))$564288=sPRPWPWP\P\]`bpPqArss
&C2SY>>KKMM>>SdSSXUXXSK V1 ts   	E#E>&E AE%E%c                  $    t         gt               S N)libdevice_dirr.        r   library_dirsr4   0   s    +LN++r3   c                   $     e Zd Z fdZd Z xZS )	CudaUtilsc                 d    t        | d      st        t        |   |       | _        | j                  S )Ninstance)hasattrsuperr6   __new__r8   )cls	__class__s    r   r;   zCudaUtils.__new__<   s*    sJ' C8=CL||r3   c                 >   t        t        t        j                  j	                  t
        d            j                         dt               t        t              }|j                  a
|j                  a|j                  a|j                  a|j                  a|j                  | _        |j                   | _        |j"                  | _        |j$                  | _        |j&                  | _        |j(                  | _        |j*                  | _        |j,                  | _        y )Nzdriver.c
cuda_utils)srcnamer4   include_dirs	libraries)r   r   r   r   r   r!   	read_textr4   rB   rC   PyCUtensorMapPyKernelArgARG_CONSTEXPR
ARG_KERNEL	ARG_TUPLEload_binaryget_device_propertiescuOccupancyMaxActiveClustersset_printf_fifo_sizefill_tma_descriptor_tiledfill_tma_descriptor_im2collaunchbuild_signature_metadata)selfmods     r   __init__zCudaUtils.__init__A   s    %RWW\\':67AAC%%
 ))oo))^^
MM	??%(%>%>",/,L,L)$'$<$<!),)F)F&*-*H*H'jj(+(D(D%r3   )__name__
__module____qualname__r;   rT   __classcell__r=   s   @r   r6   r6   :   s    
Er3   r6   c                     | d   dk(  ry| j                  d      ryi ddddd	d
dddddddddddddddddddddddddd|    S )Nr   *CUdeviceptr
tensordescCUtensorMapi1int8_ti8i16int16_ti32int32_ti64int64_tu1uint8_tu8u16uint16_tu32uint32_tu64uint64_tfp16doublebf16fp32f32fp64	nvTmaDesc)
startswith)tys    r   	ty_to_cpprz   b   s    	!u|	}}\"hh 	y 	y	
 	y 	i 	i 	z 	z 	z 	 	 	 	x 	  	]!" 	#
 
r3   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 |r|t        |      k(  sJ |S )Nr   r]      ztensordesc<([^[>]*)\[([^]]*)\]   ,r[   rf   r_   rw   rd   )

isinstancer#   rx   rematchgroupcountappendrangelen)	signaturetensordesc_metaoutputtensordesc_idxsigmetar   dtypeshapendim_s              r   expand_signaturer   {   sN   FN  c3CNN<$@6E?>24DaNHH?EEKKNEKKNE;;s#a'D|cEk* q4x )AMM%()d#d#k*4[ %e$%4[ %e$% MM#;> .C4H"HHHMr3   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 r0   )r   tupler   )r   r   x_flatten_signatures      r   r   z1make_kernel_signature.<locals>._flatten_signature   s4    c5! ."1f-. MM#r3   	constexpr)tritonruntimedriveractiveutilsrQ   )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   r   rF   annotate_argumentsrI   rH   rG   )r   annotated_argumentsr   s      r   r   r      s|    
  [c5!&&ASTWAX_h(ikK&&{:'VW&&{='YZ[ r3   c              #   $   K   | ]  }||f 
 y wr0   r2   )r   is     r   r   r      s     :1A:s      
      	      c           
         |X| j                   g| j                  | j                  | j                  dk(  | j                  | j                  | j                  S |d   }|d   }|d   }|d   }|d   }| j                  }| j                  }|d   dk(  sJ | j                  dk(  rdnd	}	|rt        |      }
|
dxx   d
z  cc<   n|}
| j                  rt        }t        j                  j                  j                  j                  j                  | j                   j                         ||t        |   ||
||	      }|g||S )Nnanswizzle	elem_size	elem_type
block_size
fp4_paddedr   r|   r   r}   )baser   stridespaddinground_f32_to_tf32listTMA_TF32r   r   r   r   r   rN   data_ptrTMA_DTYPE_DEVICE_TO_HOST)argmetadatar   r   r   r   r   r   r   r   expanded_shapecu_tensor_maps               r   make_tensordesc_argr      sr    HH
YY
 [[
 KK5 	

 !!
 YY
 [[
 	
 y!G%I%I,'J,'JIIEkkG2;!;;%'aQGera
	NN))0066PP +	M ,E,G,,r3   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 )Nc              3   b   K   | ]'  }t        |t              xr |j                  d        ) yw)r]   N)r   r#   rx   )r   r   s     r   r   z)wrap_handle_tensordesc.<locals>.<genexpr>  s)     rX[jc2Ss~~l7SSrs   -/r]   c                      | d d }| d   }g }d}t        |      D ]>  \  }}|v r$|j                  t        |	|                |dz  }.|j                  |       @  g || S )Nr   r   r|   )	enumerateextendr   r   )
args	base_argskernel_argsfinal_kernel_argsr   r   r   launchertensordesc_indicesr   s
          r   innerz%wrap_handle_tensordesc.<locals>.inner  s    "I	2h, 	.FAs&&!(()<S/R`Ba)bc!#!((-	. 66$566r3   )r$   valuessetr   r   r#   rx   r   )r   r   r   has_tensor_desc_argr   r   r   r   s   ` `    @r   wrap_handle_tensordescr     s    r_h_o_o_qrr"9#3#3#56pvq#*S#:NSVSaSabnSopr#o"6#>P:Q"QQQ&3'9#::7 L) 	qs   	B5
"B5
4B5
c                       e Zd Zd Zd Zy)CudaLauncherc                 *   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        |dd      | _        t'        |	||      | _        |j(                  | _        |j*                  | _        |j,                  | _        |j.                  | _        |j0                  | _        |j2                  | _        y c c}}w c c}}w )N	constantsc                 t    t        | t              r&j                  j                  j	                  |       fS | S r0   )r   r#   fn	arg_namesindex)r   r@   s    r   <lambda>z'CudaLauncher.__init__.<locals>.<lambda>'  s-    Z3=OSVV--33A69 UV r3   r   num_ctasr|   )r9   r   dictitemsr   getattrr   r   r   r   r   rP   r   r   r   arg_annotationsr   r   r   r   global_scratch_sizeglobal_scratch_alignprofile_scratch_sizeprofile_scratch_alignlaunch_cooperative_grid
launch_pdl)rR   r@   r   r   arg_idxidxvaluer   r   r   expanded_signatures    `         r   rT   zCudaLauncher.__init__%  sK   %,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*a8,Xy/R#+#?#? $,$A$A!$,$A$A!%-%C%C"'/'G'G$"-- NHs   F	/Fc
                 `     fd} | j                    j                  t        j                        } | j                   j
                  t        j                        } j                  | j                   j                  ||||	|| j                   j                  |
       y )Nc                 x    | dkD  r4z  z  }|	j                   z  | z  }|j                         } |||
      S y Nr   )r   get)sizealign	allocator	grid_size
alloc_sizealloc_fngridXgridYgridZrR   streams         r   allocate_scratchz/CudaLauncher.__call__.<locals>.allocate_scratch<  sH    ax!EME1	&6=
$==?
E6::r3   )r   r   r   
_allocatorr   r   _profile_allocatorrP   r   r   r   r   )rR   r   r   r   r   functionkernel_metadatalaunch_metadatalaunch_enter_hooklaunch_exit_hookr   r   global_scratchprofile_scratchs   `````         r   __call__zCudaLauncher.__call__9  s    	 	 *$*B*BDD]D]_j_u_uv*4+D+DdF`F`+6+I+IK 	E5%4;W;WY]YhYh#_6GIY[i#T%9%94;P;PRV	Xr3   N)rU   rV   rW   rT   r   r2   r3   r   r   r   #  s    .(Xr3   r   c                   b     e Zd Z fdZd Zd Zd Zed        Zde	de	fdZ
d	 Zd
 Zd Z xZS )
CudaDriverc                 V    t               | _        t        | _        t        |           y r0   )r6   r   r   launcher_clsr:   rT   )rR   r=   s    r   rT   zCudaDriver.__init__O  s    [
(r3   c                 ~    | j                         }| j                  |      }|d   dz  |d   z   }d}t        d||      S )Nr   r   r|       cuda)get_current_deviceget_device_capabilityr   )rR   device
capability	warp_sizes       r   get_current_targetzCudaDriver.get_current_targetT  sK    ((*//7
]R'*Q-7
	Y77r3   c                 J    dd l }|j                  d| j                               S )Nr   r  )torchr
  r  rR   r  s     r   get_active_torch_devicez"CudaDriver.get_active_torch_device[  s    ||FD$;$;$=>>r3   c                 "    dd l }|j                  S r   )r  r  r  s     r   get_device_interfacezCudaDriver.get_device_interface_  s    zzr3   c                      	 dd l } | j                  j                         xr | j                  j                  d u S # t
        $ r Y yw xY w)Nr   F)r  r  is_availableversionhipImportError)r  s    r   	is_activezCudaDriver.is_activec  sC    	::**,L%--2C2Ct2KL 		s   7: 	AAry   returnc                     t        |      S r0   )rz   )rR   ry   s     r   map_python_to_cpp_typez!CudaDriver.map_python_to_cpp_typek  s    }r3   c                     ddl m} |S )Nr   )do_bench)triton.testingr  )rR   r  s     r   get_benchmarkerzCudaDriver.get_benchmarkern  s
    +r3   c                 b    dd l }d}|j                  t        |dz        |j                  d      S )Nr   i      r  )r   r
  )r  emptyint)rR   r  
cache_sizes      r   get_empty_cache_for_benchmarkz(CudaDriver.get_empty_cache_for_benchmarkr  s.    
 '
{{3zQ/uyy{PPr3   c                 $    |j                          y r0   )zero_)rR   caches     r   clear_cachezCudaDriver.clear_cache{  s    r3   )rU   rV   rW   rT   r  r  r  staticmethodr  r#   r  r   r&  r*  rX   rY   s   @r   r  r  M  sN    
8?    Qr3   r  ).	functoolsr   r   r   r   pathlibr   r   triton.runtime.buildr   triton.runtimer   triton.backends.compilerr   triton.backends.driverr   r   r!   realpath__file__r   rB   r1   rC   rE   rF   rG   rH   rI   	lru_cacher.   r4   objectr6   rz   r   r   r   r   r   r   r   r   r   r   r  r2   r3   r   <module>r6     sY    	   	   8 & . ,
''//"''**84
5Wi01We,	
	  . , , E  EP
2&RY,"  :b	::         1-h:'X6 'XT/ /r3   