o
    n0jnC                  	   @  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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rod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< dcddZ+ddddZ,edZ-edZ.e/ Z0G dd  d ee-e.f Z1G d!d" d"e1e2e2f Z3G d#d$ d$e1e2e2f Z4G d%d& d&e1e5e5f Z6G d'd( d(e1e7e7f Z8ed)Z9G d*d+ d+ee9 e1eee9  eee9  f Z:e
G d,d- d-Z;G d.d/ d/e1e2e;f Z<G d0d1 d1e1ee2 ee2 f Z=G d2d3 d3e1Z>e
dd4G d5d6 d6Z?G d7d8 d8eZ@ed9d:d;ZAG d<d: d:ZBG d=d> d>eZCG d?d@ d@eBZDG dAdB dBeBZEdCe*dD< G dEdC dCeBZFG dFdG dGeBZGG dHdI dIeBZHG dJdK dKeZIG dLdM dMeZJedNed;ZKG dOdP dPeeK ZLeMee2e7f  ZNG dQdR dReZOG dSdT dTeZPG dUdV dVeZQG dWdX dXeBZRG dYdZ dZeBZSG d[d\ d\eBZTG d]d^ d^eBZUG d_d` d`eBZVeD ZWeE ZXeF ZYeG ZZeH Z[eR Z\eS Z]eT Z^eU Z_eV Z`dadb ZadS )e    )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   S/home/wildlama/miniconda3/envs/lam_a2e/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__E      
zenv_base.__init__objclassType[object]namec                 C  s
   || _ d S r)   )r=   )r8   r;   r=   r   r   r    __set_name__H   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;   Zpy_valr   r   r    __get__K   s   
zenv_base.__get__c                 C  s   t  r)   )NotImplementedErrorr8   r   r   r    rC   Q   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__T   s   
zenv_base.__set__c                 C  s   |j | jd  d S r)   )rB   rL   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?   rI   r%   rJ   r'   r(   )r?   rI   r'   r(   )r-   r5   r'   r6   )
r   r   r   r9   r>   rF   rC   rN   rO   rE   r   r   r   r    r7   C   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   rQ   r8   r#   rQ   	__class__r   r    r9   g      
zenv_str.__init__r'   c                 C     t | j| jS r)   )r   r#   rQ   rH   r   r   r    rC   k      zenv_str.get)r#   r$   rQ   r$   r'   r$   r   r   r   r9   rC   __classcell__r   r   rV   r    rP   e       rP   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                   rR   r)   )rT   r9   r`   )r8   r#   r`   rV   r   r    r9   q   rX   z!env_str_callable_default.__init__r'   c                 C  s   t | j}|d u r|  S |S r)   )r   r#   r`   )r8   rM   r   r   r    rC   u   s   
zenv_str_callable_default.get)r#   r$   r`   ra   r[   r\   r   r   rV   r    r_   o   r^   r_   c                      *   e Zd Zdd fdd	Zdd
dZ  ZS )env_boolFr#   r$   rQ   r!   r'   r(   c                   rR   r)   rS   rU   rV   r   r    r9   ~   rX   zenv_bool.__init__c                 C  rY   r)   )r   r#   rQ   rH   r   r   r    rC      rZ   zenv_bool.getF)r#   r$   rQ   r!   r'   r(   )r'   r!   r\   r   r   rV   r    rc   |       rc   c                      rb   )env_intr   r#   r$   rQ   r2   r'   r(   c                   rR   r)   rS   rU   rV   r   r    r9      rX   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#   rQ   r2   
ValueErrorRuntimeError)r8   r-   excr   r   r    rC      s   

zenv_int.get)r   )r#   r$   rQ   r2   r'   r(   r'   r2   r\   r   r   rV   r    rf      re   rf   	ClassTypec                      s(   e Zd Zd fddZdd	d
Z  ZS )	env_classr#   r$   r1   r'   r(   c                   rR   r)   )rT   r9   r1   )r8   r#   r1   rV   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crH   r   r    	<genexpr>   s    z env_class.get.<locals>.<genexpr>zUnable to use 'z' from z: not of type '')r   r#   splitlenri   getattr	importlibimport_moduleanymror1   r   r   rl   )r8   r-   compsclsr   rH   r    rC      s   
 zenv_class.get)r#   r$   r1   r$   r'   r(   )r'   rn   r\   r   r   rV   r    rm      s    rm   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                   sV   |t d7 }|| _tjtjtddd|| _t	 
