a
    gh8                     @  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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 erd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< dddddZ&ddddddZ'dddddZ(edZ)edZ*G dd  d ee)e*f Z+G d!d" d"e+e,e,f Z-G d#d$ d$e+e.e.f Z/G d%d& d&e+e0e0f Z1G d'd( d(ee*e)f e+ee* ee) f Z2ed)Z3G d*d+ d+ee3 e2ee3 ee3 f Z4eG d,d- d-Z5G d.d/ d/e+e,e5f Z6G d0d1 d1e2e,e,f e-Z7G d2d3 d3e2e.e.f e/Z8edd4G d5d6 d6Z9G d7d8 d8eZ:ed9d:d;Z;G d<d: d:Z<G d=d> d>eZ=G d?d@ d@e<Z>G dAdB dBe<Z?dCe%dD< G dEdC dCe<Z@G dFdG dGe<ZAG dHdI dIe<ZBG dJdK dKeZCeDee,e0f  ZEG dLdM dMeZFG dNdO dOeZGG dPdQ dQe<ZHG dRdS dSe<ZIG dTdU dUe<ZJG dVdW dWe<ZKG dXdY dYe<ZLe> ZMe? ZNe@ ZOeA ZPeB ZQeH ZReI ZSeJ ZTeK ZUeL ZVdS )Z    )annotationsN)	dataclass)contextmanager)castAnyCallable	GeneratorGenericOptionalProtocolTypeTypeVar	TypedDictTYPE_CHECKINGUnion   )CacheManagerRemoteCacheBackend)JitFunctionInfoKernelParam)	ASTSourceLazyDictIRSourcec                   @  s   e Zd ZdS )EnvN__name__
__module____qualname__ r   r   :/var/www/auris/lib/python3.9/site-packages/triton/knobs.pyr      s   r   Tboolpropagate_envstrzOptional[str]keyreturnc                 C  s   t | }|d ur| S |S N)osgetenvstrip)r$   resr   r   r   r(      s    
r(   None)r$   valuer%   c                 C  s2   t sd S |d ur|tj| < n| tjv r.tj| = d S r&   )r!   r'   environ)r$   r,   r   r   r   setenv!   s    
r.   r   z!Union[None, tuple[Optional[str]]]valr%   c                 C  sN   | d u rdS t | }|tu r*| r$dndfS |tu r8| fS |tu rJt| fS d S )Nr&   10)typer    r"   int)r0   tr   r   r   toenv+   s    
r6   SetTypeGetTypec                   @  s   e Zd ZddddddZddddd	d
ZddddddZeddddZddddZddddddZ	dddddZ
ddd d!d"Zddd d#d$Zd%S )&env_baser"   z%Union[SetType, Callable[[], SetType]]r+   r$   defaultr%   c                   s$   || _ t r n
 fdd| _d S )Nc                     s    S r&   r   r   r;   r   r   <lambda>F       z#env_base.__init__.<locals>.<lambda>)r$   callabler;   selfr$   r;   r   r<   r   __init__D   s    zenv_base.__init__zType[object])objclassnamer%   c                 C  s
   || _ d S r&   )rD   )rA   rC   rD   r   r   r   __set_name__H   s    zenv_base.__set_name__zOptional[object]zOptional[Type[object]]r8   )objrC   r%   c                 C  sF   |d u rt dt|  d| j|jv r:| |j| j S |  S d S )NzCannot access z on non-instance)AttributeErrorr3   rD   __dict__	transformget)rA   rF   rC   r   r   r   __get__K   s
    zenv_base.__get__z
str | Noner%   c                 C  s
   t | jS r&   )r(   r$   rA   r   r   r   env_valT   s    zenv_base.env_valc                 C  s&   | j }| |d u r|  n| |S r&   )rN   rI   r;   from_env)rA   envr   r   r   rJ   X   s    zenv_base.getobjectzUnion[SetType, Env])rF   r,   r%   c                 C  sH   t |tr|j| jd  n(||j| j< t| }rDt| j|d  d S )Nr   )
isinstancer   rH   poprD   r6   r.   r$   )rA   rF   r,   rN   r   r   r   __set__\   s
    
