a
    öDf&                     @   s  U 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Zd dlm	Z	 ddl
mZ ejejejeZdZG dd dZi Ze	eef ed< eed	d
dZedddZedddZe  dd Ze  dd Ze  dd Ze  dd Zdadd Z dS )    N)Dict   )
DriverBasez2.3.0c                   @   s   e Zd ZeddddZdd Zdd Zd	d
 ZedddZ	dd Z
dd Zdd Zdd Zdd Zdd Zdd ZeedddZdS )BaseBackendN)device_typereturnc                 C   s
   || _ d S Nr   )selfr    r   b/nfs/NAS7/SABIOD/METHODE/ermites/ermites_venv/lib/python3.9/site-packages/triton/common/backend.py__init__   s    zBaseBackend.__init__c                 C   s   t dS )zZ
        Custom the arch, extern_libs and stages per backend specific requirement
        NNotImplementedError)r
   archZextern_libsZstagesr   r   r   
add_stages   s    zBaseBackend.add_stagesc                 C   s   t dS )zZ
        Custom the ir, module, metadata and asm per backend specific requirement
        Nr   )r
   ZirZ
cur_moduleZnext_modulemetadataZasmr   r   r   add_meta_info   s    zBaseBackend.add_meta_infoc                 C   s   t dS )z2
        Return a callable to load binary
        Nr   r
   r   r   r   get_load_binary_fn"   s    zBaseBackend.get_load_binary_fn)r   c                 C   s   t dS )zW
        Get the backend driver. Please refer to "DriverBase" for more details
        Nr   r   r   r   r   
get_driver(   s    zBaseBackend.get_driverc                 C   s   t dS )z/
        Get stream for current device
        Nr   r   r   r   r   
get_stream.   s    zBaseBackend.get_streamc                 C   s   t d S r   r   r
   Zdevicer   r   r   get_device_properties4   s    z!BaseBackend.get_device_propertiesc                 C   s   t dS )z$
        Get current device
        Nr   r   r   r   r   get_current_device7   s    zBaseBackend.get_current_devicec                 C   s   t dS )z8
        Set current device as the given device
        Nr   r   r   r   r   set_current_device=   s    zBaseBackend.set_current_devicec                 C   s   t d S r   r   r   r   r   r   get_kernel_binC   s    zBaseBackend.get_kernel_binc                 C   s   t dS )zA
        Generate the launcher stub to launch the kernel
        Nr   )r
   name	signature	constantsr   r   r   make_launcher_stubF   s    zBaseBackend.make_launcher_stubc                 K   s   t dS )z=
        Get the architecture descriptor the backend
        Nr   )r
   kwargsr   r   r   get_architecture_descriptorL   s    z'BaseBackend.get_architecture_descriptorr	   c                 C   s   | |S r   r   )clsr   r   r   r   create_backendR   s    zBaseBackend.create_backend)__name__
__module____qualname__strr   r   r   r   r   r   r   r   r   r   r   r    r"   classmethodr$   r   r   r   r   r      s   r   	_backendsr   Zbackend_clsc                 C   s   | t vr|| t | < d S r   )r*   r$   r+   r   r   r   register_backendZ   s    r,   r	   c                 C   sn   | t vrZd|  }tjj|tjdrVztj|tjd W qZ tyR   t	  Y qZ0 nd S | t v rjt |  S d S )Nz...third_party.)package)
r*   	importlibutil	find_spec__spec__r   import_module	Exception	traceback	print_exc)r   Zdevice_backend_package_namer   r   r   get_backend_   s    
r6   )binaryc                 C   s   t jt jtt j}t jd|   ddt j|ddd| g}|D ]x}|	dd }t j
|rJt j|rJtj|d	gtjd
}|d urJtjd|dtjd}|d urJ||df  S qJtd|  d S )NZTRITON_Z_PATH Zthird_partyZcudabin r   	--version)stderrz.*release (\d+\.\d+).*zutf-8)flags   zCannot find )ospathjoindirname__file__pardirenvirongetuppersplitexistsisfile
subprocesscheck_outputSTDOUTresearchdecode	MULTILINEgroupRuntimeError)r7   base_dirpathspr9   resultversionr   r   r   _path_to_binaryl   s    rY   c                   C   s   t dS )NptxasrY   r   r   r   r   path_to_ptxas~   s    r\   c                   C   s   t dS )NZ	cuobjdumpr[   r   r   r   r   path_to_cuobjdump   s    r]   c                   C   s   t dS )NZnvdisasmr[   r   r   r   r   path_to_nvdisasm   s    r^   c               	   C   s  dd l } g }ttd(}|t|  g7 }W d    n1 sD0    Y  tj	t
d}| |gD ]R}t|j|jjd(}|t|  g7 }W d    qh1 s0    Y  qht }ttj	t
dd,}|d}|sq|| qW d    n1 s0    Y  ||  tj	t
d}| |gD ]V}t|j|jjd(}|t|  g7 }W d    n1 s0    Y  q>d	td	| S )Nr   rbcompilerz_C/libtriton.soi   language-)pkgutilopenrC   hashlibsha1read	hexdigestr?   r@   rA   TRITON_PATHiter_modulesmodule_finderr0   r   originupdateappendTRITON_VERSION)rc   contentsfZcompiler_pathlibZlibtriton_hashchunkZlanguage_pathr   r   r   compute_core_version_key   s(    68
,<rt   c                  C   s\   t d u rXt } zt d }t|dg}W n ty@   d}Y n0 | d t|  a t S )Nr   r;   s   NO_PTXASrb   )	_cached_cuda_version_keyrt   r\   rK   rL   rS   re   rf   rh   )keyrZ   Zptxas_versionr   r   r   get_cuda_version_key   s    

rw   )!	functoolsre   r.   importlib.utilr?   rN   rK   r4   typingr   Zruntime.driverr   r@   rB   abspathrC   ri   ro   r   r*   r(   __annotations__typer,   r6   rY   	lru_cacher\   r]   r^   rt   ru   rw   r   r   r   r   <module>   s4   
F



