o
    ^i<?                  	   @  s  U d dl 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	 d dl
mZ d dlmZmZmZmZmZmZmZmZmZmZmZmZ d dlmZmZ erkddlmZmZ dd	lm Z m!Z! dd
l"m#Z#m$Z$m%Z% G dd dZ&e& Z'dZ(de)d< daddZ*dbddZ+edZ,edZ-e. Z/G dd  d ee,e-f Z0G d!d" d"e0e1e1f Z2G d#d$ d$e0e1e1f Z3G d%d& d&e0e4e4f Z5G d'd( d(e0e6e6f Z7ed)Z8G d*d+ d+ee8 e0eee8  eee8  f Z9e	G d,d- d-Z:G d.d/ d/e0e1e:f Z;G d0d1 d1e0ee1 ee1 f Z<G d2d3 d3e0Z=e	dd4G d5d6 d6Z>G d7d8 d8eZ?ed9d:d;Z@G d<d: d:ZAG d=d> d>eZBG d?d@ d@eAZCG dAdB dBeAZDdCe)dD< G dEdC dCeAZEG dFdG dGeAZFG dHdI dIeAZGG dJdK dKeZHG dLdM dMeZIedNed;ZJG dOdP dPeeJ ZKeLee1e6f  ZMG dQdR dReZNG dSdT dTeZOG dUdV dVeAZPG dWdX dXeAZQG dYdZ dZeAZRG d[d\ d\eAZSG d]d^ d^eAZTeC ZUeD ZVeE ZWeF ZXeG ZYeP ZZeQ Z[eR Z\eS Z]eT Z^d_d` Z_dS )c    )annotationsN)	dataclass)contextmanager)castAnyCallable	GeneratorGenericOptionalProtocolTypeTypeVar	TypedDictTYPE_CHECKINGUnion)getenvgetenv_bool   )CacheManagerRemoteCacheBackend)JitFunctionInfoKernelParam)	ASTSourceLazyDictIRSourcec                   @  s   e Zd ZdS )EnvN)__name__
__module____qualname__ r   r   G/var/www/html/RAG/RAG_venv/lib/python3.10/site-packages/triton/knobs.pyr      s    r   Tboolpropagate_envkeystrvalueOptional[str]returnNonec                 C  s8   t sd S |d ur|tj| < d S | tjv rtj| = d S d S N)r"   osenviron)r#   r%   r   r   r    setenv   s   
r,   valr   !Union[None, tuple[Optional[str]]]c                 C  sP   | d u rdS t | }|tu r| rdfS dfS |tu r| fS |tu r&t| fS d S )Nr)   10)typer!   r$   int)r-   tr   r   r    toenv)   s   
r4   SetTypeGetTypec                   @  sR   e Zd Zd ddZd!d
dZd"ddZd#ddZd$ddZd%ddZd&ddZ	dS )'env_baser#   r$   r'   r(   c                 C  s
   || _ d S r)   )r#   )selfr#   r   r   r    __init__D      
zenv_base.__init__objclassType[object]namec                 C  s
   || _ d S r)   )r=   )r8   r;   r=   r   r   r    __set_name__G   r:   zenv_base.__set_name__objOptional[object]Optional[Type[object]]r6   c                 C  s*   |j | jt}|tu r|  S | |S r)   )__dict__getr=   _NOTHING	transform)r8   r?   r;   py_valr   r   r    __get__J   s   
zenv_base.__get__c                 C  s   t  r)   )NotImplementedErrorr8   r   r   r    rC   P   s   zenv_base.getobjectr%   Union[SetType, Env]c                 C  sN   t |tr|j| jd  d S ||j| j< t| }r%t| j|d  d S d S )Nr   )
isinstancer   rB   popr=   r4   r,   r#   )r8   r?   r%   env_valr   r   r    __set__S   s   
zenv_base.__set__c                 C  s   |j | jd  d S r)   )rB   rM   r=   )r8   r?   r   r   r    
__delete__[   s   zenv_base.__delete__r-   r5   c                 C  s
   t t|S r)   )r   r6   )r8   r-   r   r   r    rE   ^   s   