zenv_base.__set__)rF   r%   c                 C  s   |j | jd  d S r&   )rH   rS   rD   )rA   rF   r   r   r   
__delete__d   s    zenv_base.__delete__r7   r/   c                 C  s
   t t|S r&   )r   r8   rA   r0   r   r   r   rI   g   s    zenv_base.transformc                 C  s
   t  d S r&   )NotImplementedErrorrV   r   r   r   rO   l   s    zenv_base.from_envN)r   r   r   rB   rE   rK   propertyrN   rJ   rT   rU   rI   rO   r   r   r   r   r9   B   s   	r9   c                   @  s   e Zd ZdddddZdS )env_strr"   r/   c                 C  s   |S r&   r   rV   r   r   r   rO   r   s    zenv_str.from_envN)r   r   r   rO   r   r   r   r   rY   p   s   rY   c                      s8   e Zd Zddddd fddZddd	d
dZ  ZS )env_boolFr"   zUnion[bool, Callable[[], bool]]r+   r:   c                   s   t  || d S r&   superrB   r@   	__class__r   r   rB   x   s    zenv_bool.__init__r    r/   c                 C  s   |  dv S )N)r1   trueyesony)lowerrV   r   r   r   rO   {   s    zenv_bool.from_env)Fr   r   r   rB   rO   __classcell__r   r   r]   r   rZ   v   s   rZ   c                      s8   e Zd Zddddd fddZddd	d
dZ  ZS )env_intr   r"   zUnion[int, Callable[[], int]]r+   r:   c                   s   t  || d S r&   r[   r@   r]   r   r   rB      s    zenv_int.__init__r4   r/   c              
   C  sN   z
t |W S  tyH } z&td| j d| d|W Y d }~n
d }~0 0 d S )NzUnable to use =z: expected int)r4   
ValueErrorRuntimeErrorr$   )rA   r0   excr   r   r   rO      s    
zenv_int.from_env)r   rd   r   r   r]   r   rf      s   rf   c                      s$   e Zd Zddd fddZ  ZS )env_opt_baser"   r+   r#   c                   s   t  |d  d S r&   r[   )rA   r$   r]   r   r   rB      s    zenv_opt_base.__init__)r   r   r   rB   re   r   r   r]   r   rk      s   rk   	ClassTypec                      s6   e Zd Zdddd fddZddddd	Z  ZS )
	env_classr"   r+   )r$   r3   r%   c                   s   t  | || _d S r&   )r\   rB   r3   )rA   r$   r3   r]   r   r   rB      s    zenv_class.__init__zType[ClassType]r/   c                   s   | dd}t|dkr0td j d| dtt|d |d }t fdd	| D st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   r3   ).0crM   r   r   	<genexpr>   r>   z%env_class.from_env.<locals>.<genexpr>zUnable to use 'z' from z: not of type '')splitlenri   r$   getattr	importlibimport_moduleanymror3   r   r   rl   )rA   r0   compsclsr   rM   r   rO      s     zenv_class.from_envrd   r   r   r]   r   rm      s   rm   c                   @  s2   e Zd ZU ded< ded< edddddZdS )	
NvidiaToolr"   pathversionzOptional[NvidiaTool]r~   r%   c                 C  sv   zZt j| dgt jd}|d u r$W d S tjd|dtjd}|d u rJW d S t| |dW S  t j	yp   Y d S 0 d S )Nz	--version)stderrz.*release (\d+\.\d+).*zutf-8)flagsr   )

subprocesscheck_outputSTDOUTresearchdecode	MULTILINEr}   groupCalledProcessError)r~   resultr   r   r   r   	from_path   s    zNvidiaTool.from_pathN)r   r   r   __annotations__staticmethodr   r   r   r   r   r}      s   
r}   c                      sD   e Zd Zddd fddZddddd	Zddd
ddZ  ZS )env_nvidia_toolr"   r+   )binaryr%   c                   s:   |t d7 }| _t d|  d fdd d S )NEXEZTRITON_Z_PATHc                     s   t jt jtddd jS )Nbackendsnvidiabin)r'   r~   joindirname__file__r   r   rM   r   r   r=      s   
z*env_nvidia_tool.__init__.<locals>.<lambda>)	sysconfigget_config_varr   r\   rB   upper)rA   r   r]   rM   r   rB      s    zenv_nvidia_tool.__init__r}   r   c                 C  sT   ||   g}|D ].}|rt|tjs(qt| }r|  S qtd| j d S )NzCannot find )r;   r'   accessX_OKr}   r   ri   r   )rA   r~   pathsZtoolr   r   r   rI      s    
zenv_nvidia_tool.transformr/   c                 C  s   |S r&   r   rV   r   r   r   rO      s    zenv_nvidia_tool.from_env)r   r   r   rB   rI   rO   re   r   r   r]   r   r      s   r   c                   @  s   e Zd ZdS )env_opt_strNr   r   r   r   r   r      s   r   c                   @  s   e Zd ZdS )env_opt_boolNr   r   r   r   r   r      s   r   )frozenc                   @  sN   e Zd ZU dZded< ded< ded< edddd	Zeddd
dZdS )CompileTimeszm
    Model holding timing information for an invocation of the compiler.

    All times in microseconds.
    r4   ir_initializationzlist[tuple[str, int]]lowering_stagesstore_resultsrL   c                 C  s   t dd | jD S )Nc                 s  s   | ]}|d  V  qdS )r   Nr   )rp   Zstager   r   r   rr      r>   z.CompileTimes.total_lowering.<locals>.<genexpr>)sumr   rM   r   r   r   total_lowering   s    zCompileTimes.total_loweringc                 C  s   | j | j | j S r&   )r   r   r   rM   r   r   r   total   s    zCompileTimes.totalN)r   r   r   __doc__r   rX   r   r   r   r   r   r   r      s   
