a
    ž
žd   ć                   @   s.  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 Z	d	d
 Z
dd Zdd Zdd Zdd Zdd Zdd Zdd Zdd Zdd Zdd Zdd  Zd!d" Zd#d$ Zd%d& Zd'd( Zd)d* Zd+d, Zd-d. Zd/d0 Zd1d2 Zd3d4d5d6d7d8d9d:d;d<d=d>d?d@dAZdBdC Z G dDdE dEe!Z"dFdG Z#dS )Hé    N)Śir)Ścgutilsé   )Śnvvm)Ścurrent_contextc                 C   sN   dt | d }t t |”t t |””t |”t |”f”}t | ||”S )NZ___numba_atomic_iZ	_cas_hack)Śstrr   ŚFunctionTypeŚIntTypeŚPointerTyper   Śget_or_insert_function)ŚlmodŚisizeŚfnameŚfnty© r   ś]/var/www/html/stable-diffusion-webui/venv/lib/python3.9/site-packages/numba/cuda/nvvmutils.pyŚdeclare_atomic_cas_int   s    ž’r   c                 C   sD   t  ” jr(|  |||dd”}|  |d”S |  t|||||f”S d S )NŚ	monotonicr   )r   ZNVVMZ	is_nvvm70ZcmpxchgZextract_valueŚcallr   )Śbuilderr   r   ŚptrŚcmpŚvalŚoutr   r   r   Śatomic_cmpxchg   s    
’r   c                 C   s6   d}t  t  ” t  t  ” d”t  ” f”}t | ||”S )Nz#llvm.nvvm.atomic.load.add.f32.p0f32r   ©r   r   Z	FloatTyper
   r   r   ©r   r   r   r   r   r   Śdeclare_atomic_add_float32   s
    
’r   c                 C   sH   t  jjdkrd}nd}t t ” t t ” ”t ” f”}t | ||”S )N)é   r   z#llvm.nvvm.atomic.load.add.f64.p0f64Z___numba_atomic_double_add)	r   ZdeviceZcompute_capabilityr   r   Ś
DoubleTyper
   r   r   r   r   r   r   Śdeclare_atomic_add_float64!   s    
’r    c                 C   s4   d}t  t  ” t  t  ” ”t  ” f”}t | ||”S )NZ___numba_atomic_float_subr   r   r   r   r   Śdeclare_atomic_sub_float32+   s
    
’r!   c                 C   s4   d}t  t  ” t  t  ” ”t  ” f”}t | ||”S )NZ___numba_atomic_double_sub©r   r   r   r
   r   r   r   r   r   r   Śdeclare_atomic_sub_float642   s
    
’r#   c                 C   s:   d}t  t  d”t  t  d””t  d”f”}t | ||”S )Nz"llvm.nvvm.atomic.load.inc.32.p0i32é    ©r   r   r	   r
   r   r   r   r   r   r   Śdeclare_atomic_inc_int329   s
    ’r&   c                 C   s:   d}t  t  d”t  t  d””t  d”f”}t | ||”S )NZ___numba_atomic_u64_incé@   r%   r   r   r   r   Śdeclare_atomic_inc_int64@   s
    ’r(   c                 C   s:   d}t  t  d”t  t  d””t  d”f”}t | ||”S )Nz"llvm.nvvm.atomic.load.dec.32.p0i32r$   r%   r   r   r   r   Śdeclare_atomic_dec_int32G   s
    ’r)   c                 C   s:   d}t  t  d”t  t  d””t  d”f”}t | ||”S )NZ___numba_atomic_u64_decr'   r%   r   r   r   r   Śdeclare_atomic_dec_int64N   s
    ’r*   c                 C   s4   d}t  t  ” t  t  ” ”t  ” f”}t | ||”S )NZ___numba_atomic_float_maxr   r   r   r   r   Śdeclare_atomic_max_float32U   s
    
’r+   c                 C   s4   d}t  t  ” t  t  ” ”t  ” f”}t | ||”S )NZ___numba_atomic_double_maxr"   r   r   r   r   Śdeclare_atomic_max_float64\   s
    
’r,   c                 C   s4   d}t  t  ” t  t  ” ”t  ” f”}t | ||”S )NZ___numba_atomic_float_minr   r   r   r   r   Śdeclare_atomic_min_float32c   s
    
’r-   c                 C   s4   d}t  t  ” t  t  ” ”t  ” f”}t | ||”S )NZ___numba_atomic_double_minr"   r   r   r   r   Śdeclare_atomic_min_float64j   s
    
’r.   c                 C   s4   d}t  t  ” t  t  ” ”t  ” f”}t | ||”S )NZ___numba_atomic_float_nanmaxr   r   r   r   r   Śdeclare_atomic_nanmax_float32q   s
    
’r/   c                 C   s4   d}t  t  ” t  t  ” ”t  ” f”}t | ||”S )NZ___numba_atomic_double_nanmaxr"   r   r   r   r   Śdeclare_atomic_nanmax_float64x   s
    
’r0   c                 C   s4   d}t  t  ” t  t  ” ”t  ” f”}t | ||”S )NZ___numba_atomic_float_nanminr   r   r   r   r   Śdeclare_atomic_nanmin_float32   s
    