zenv_base.transformN)r#   r$   r'   r(   )r;   r<   r=   r$   r'   r(   )r?   r@   r;   rA   r'   r6   )r'   r6   )r?   rJ   r%   rK   r'   r(   )r?   rJ   r'   r(   )r-   r5   r'   r6   )
r   r   r   r9   r>   rG   rC   rO   rP   rE   r   r   r   r    r7   B   s    





r7   c                      s(   e Zd Zd	 fddZd
ddZ  ZS )env_strr#   r$   defaultc                      t  | || _d S r)   superr9   rR   r8   r#   rR   	__class__r   r    r9   f      
zenv_str.__init__r'   c                 C     t | j| jS r)   )r   r#   rR   rI   r   r   r    rC   j      zenv_str.get)r#   r$   rR   r$   r'   r$   r   r   r   r9   rC   __classcell__r   r   rW   r    rQ   d       rQ   c                      s(   e Zd Zd
 fddZddd	Z  ZS )env_str_callable_defaultr#   r$   default_factoryCallable[[], str]c                   rS   r)   )rU   r9   ra   )r8   r#   ra   rW   r   r    r9   p   rY   z!env_str_callable_default.__init__r'   c                 C  s   t | j}|d u r|  S |S r)   )r   r#   ra   )r8   rN   r   r   r    rC   t   s   
zenv_str_callable_default.get)r#   r$   ra   rb   r\   r]   r   r   rW   r    r`   n   r_   r`   c                      *   e Zd Zdd fdd	Zdd
dZ  ZS )env_boolFr#   r$   rR   r!   r'   r(   c                   rS   r)   rT   rV   rW   r   r    r9   }   rY   zenv_bool.__init__c                 C  rZ   r)   )r   r#   rR   rI   r   r   r    rC      r[   zenv_bool.getF)r#   r$   rR   r!   r'   r(   )r'   r!   r]   r   r   rW   r    rd   {       rd   c                      rc   )env_intr   r#   r$   rR   r2   r'   r(   c                   rS   r)   rT   rV   rW   r   r    r9      rY   zenv_int.__init__c              
   C  sV   t | j}|d u r| jS zt|W S  ty* } ztd| j d| d|d }~ww )NzUnable to use =z: expected int)r   r#   rR   r2   
ValueErrorRuntimeError)r8   r-   excr   r   r    rC      s   

zenv_int.get)r   )r#   r$   rR   r2   r'   r(   r'   r2   r]   r   r   rW   r    rg      rf   rg   	ClassTypec                      s(   e Zd Zd fddZdd	d
Z  ZS )	env_classr#   r$   r1   r'   r(   c                   rS   r)   )rU   r9   r1   )r8   r#   r1   rW   r   r    r9      s   
zenv_class.__init__Optional[Type[ClassType]]c                   s   t  j}|d u rd S |dd}t|dkr#td j d| dtt|d |d }t fdd	|	 D sLtd
| d j d j
 dttt |S )N:r      zUnable to read z: 'z ' isn't of the form MODULE:CLASSr   c                 3  s    | ]	}|j  jkV  qd S r)   )r   r1   ).0crI   r   r    	<genexpr>   s    z env_class.get.<locals>.<genexpr>zUnable to use 'z' from z: not of type '')r   r#   splitlenrj   getattr	importlibimport_moduleanymror1   r   r   rm   )r8   r-   compsclsr   rI   r    rC      s   
 zenv_class.get)r#   r$   r1   r$   r'   r(   )r'   ro   r]   r   r   rW   r    rn      s    rn   c                   @  s2   e Zd ZU ded< ded< eejd	ddZdS )