d| dd d d S )	NEXEbackendsnvidiabinZTRITON_-_Z_PATH)	sysconfigget_config_varr   r*   r   joindirname__file__default_pathrT   r9   upperreplace)r8   r   rV   r   r    r9      s   $zenv_nvidia_tool.__init__r~   c                 C  s   |  t| jS r)   )rE   r   r#   rH   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   ri   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   rV   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#   rH   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#   rH   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   )rq   Zstager   r   r    rs      s    z.CompileTimes.total_lowering.<locals>.<genexpr>)sumr   rH   r   r   r    total_lowering   s   zCompileTimes.total_loweringc                 C  s   | j | j | j S r)   )r   r   r   rH   r   r   r    total   s   zCompileTimes.totalNrk   )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   )rK   r7   )rq   kvr   r   r    
<dictcomp>  s    z/base_knobs.knob_descriptors.<locals>.<dictcomp>)r1   rB   itemsrH   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   )rw   )rq   r   rH   r   r    r         z$base_knobs.knobs.<locals>.<dictcomp>)r   keysrH   r   rH   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   )rq   r   r   r   r    r   *  s    z$base_knobs.scope.<locals>.<dictcomp>)	r   valuesdictrB   clearr   r   r*   r+   )r8   Z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   :  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   8  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   ccZTRITON_CUDACRT_PATHcudacrt_pathZ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   )rq   r   r   r   r    	<setcomp>J  r   z+build_knobs.backend_dirs.<locals>.<setcomp>)r   r   rH   r   r   r    backend_dirsH  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_knobsZTRITON_REDIS_KEY_FORMATztriton:{key}:{filename}rP   
key_formatZTRITON_REDIS_HOST	localhosthostZTRITON_REDIS_PORTi  rf   portN)	r   r   r   rP   r   r   r   rf   r   r   r   r   r    r   M  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   ZTRITON_HOMEz~/rP   home_dirZTRITON_DUMP_DIRc                   C  
   t dS )Ndumpr   get_triton_dirr   r   r   r    <lambda>Y     
 zcache_knobs.<lambda>ZTRITON_OVERRIDE_DIRc                   C  r   )Noverrider   r   r   r   r    r   Z  r   ZTRITON_CACHE_DIRc                   C  r   )Nr   r   r   r   r   r    r   [  r   ZTRITON_CACHE_MANAGERr   zenv_class[CacheManager]manager_classZ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   `  s   zcache_knobs.get_triton_dirN)r   r$   r'   r$   )r   r   r   rP   r*   r   
expanduserr   r   r_   Zdump_dirZoverride_dirdirrm   r   r   r   r   r   r   r    r   V  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< edd Zded< dZded< dS )compilation_knobsZTRITON_KERNEL_OVERRIDErc   r   ZTRITON_KERNEL_DUMPdump_irZLLVM_EXTRACT_DI_LOCAL_VARIABLES"dump_ir_extract_di_local_variablesZTRITON_STORE_BINARY_ONLYstore_binary_onlyZTRITON_ALWAYS_COMPILEalways_compileZ
USE_IR_LOCr   
use_ir_locZTRITON_ENABLE_ASANenable_asanZTRITON_DISABLE_LINE_INFOdisable_line_infoZTRITON_FRONT_END_DEBUGGINGfront_end_debuggingZ"TRITON_ALLOW_NON_CONSTEXPR_GLOBALSallow_non_constexpr_globalsTRITON_INSTRUMENTATION_MODE r$   instrumentation_modeNz Union[CompilationListener, None]listener)r   r   r   rc   r   r   r   r   r  r  r   r  r  r  r  r  rP   rC   r
  r  r   r   r   r    r   d  s   
 r   c                   @  s.   e Zd ZU edZded< edZded< dS )autotuning_knobsZTRITON_CACHE_AUTOTUNINGrc   r   ZTRITON_PRINT_AUTOTUNINGprintN)r   r   r   rc   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 )

LaunchHookz3Hook invoked before and after kernel launching
    r   r   r'   r(   c                 C  r   r)   r   )r8   r   r   r   r    r        zLaunchHook.__call__N)r   r   r'   r(   r   r   r   r   r   r   r   r   r    r  {  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)   )callsr  )r8   r  r   r   r    r9     s   
zHookChain.__init__funcr  r'   r(   c                 C  s   || j vr| j | d S d S r)   )r  appendr8   r  r   r   r    add     
zHookChain.addc                 C  s   || j v r| j | d S d S r)   )r  remover  r   r   r    r    r  zHookChain.removec                 O  s.   | j s| jnt | jD ]	}||i | qd S r)   )r  r  )r8   argskwargscallr   r   r    r     s   zHookChain.__call__Nrd   )r  r!   )r  r  r'   r(   )r   r   r   r   r9   r  r  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   Zdevicer(   	constantsZ	num_warpsZnum_ctasZ
num_stagesr!   Zenable_fp_fusionZlaunch_cooperative_gridztuple[tuple[str, str], ...]Zextern_libsz-list[dict[tuple[int, ...], list[KernelAttr]]]ZconfigsZspecialization_dataZ	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#   r'  r(  r)  r*  r+  r   r   r    r     r   zJITHook.__call__N)r#   r$   r'  r$   r(  r   r)  r#  r*  r!   r+  r!   r'   r,  r   r   r   r   r    r&    r   r&  c                   @  s   e Zd Zdd ZdS )PipelineStagesHookc                 C  r   r)   r   )r8   ZstagesoptionslanguageZ
capabilityr   r   r    r     r  zPipelineStagesHook.__call__Nr   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
 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Zded< dS )runtime_knobsZTRITON_INTERPRETrc   	interpretTRITON_DEBUGr!   debugZTRITON_OVERRIDE_ARCHr   override_archzHookChain[LaunchHook]launch_enter_hookT)r  launch_exit_hookzHookChain[InitHandleHook]kernel_load_start_hookkernel_load_end_hookNzOptional[JITHook]jit_cache_hookjit_post_compile_hookzOptional[PipelineStagesHook]add_stages_inspection_hook)r   r   r   rc   r1  r   rC   r3  r   r4  r  r5  r6  r7  r8  r9  r:  r;  r   r   r   r    r0    s   
 r0  c                   @  s0   e Zd ZU edZded< eddZded< dS )	language_knobsZTRITON_F32_DEFAULTr   fp32_defaultZTRITON_DEFAULT_FP_FUSIONTrc   default_fp_fusionN)r   r   r   r   r=  r   rc   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< edZded< edZded< dS )nvidia_knobs	cuobjdumpr   nvdisasmptxaszptxas-blackwellptxas_blackwellZNVPTX_ENABLE_DUMPrc   
dump_nvptxZDISABLE_PTXAS_OPTdisable_ptxas_optZPTXAS_OPTIONSr   ptxas_optionsZTRITON_MOCK_PTX_VERSIONmock_ptx_versionZTRITON_DUMP_PTXAS_LOGdump_ptxas_logZTRITON_LIBDEVICE_PATHlibdevice_pathZTRITON_LIBCUDA_PATHlibcuda_pathN)r   r   r   r   r@  r   rA  rB  rC  rc   rD  rE  r   rF  rG  rH  rI  rJ  r   r   r   r    r?    s   
 r?  c                   @  s   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	< 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_knobsZAMDGCN_USE_BUFFER_OPSTrc   use_buffer_opsZAMDGCN_USE_BUFFER_ATOMICSuse_buffer_atomicsZ!AMDGCN_ANALYZE_SMALL_TENSOR_RANGEF%buffer_ops_analyze_small_tensor_rangeZAMDGCN_ENABLE_DUMPdump_amdgcnZTRITON_LIBHIP_PATHr   libhip_pathZTRITON_HIP_USE_BLOCK_PINGPONGr   use_block_pingpongZ"TRITON_HIP_USE_IN_THREAD_TRANSPOSEuse_in_thread_transposeZTRITON_HIP_USE_ASYNC_COPYuse_async_copyZAMDGCN_SCALARIZE_PACKED_FOPSscalarize_packed_fopsN)r   r   r   rc   rL  r   rM  rN  rO  r   rP  r   rQ  rR  rS  rT  r   r   r   r    rK    s   
 rK  c                   @  sd   e Zd ZU eddZded< edee	e
j d d d d	 Zd
ed< eddZded< dS )proton_knobsZTRITON_PROTON_DISABLEFrc   disableZTRITON_CUPTI_LIB_PATHr   r   libZcuptirP   cupti_lib_dirZTRITON_ENABLE_NVTXTenable_nvtxN)r   r   r   rc   rV  r   rP   r$   pathlibPathr   parentabsoluterX  rY  r   r   r   r    rU  	  s   
 "rU  c                   C  s"   t d t_tdd t_d S )Nr2  r  r	  )rc   rC   runtimer3  rP   compilationr
  r   r   r   r    refresh_knobs  s   r`  )r#   r$   r%   r&   r'   r(   )r-   r   r'   r.   )b
__future__r   r   rx   r*   r   r   r   rZ  dataclassesr   
contextlibr   typingr   r   r   r   r	   r
   r   r   r   r   r   r   Ztriton._C.libtritonr   r   Zruntime.cacher   r   Zruntime.jitr   r   Zcompiler.compilerr   r   r   r   envr"   r   r,   r4   r5   r6   rI   rD   r7   r$   rP   r_   r!   rc   r2   rf   rl   rm   r~   r   r   r   r   r   r   r   r   r   r   r   r   r  r  r  r  r  listZ
KernelAttrr#  r&  r-  r0  r<  r?  rK  rU  buildZredisr   r_  Z
autotuningr^  r/  r   ZamdZprotonr`  r   r   r   r    <module>   s    8


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