’r1   c                 C   s4   d}t  t  ” t  t  ” ”t  ” f”}t | ||”S )NZ___numba_atomic_double_nanminr"   r   r   r   r   Śdeclare_atomic_nanmin_float64   s
    
’r2   c                 C   s,   d}t  t  d”t  d”f”}t | ||”S )NZcudaCGGetIntrinsicHandler'   r$   ©r   r   r	   r   r   r   r   r   r   Ś declare_cudaCGGetIntrinsicHandle   s
    
’r4   c                 C   s4   d}t  t  d”t  d”t  d”f”}t | ||”S )NZcudaCGSynchronizer$   r'   r3   r   r   r   r   Śdeclare_cudaCGSynchronize   s
    ’r5   c                 C   s`   | j jj}t | d”d ”}tj||jdtj	d}d|_
d|_||_|  |t t d””d”S )	Nzutf-8ó    Ś_str)ŚnameZ	addrspaceZinternalTé   Zgeneric)Zbasic_blockŚfunctionŚmoduler   Zmake_bytearrayŚencodeZadd_global_variableŚtyper   ZADDRSPACE_CONSTANTŚlinkageZglobal_constantZinitializerZaddrspacecastr   r
   r	   )r   Śvaluer   ŚcvalŚglr   r   r   Śdeclare_string   s    
’rB   c                 C   s8   t  t  d””}t  t  d”||g”}t | |d”}|S )Nr9   r$   Śvprintf)r   r
   r	   r   r   r   )r   Z	voidptrtyZ	vprintftyrC   r   r   r   Śdeclare_vprint§   s    rD   zllvm.nvvm.read.ptx.sreg.tid.xzllvm.nvvm.read.ptx.sreg.tid.yzllvm.nvvm.read.ptx.sreg.tid.zzllvm.nvvm.read.ptx.sreg.ntid.xzllvm.nvvm.read.ptx.sreg.ntid.yzllvm.nvvm.read.ptx.sreg.ntid.zzllvm.nvvm.read.ptx.sreg.ctaid.xzllvm.nvvm.read.ptx.sreg.ctaid.yzllvm.nvvm.read.ptx.sreg.ctaid.zz llvm.nvvm.read.ptx.sreg.nctaid.xz llvm.nvvm.read.ptx.sreg.nctaid.yz llvm.nvvm.read.ptx.sreg.nctaid.zz llvm.nvvm.read.ptx.sreg.warpsizezllvm.nvvm.read.ptx.sreg.laneid)ztid.xztid.yztid.zzntid.xzntid.yzntid.zzctaid.xzctaid.yzctaid.zznctaid.xznctaid.yznctaid.zZwarpsizeZlaneidc                 C   s6   | j }t t d”d”}t ||t| ”}|  |d”S )Nr$   r   )r;   r   r   r	   r   r   ŚSREG_MAPPINGr   )r   r8   r;   r   Śfnr   r   r   Ś	call_sregČ   s    rG   c                   @   s<   e Zd Zdd Zdd Zdd Zdd Zd	d
 Zdd ZdS )ŚSRegBuilderc                 C   s
   || _ d S ©N)r   )Śselfr   r   r   r   Ś__init__Š   s    zSRegBuilder.__init__c                 C   s   t | jd| S )Nztid.%s©rG   r   ©rJ   Śxyzr   r   r   ŚtidÓ   s    zSRegBuilder.tidc                 C   s   t | jd| S )Nzctaid.%srL   rM   r   r   r   ŚctaidÖ   s    zSRegBuilder.ctaidc                 C   s   t | jd| S )Nzntid.%srL   rM   r   r   r   ŚntidŁ   s    zSRegBuilder.ntidc                 C   s   t | jd| S )Nz	nctaid.%srL   rM   r   r   r   ŚnctaidÜ   s    zSRegBuilder.nctaidc                 C   s:   |   |”}|  |”}|  |”}| j | j ||”|”}|S rI   )rO   rQ   rP   r   ŚaddŚmul)rJ   rN   rO   rQ   rR   Śresr   r   r   Śgetdimß   s
    


zSRegBuilder.getdimN)	Ś__name__Ś
__module__Ś__qualname__rK   rO   rP   rQ   rR   rV   r   r   r   r   rH   Ļ   s   rH   c                    sD   t |   fdddD }tt |d |”}|dkr<|d S |S d S )Nc                 3   s   | ]}   |”V  qd S rI   )rV   )Ś.0rN   ©Zsregr   r   Ś	<genexpr>é   ó    z get_global_id.<locals>.<genexpr>rN   r   r   )rH   ŚlistŚ	itertoolsŚislice)r   ZdimŚitŚseqr   r[   r   Śget_global_idē   s    rc   )$r_   Zllvmliter   Z
numba.corer   Zcudadrvr   Śapir   r   r   r   r    r!   r#   r&   r(   r)   r*   r+   r,   r-   r.   r/   r0   r1   r2   r4   r5   rB   rD   rE   rG   ŚobjectrH   rc   r   r   r   r   Ś<module>   sX   		
ī