NvidiaToolr$   pathversionr'   Optional[NvidiaTool]c              	   C  sh   z&t j| dgt jd}tjd|dtjd}|d u rW d S t| |dW S  t j	t
fy3   Y d S w )Nz	--version)stderrz.*release (\d+\.\d+).*zutf-8)flagsr   )
subprocesscheck_outputSTDOUTresearchdecode	MULTILINEr   groupCalledProcessErrorFileNotFoundError)r   resultr   r   r   r    	from_path   s   zNvidiaTool.from_pathN)r   r$   r'   r   )r   r   r   __annotations__staticmethod	functools	lru_cacher   r   r   r   r    r      s   
 r   c                      s2   e Zd Zd fddZddd	ZdddZ  ZS )env_nvidia_toolbinaryr$   r'   r(   c                   sN   |t d7 }|| _tjtjtddd|| _t	 
d|  d d S )NEXEbackendsnvidiabinTRITON__PATH)	sysconfigget_config_varr   r*   r   joindirname__file__default_pathrU   r9   upper)r8   r   rW   r   r    r9      s   zenv_nvidia_tool.__init__r   c                 C  s   |  t| jS r)   )rE   r   r#   rI   r   r   r    rC      s   zenv_nvidia_tool.getr   c                 C  sL   |d ur
|| j g}n| j g}|D ]}t| }r|  S qtd| j )NzCannot find )r   r   r   rj   r   )r8   r   pathstoolr   r   r    rE      s   zenv_nvidia_tool.transform)r   r$   r'   r(   )r'   r   )r   r$   r'   r   )r   r   r   r9   rC   rE   r^   r   r   rW   r    r      s    
r   c                   @     e Zd ZdddZdS )env_opt_strr'   r&   c                 C  s
   t | jS r)   )r   r#   rI   r   r   r    rC      r:   zenv_opt_str.getNr'   r&   r   r   r   rC   r   r   r   r    r          r   c                   @  r   )env_opt_boolr'   r&   c                 C  s   t | jd S r)   )r   r#   rI   r   r   r    rC      s   zenv_opt_bool.getNr   r   r   r   r   r    r      r   r   )frozenc                   @  sF   e Zd ZU dZded< ded< ded< eddd	Zedd
dZdS )CompileTimeszm
    Model holding timing information for an invocation of the compiler.

    All times in microseconds.
    r2   ir_initializationzlist[tuple[str, int]]lowering_stagesstore_resultsr'   c                 C  s   t dd | jD S )Nc                 s  s    | ]}|d  V  qdS )r   Nr   )rr   stager   r   r    rt      s    z.CompileTimes.total_lowering.<locals>.<genexpr>)sumr   rI   r   r   r    total_lowering   s   zCompileTimes.total_loweringc                 C  s   | j | j | j S r)   )r   r   r   rI   r   r   r    total   s   zCompileTimes.totalNrl   )r   r   r   __doc__r   propertyr   r   r   r   r   r    r      s   
 r   c                   @     e Zd ZdddZdS )CompilationListenersrcUnion[ASTSource, IRSource]metadatadict[str, Any]metadata_groupdict[str, str]timesr   	cache_hitr!   r'   r(   c                C     d S r)   r   )r8   r   r   r   r   r   r   r   r    __call__     zCompilationListener.__call__N)r   r   r   r   r   r   r   r   r   r!   r'   r(   r   r   r   r   r   r   r   r    r     r   r   
knobs_type
base_knobs)boundc                   @  sJ   e Zd ZedddZedddZdd
dZdddZedddZ	dS )r   r'   dict[str, env_base]c                 C  s   dd t | j D S )Nc                 S  s    i | ]\}}t |tr||qS r   )rL   r7   )rr   kvr   r   r    
<dictcomp>  s    z/base_knobs.knob_descriptors.<locals>.<dictcomp>)r1   rB   itemsrI   r   r   r    knob_descriptors  s   zbase_knobs.knob_descriptorsr   c                   s    fdd j  D S )Nc                   s   i | ]}|t  |qS r   )rx   )rr   r   rI   r   r    r         z$base_knobs.knobs.<locals>.<dictcomp>)r   keysrI   r   rI   r    knobs  s   zbase_knobs.knobsr8   r   c                 C  s   t |  }|j| j |S r)   )r1   rB   update)r8   resr   r   r    copy  s   
zbase_knobs.copyc                 C  s   | j  D ]}t| | q| S r)   )r   r   delattr)r8   knobr   r   r    reset   s   zbase_knobs.resetGenerator[None, None, None]c              
   c  s    z<dd | j  D }t| j}d V  W | j  | j| | D ]\}}|d ur2|tj|< q$|tjv r;tj|= q$d S | j  | j| | D ]\}}|d ur[|tj|< qM|tjv rdtj|= qMw )Nc                 S  s   i | ]	}|j t|j qS r   )r#   r   )rr   r   r   r   r    r   (  s    z$base_knobs.scope.<locals>.<dictcomp>)	r   valuesdictrB   clearr   r   r*   r+   )r8   initial_envorigr   r   r   r   r    scope%  s.   