r   c                   @  s$   e Zd Zddddddddd	Zd
S )CompilationListenerzUnion[ASTSource, IRSource]dict[str, Any]zdict[str, str]r   r    r+   )srcmetadatametadata_grouptimes	cache_hitr%   c                C  s   d S r&   r   )rA   r   r   r   r   r   r   r   r   __call__   s    zCompilationListener.__call__Nr   r   r   r   r   r   r   r   r      s   r   
knobs_type
base_knobs)boundc                   @  sb   e Zd ZeddddZeddddZddd	d
dZddd	ddZeddddZ	dS )r   zdict[str, env_base]rL   c                 C  s   dd t | j D S )Nc                 S  s    i | ]\}}t |tr||qS r   )rR   r9   )rp   kvr   r   r   
<dictcomp>  s   
z/base_knobs.knob_descriptors.<locals>.<dictcomp>)r3   rH   itemsrM   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   )rv   )rp   r   rM   r   r   r     r>   z$base_knobs.knobs.<locals>.<dictcomp>)r   keysrM   r   rM   r   knobs  s    zbase_knobs.knobsr   )rA   r%   c                 C  s   t |  }|j| j |S r&   )r3   rH   update)rA   r*   r   r   r   copy  s    
zbase_knobs.copyc                 C  s   | j  D ]}t| | q
| S r&   )r   r   delattr)rA   knobr   r   r   reset  s    zbase_knobs.resetzGenerator[None, None, None]c              
   c  s   zvdd | j  D }t| j}d V  W | j  | j| | D ].\}}|d urb|tj|< qF|tjv rFtj|= qFnP| j  | j| | D ].\}}|d ur|tj|< q|tjv rtj|= q0 d S )Nc                 S  s   i | ]}|j |jqS r   )r$   rN   )rp   r   r   r   r   r   $  r>   z$base_knobs.scope.<locals>.<dictcomp>)	r   valuesdictrH   clearr   r   r'   r-   )rA   Zinitial_envorigr   r   r   r   r   scope!  s$    




zbase_knobs.scopeN)
r   r   r   rX   r   r   r   r   r   r   r   r   r   r   r     s   c                   @  s&   e Zd ZddddddddddZdS )	BuildImplr"   z	list[str])rD   r   srcdirlibrary_dirsinclude_dirs	librariesr%   c                C  s   d S r&   r   )rA   rD   r   r   r   r   r   r   r   r   r   4  s    zBuildImpl.__call__Nr   r   r   r   r   r   2  s   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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]implzset[str]rL   c                 C  s   dd | j | jfD S )Nc                 S  s   h | ]}|d ur|qS r&   r   )rp   r~   r   r   r   	<setcomp>D  r>   z+build_knobs.backend_dirs.<locals>.<setcomp>)r   r   rM   r   r   r   backend_dirsB  s    zbuild_knobs.backend_dirs)r   r   r   r   r   r   r   r   r   r   rX   r   r   r   r   r   r   9  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}rY   
key_formatZTRITON_REDIS_HOST	localhosthostZTRITON_REDIS_PORTi  rf   portN)	r   r   r   rY   r   r   r   rf   r   r   r   r   r   r   G  s   
r   cache_knobscachec                   @  s   e Zd ZU eddd Zded< eddd Zded< ed	d
d Zded< eddd Zded< e	ddZ
ded< e	ddZded< dddddZdS )r   ZTRITON_HOMEc                   C  s   t jdS )Nz~/)r'   r~   
expanduserr   r   r   r   r=   Q  r>   zcache_knobs.<lambda>rY   home_dirZTRITON_DUMP_DIRc                   C  s
   t dS )Ndumpr   get_triton_dirr   r   r   r   r=   S  r>   dump_dirZTRITON_OVERRIDE_DIRc                   C  s
   t dS )Noverrider   r   r   r   r   r=   T  r>   override_dirZTRITON_CACHE_DIRc                   C  s
   t dS )Nr   r   r   r   r   r   r=   U  r>   dirZ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   )rA   r   r   r   r   r   Z  s    zcache_knobs.get_triton_dirN)r   r   r   rY   r   r   r   r   r   rm   r   r   r   r   r   r   r   r   P  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< dZded< dS )compilation_knobsZTRITON_KERNEL_OVERRIDErZ   r   ZTRITON_KERNEL_DUMPdump_irZ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_globalsNz Union[CompilationListener, None]listener)r   r   r   rZ   r   r   r   r   r   r   r   r   r   r   r   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< dS )autotuning_knobsZTRITON_CACHE_AUTOTUNINGrZ   r   ZTRITON_PRINT_AUTOTUNINGprintN)r   r   r   rZ   r   r   r   r   r   r   r   r   l  s   
