o
    
۾i;                     @   s   d Z ddlZddlmZ ddlmZ ddlZddlmZ ddl	m
Z
 ddlmZ ddlmZ e
eZejZejZG dd	 d	ejZeG d
d dZG dd dZdS )zThis file is a pure Python wrapper for the cudart library.
It avoids the need to compile a separate shared library, and is
convenient for use when we just need to call a few functions.
    N)	dataclass)Any)init_logger)current_platform)find_loaded_libraryc                   @   s   e Zd Zdejd fgZdS )cudaIpcMemHandle_tinternal   N)__name__
__module____qualname__ctypesc_byte_fields_ r   r   f/home/ubuntu/.local/lib/python3.10/site-packages/vllm/distributed/device_communicators/cuda_wrapper.pyr      s    r   c                   @   s*   e Zd ZU eed< eed< ee ed< dS )FunctionnamerestypeargtypesN)r
   r   r   str__annotations__r   listr   r   r   r   r   "   s   
 r   c                   @   s  e Zd ZU edeejgedeg edeg edejegedeeej	ej
gedeej	gedeej	ejej
gedeej	ej	ej
eged	eeeej	ged
eeej	eejgg
Zddddddddddd
Zi Zeeef ed< i Zeeeeef f ed< d=dedB fddZdeddfddZd edefd!d"Zd#eddfd$d%Zd>d&d'Zd>d(d)Zd*edej	fd+d,Zd-ej	ddfd.d/Zd-ej	d0ed1eddfd2d3Zd4ej	d5ej	d1eddfd6d7Z d-ej	defd8d9Z!d:edej	fd;d<Z"dS )?CudaRTLibrarycudaSetDevicecudaDeviceSynchronizecudaDeviceResetcudaGetErrorString
cudaMalloccudaFree
cudaMemset
cudaMemcpycudaIpcGetMemHandlecudaIpcOpenMemHandlehipSetDevicehipDeviceSynchronizehipDeviceResethipGetErrorString	hipMallochipFree	hipMemset	hipMemcpyhipIpcGetMemHandlehipIpcOpenMemHandle)
r   r   r   r   r   r   r    r!   r"   r#   path_to_library_cachepath_to_dict_mappingNso_filec                 C   s   |d u rt d}|d u rt d}|d u rtj}|d usJ d|tjvr.t|}|tj|< tj| | _|tjvrdi }tj	D ] }t
| jt rMtj|j n|j}|j|_|j|_|||j< q>|tj|< tj| | _d S )N	libcudartlibamdhip64zOlibcudart is not loaded in the current process, try setting VLLM_CUDART_SO_PATH)r   envsVLLM_CUDART_SO_PATHr   r.   r   CDLLlibr/   exported_functionsgetattrr   is_rocmcuda_to_hip_mappingr   r   r   funcs)selfr0   r6   _funcsfuncfr   r   r   __init__i   s6   






zCudaRTLibrary.__init__resultreturnc                 C   s$   |dkr|  |}td| d S )Nr   zCUDART error: )r   RuntimeError)r<   rA   	error_strr   r   r   CUDART_CHECK   s   
zCudaRTLibrary.CUDART_CHECKerrorc                 C   s   | j d |dS )Nr   zutf-8)r;   decode)r<   rF   r   r   r   r      s   z CudaRTLibrary.cudaGetErrorStringdevicec                 C      |  | jd | d S )Nr   rE   r;   )r<   rH   r   r   r   r         zCudaRTLibrary.cudaSetDevicec                 C      |  | jd   d S )Nr   rJ   r<   r   r   r   r         z#CudaRTLibrary.cudaDeviceSynchronizec                 C   rL   )Nr   rJ   rM   r   r   r   r      rN   zCudaRTLibrary.cudaDeviceResetsizec                 C   s(   t  }| | jd t || |S )Nr   r   c_void_prE   r;   byref)r<   rO   devPtrr   r   r   r      s   zCudaRTLibrary.cudaMallocrS   c                 C   rI   )Nr   rJ   )r<   rS   r   r   r   r      rK   zCudaRTLibrary.cudaFreevaluecountc                 C   s   |  | jd ||| d S )Nr    rJ   )r<   rS   rT   rU   r   r   r   r       s   zCudaRTLibrary.cudaMemsetdstsrcc                 C   s&   d}|}|  | jd |||| d S )N   r!   rJ   )r<   rV   rW   rU   cudaMemcpyDefaultkindr   r   r   r!      s   zCudaRTLibrary.cudaMemcpyc                 C   s&   t  }| | jd t|| |S )Nr"   )r   rE   r;   r   rR   )r<   rS   handler   r   r   r"      s
   z!CudaRTLibrary.cudaIpcGetMemHandler[   c                 C   s.   d}t  }| | jd t ||| |S )N   r#   rP   )r<   r[   cudaIpcMemLazyEnablePeerAccessrS   r   r   r   r#      s   z"CudaRTLibrary.cudaIpcOpenMemHandle)N)rB   N)#r
   r   r   r   cudaError_tr   c_intc_char_pPOINTERrQ   c_size_tcudaMemcpyKindr   c_uintr7   r:   r.   dictr   r   r   r/   r@   rE   r   intr   r   r   r   r   r    r!   r"   r#   r   r   r   r   r   )   s~   
 

+#


r   )__doc__r   dataclassesr   typingr   torch	vllm.envsr3   vllm.loggerr   vllm.platformsr   vllm.utils.system_utilsr   r
   loggerr_   r^   rc   	Structurer   r   r   r   r   r   r   <module>   s    