zbase_knobs.scopeN)r'   r   )r'   r   )r8   r   r'   r   )r'   r   )
r   r   r   r   r   r   r   r   r   r   r   r   r   r    r     s    

c                   @  s   e Zd Zdd
dZdS )	BuildImplr=   r$   r   srcdirlibrary_dirs	list[str]include_dirs	librariesr'   c                C  r   r)   r   )r8   r=   r   r   r   r   r   r   r   r    r   8  r   zBuildImpl.__call__N)r=   r$   r   r$   r   r$   r   r   r   r   r   r   r'   r$   r   r   r   r   r    r   6  r   r   c                   @  s\   e Zd ZU dZedZded< edZded< edZded< d	Z	d
ed< e
dddZd	S )build_knobsz<Configuration controlling how the native compiler is invokedCCr   ccTRITON_CUDACRT_PATHcudacrt_pathTRITON_CUDART_PATHcudart_pathNzOptional[BuildImpl]implr'   set[str]c                 C  s   dd | j | jfD S )Nc                 S  s   h | ]}|d ur|qS r)   r   )rr   r   r   r   r    	<setcomp>H  r   z+build_knobs.backend_dirs.<locals>.<setcomp>)r   r   rI   r   r   r    backend_dirsF  s   zbuild_knobs.backend_dirs)r'   r   )r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r    r   =  s   
 r   c                   @  sD   e Zd ZU eddZded< eddZded< edd	Zd
ed< dS )redis_knobsTRITON_REDIS_KEY_FORMATztriton:{key}:{filename}rQ   
key_formatTRITON_REDIS_HOST	localhosthostTRITON_REDIS_PORTi  rg   portN)	r   r   r   rQ   r   r   r   rg   r   r   r   r   r    r   K  s   
 r   cache_knobscachec                   @  s   e Zd ZU edejdZded< e	ddd Z
e	dd	d Ze	d
dd ZeddZded< eddZded< dddZdS )r   TRITON_HOMEz~/rQ   home_dirTRITON_DUMP_DIRc                   C  
   t dS )Ndumpr   get_triton_dirr   r   r   r    <lambda>W     
 zcache_knobs.<lambda>TRITON_OVERRIDE_DIRc                   C  r   )Noverrider   r   r   r   r    r   X  r  TRITON_CACHE_DIRc                   C  r   )Nr   r   r   r   r   r    r   Y  r  TRITON_CACHE_MANAGERr   zenv_class[CacheManager]manager_classTRITON_REMOTE_CACHE_BACKENDr   zenv_class[RemoteCacheBackend]remote_manager_classr   r$   r'   c                 C  s   t j| jd|S )Nz.triton)r*   r   r   r   )r8   r   r   r   r    r   ^     zcache_knobs.get_triton_dirN)r   r$   r'   r$   )r   r   r   rQ   r*   r   