r   c                   @  s   e Zd ZdddddZdS )
LaunchHookr   r+   )r   r%   c                 C  s   d S r&   r   )rA   r   r   r   r   r   s  s    zLaunchHook.__call__Nr   r   r   r   r   r   q  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]	signaturer4   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                   @  s&   e Zd ZddddddddddZd	S )
JITHookr"   r   r   r    zOptional[bool])r$   reprfncompileis_manual_warmupalready_compiledr%   c                C  s   d S r&   r   )rA   r$   r   r   r   r   r   r   r   r   r     s    zJITHook.__call__Nr   r   r   r   r   r     s   r   c                   @  sn   e Zd ZU edZded< edZded< edZ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_INTERPRETrZ   	interpretZTRITON_DEBUGdebugZTRITON_OVERRIDE_ARCHr   override_archNzOptional[LaunchHook]launch_enter_hooklaunch_exit_hookzOptional[JITHook]jit_cache_hookjit_post_compile_hook)r   r   r   rZ   r   r   r   r   r   r   r  r  r  r   r   r   r   r     s   
r   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_FUSIONTrZ   default_fp_fusionN)r   r   r   r   r  r   rZ   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< dS )nvidia_knobs	cuobjdumpr   nvdisasmptxasZNVPTX_ENABLE_DUMPrZ   
dump_nvptxZDISABLE_PTXAS_OPTdisable_ptxas_optZTRITON_MOCK_PTX_VERSIONr   mock_ptx_versionZTRITON_LIBDEVICE_PATHlibdevice_pathZTRITON_LIBCUDA_PATHlibcuda_pathN)r   r   r   r   r  r   r	  r
  rZ   r  r  r   r  r  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< dS )	amd_knobsZAMDGCN_USE_BUFFER_OPSrZ   use_buffer_opsZAMDGCN_ENABLE_DUMPdump_amdgcnZTRITON_LIBHIP_PATHr   libhip_pathZTRITON_HIP_LLD_PATHlld_pathZTRITON_HIP_USE_BLOCK_PINGPONGr   use_block_pingpongZ"TRITON_HIP_USE_IN_THREAD_TRANSPOSEuse_in_thread_transposeZTRITON_HIP_GLOBAL_PREFETCHrf   global_prefetchZTRITON_HIP_LOCAL_PREFETCHlocal_prefetchZTRITON_HIP_USE_ASYNC_COPYuse_async_copyZAMDGCN_SCALARIZE_PACKED_FOPSscalarize_packed_fopsN)r   r   r   rZ   r  r   r  r   r  r  r   r  r  rf   r  r  r  r  r   r   r   r   r    s   
r  c                   @  s   e Zd ZU edZded< dS )proton_knobsZTRITON_CUPTI_LIB_PATHr   	cupti_dirN)r   r   r   r   r  r   r   r   r   r   r    s   
r  )W
__future__r   rw   r'   r   r   r   Zdataclassesr   
contextlibr   typingr   r   r   r   r	   r
   r   r   r   r   r   r   Zruntime.cacher   r   Zruntime.jitr   r   Zcompiler.compilerr   r   r   r   rP   r!   r   r(   r.   r6   r7   r8   r9   r"   rY   r    rZ   r4   rf   rk   rl   rm   r}   r   r   r   r   r   r   r   r   r   r   r   r   r   r   listZ
KernelAttrr   r   r   r  r  r  r  buildZredisr   ZcompilationZ
autotuningZruntimelanguager   ZamdZprotonr   r   r   r   <module>   s~   8
.	*&!*