expanduserr   r   r`   dump_diroverride_dirdirrn   r  r  r   r   r   r   r    r   T  s   
 c                   @  s   e Zd ZU edZded< edZded< edZded< edZded	< e	d
Z
ded< edZded< edZded< edZded< edZded< edZded< dZded< dS )compilation_knobsTRITON_KERNEL_OVERRIDErd   r  TRITON_KERNEL_DUMPdump_irTRITON_STORE_BINARY_ONLYstore_binary_onlyTRITON_ALWAYS_COMPILEalways_compile
USE_IR_LOCr   
use_ir_locTRITON_ENABLE_ASANenable_asanTRITON_DISABLE_LINE_INFOdisable_line_infoTRITON_FRONT_END_DEBUGGINGfront_end_debugging"TRITON_ALLOW_NON_CONSTEXPR_GLOBALSallow_non_constexpr_globals!TRITON_ENABLE_EXPERIMENTAL_CONSANenable_experimental_consanNz Union[CompilationListener, None]listener)r   r   r   rd   r  r   r  r  r  r   r  r  r  r  r  r!  r"  r   r   r   r    r  b  s   
 r  c                   @  s.   e Zd ZU edZded< edZded< dS )autotuning_knobsTRITON_CACHE_AUTOTUNINGrd   r   TRITON_PRINT_AUTOTUNINGprintN)r   r   r   rd   r   r   r&  r   r   r   r    r#  q  s   
 r#  c                   @  s   e Zd ZdZd	ddZdS )

LaunchHookz3Hook invoked before and after kernel launching
    r   r   r'   r(   c                 C  r   r)   r   )r8   r   r   r   r    r   z  s   zLaunchHook.__call__N)r   r   r'   r(   r   r   r   r   r   r   r   r   r    r'  v  s    r'  c                   @  s   e Zd ZdZdddZdS )InitHandleHookz}Hook invoked around kernel binary/module loading.
    module/function can be None for the *start* hook (before loading).
    moduler@   functionOptional[Callable]r=   r$   r   r   hashr'   r(   c                 C  r   r)   r   )r8   r*  r+  r=   r   r-  r   r   r    r     s   zInitHandleHook.__call__N)r*  r@   r+  r,  r=   r$   r   r   r-  r$   r'   r(   r(  r   r   r   r    r)  ~  s    r)  Fc                   @  s8   e Zd ZdZddddZdddZdddZdd ZdS )	HookChainz?A chain of hooks of the same type F to be called in order.
    Freversedr!   c                 C  s   g | _ || _d S r)   )callsr0  )r8   r0  r   r   r    r9     s   
zHookChain.__init__funcr.  r'   r(   c                 C  s   || j vr| j | d S d S r)   )r1  appendr8   r2  r   r   r    add     
zHookChain.addc                 C  s   || j v r| j | d S d S r)   )r1  remover4  r   r   r    r7    r6  zHookChain.removec                 O  s.   | j s| jnt | jD ]	}||i | qd S r)   )r0  r1  )r8   argskwargscallr   r   r    r     s   zHookChain.__call__Nre   )r0  r!   )r2  r.  r'   r(   )r   r   r   r   r9   r5  r7  r   r   r   r   r    r/    s    

r/  c                   @  sv   e Zd ZU ded< ded< ded< ded< ded	< ded
< ded< ded< ded< ded< ded< ded< ded< dS )JITHookCompileInfor$   r#   zdict[KernelParam, str]	signaturer2   devicer(   	constants	num_warpsnum_ctas
num_stagesr!   enable_fp_fusionlaunch_cooperative_gridztuple[tuple[str, str], ...]extern_libsz-list[dict[tuple[int, ...], list[KernelAttr]]]configsspecialization_data	is_warmupN)r   r   r   r   r   r   r   r    r;    s   
 r;  c                   @  r   )JITHookr#   r$   reprfnr   compiler;  is_manual_warmupr!   already_compiledr'   Optional[bool]c                C  r   r)   r   )r8   r#   rI  rJ  rK  rL  rM  r   r   r    r     r   zJITHook.__call__N)r#   r$   rI  r$   rJ  r   rK  r;  rL  r!   rM  r!   r'   rN  r   r   r   r   r    rH    r   rH  c                   @  s   e Zd ZU edZded< ed Zded< edZ	ded	< e
 Zd
ed< e
ddZd
ed< e
 Zded< e
ddZded< dZded< dZded< dS )runtime_knobsTRITON_INTERPRETrd   	interpretTRITON_DEBUGr!   debugTRITON_OVERRIDE_ARCHr   override_archzHookChain[LaunchHook]launch_enter_hookT)r0  launch_exit_hookzHookChain[InitHandleHook]kernel_load_start_hookkernel_load_end_hookNzOptional[JITHook]jit_cache_hookjit_post_compile_hook)r   r   r   rd   rQ  r   rC   rS  r   rU  r/  rV  rW  rX  rY  rZ  r[  r   r   r   r    rO    s   
 rO  c                   @  s0   e Zd ZU edZded< eddZded< dS )	language_knobsTRITON_F32_DEFAULTr   fp32_defaultTRITON_DEFAULT_FP_FUSIONTrd   default_fp_fusionN)r   r   r   r   r^  r   rd   r`  r   r   r   r    r\    s   
 r\  c                   @  s   e Zd ZU edZded< edZded< edZded< edZ	ded< edZ
ded	< ed
Zded< edZded< edZded< edZded< dS )nvidia_knobs	cuobjdumpr   nvdisasmptxasNVPTX_ENABLE_DUMPrd   
dump_nvptxDISABLE_PTXAS_OPTdisable_ptxas_optTRITON_MOCK_PTX_VERSIONr   mock_ptx_versionTRITON_DUMP_PTXAS_LOGdump_ptxas_logTRITON_LIBDEVICE_PATHlibdevice_pathTRITON_LIBCUDA_PATHlibcuda_pathN)r   r   r   r   rb  r   rc  rd  rd   rf  rh  r   rj  rl  rn  rp  r   r   r   r    ra    s   
 ra  c                   @  s   e Zd ZU edZded< eddZded< edZded< ed	Z	d
ed< e
dZded< e
dZded< edZded< edZded< edZded< edZded< dS )	amd_knobsAMDGCN_USE_BUFFER_OPSrd   use_buffer_opsAMDGCN_USE_BUFFER_ATOMICSTuse_buffer_atomicsAMDGCN_ENABLE_DUMPdump_amdgcnTRITON_LIBHIP_PATHr   libhip_pathTRITON_HIP_USE_BLOCK_PINGPONGr   use_block_pingpong"TRITON_HIP_USE_IN_THREAD_TRANSPOSEuse_in_thread_transposeTRITON_HIP_GLOBAL_PREFETCHrg   global_prefetchTRITON_HIP_LOCAL_PREFETCHlocal_prefetchTRITON_HIP_USE_ASYNC_COPYuse_async_copyAMDGCN_SCALARIZE_PACKED_FOPSscalarize_packed_fopsN)r   r   r   rd   rs  r   ru  rw  r   ry  r   r{  r}  rg   r  r  r  r  r   r   r   r    rq    s   
 rq  c                   @  s   e Zd ZU edZded< dS )proton_knobsTRITON_CUPTI_LIB_PATHr   	cupti_dirN)r   r   r   r   r  r   r   r   r   r    r    s   
 r  c                   C  s   t d t_d S )NrR  )rd   rC   runtimerS  r   r   r   r    refresh_knobs	  r	  r  )r#   r$   r%   r&   r'   r(   )r-   r   r'   r.   )`
__future__r   r   ry   r*   r   r   r   dataclassesr   
contextlibr   typingr   r   r   r   r	   r
   r   r   r   r   r   r   triton._C.libtritonr   r   runtime.cacher   r   runtime.jitr   r   compiler.compilerr   r   r   r   envr"   r   r,   r4   r5   r6   rJ   rD   r7   r$   rQ   r`   r!   rd   r2   rg   rm   rn   r   r   r   r   r   r   r   r   r   r   r   r   r  r#  r'  r)  r.  r/  list
KernelAttrr;  rH  rO  r\  ra  rq  r  buildredisr   compilation
autotuningr  languager   amdprotonr  r   r   r   r    <module>   s    8


"

. *