o
    "j                     @   s`   d dl Z d dlmZ d dlmZ G dd dZG dd dZedkr.e Z	e
e	  dS dS )	    N)core)get_available_custom_devicec                   @   s    e Zd ZdZdZdZdZdZdS )
DeviceTypecpuZgpuZxpuZipuZcustom_deviceN)__name__
__module____qualname__CPUGPUXPUIPUCUSTOM_DEVICE r   r   i/var/www/html/Deteccion_Ine/venv/lib/python3.10/site-packages/paddle/distributed/launch/context/device.pyr      s    r   c                   @   s   e Zd ZdddZdd Zedd Zed	d
 Zedd Zedd Z	e	j
dd Z	dd ZdddZdd Zedd Zedd ZdS )DeviceN c                 C   s   || _ || _|| _d S N)_dtype_memory_labels)selfdtypememorylabelsr   r   r   __init__   s   
zDevice.__init__c                 C   s   d | jS N,)joinr   r   r   r   r   __str__$   s   zDevice.__str__c                 C      | j S r   )r   r   r   r   r   r   '      zDevice.dtypec                 C   s   t | jpdS )N   )lenr   r   r   r   r   count+   s   zDevice.countc                 C   r    r   )r   r   r   r   r   r   /   r!   zDevice.memoryc                 C   r    r   )r   r   r   r   r   r   3   r!   zDevice.labelsc                 C   s8   t |tr|d| _d S t |tr|| _d S g | _d S r   )
isinstancestrsplitr   list)r   Zlbsr   r   r   r   7   s
   



c                 C   s`   | j tjkrdS | j tjkrdS | j tjkrdS | j tjkr dS | j tjkr.dt	dS dS )NZFLAGS_selected_cpusZFLAGS_selected_gpusZFLAGS_selected_xpusZFLAGS_selected_ipuszFLAGS_selected_{}sPADDLE_XCCL_BACKENDZFLAGS_selected_devices)
r   r   r	   r
   r   r   r   formatosgetenvr   r   r   r   get_selected_device_key@   s   zDevice.get_selected_device_keyc                    sD   |sdd t dt jD S dd |dD } fdd|D S )zL
        return the device label/id relative to the visible devices
        c                 S      g | ]}t |qS r   r&   .0xr   r   r   
<listcomp>R       z/Device.get_selected_devices.<locals>.<listcomp>r   c                 S   s   g | ]}|  qS r   )stripr0   r   r   r   r3   T   r4   r   c                    s   g | ]
}t  j|qS r   )r&   r   index)r1   dr   r   r   r3   U   s    )ranger#   r   r'   )r   ZdevicesZdevsr   r   r   get_selected_devicesM   s   zDevice.get_selected_devicesc                 C   s   dt ddS )NZxcclr)   )ZPADDLE_DISTRI_BACKENDr)   )r+   r,   r   r   r   r   get_custom_device_envsW   s   zDevice.get_custom_device_envsc                 C   s   t  }d }dtjv r#tj|_dtd }|tjv r"t|}ndtjv r2tj	|_td}ndtjv r@tj
|_td}|d urP|dkrP|d|_|S |  S )Nr)   z{}_VISIBLE_DEVICESCUDA_VISIBLE_DEVICESXPU_VISIBLE_DEVICESallr   )r   r+   environr   r   r   r*   r,   upperr
   r   r'   r   detect_device)r   devvisible_devicesvisible_devices_strr   r   r   parse_device]   s(   





zDevice.parse_devicec                 C   s*  dd }t  }d}d }dtjv r/td}tj|_||}|  d}|tjv r.t|}n?t	 rAtj
|_t }td}n-t rStj|_t }td}nt rntj|_t }dd	 td|d
 D |_|S |dkrxtj|_|S |d u s|dkrdd	 td|D |_|S |d|_|S )Nc                 S   s"   t  }dd |D }|| }|S )Nc                 S   s   g | ]	}| d d qS ):r   )r'   )r1   Zdevicer   r   r   r3   z   s    zJDevice.detect_device.<locals>.get_custom_devices_count.<locals>.<listcomp>)r   r$   )Zdevice_typeZall_custom_devicesZcustom_devices_countr   r   r   get_custom_devices_countx   s   
z6Device.detect_device.<locals>.get_custom_devices_countr   r)   Z_VISIBLE_DEVICESr;   r<   c                 S   r.   r   r/   r0   r   r   r   r3      r4   z(Device.detect_device.<locals>.<listcomp>r"   r=   c                 S   r.   r   r/   r0   r   r   r   r3      r4   r   )r   r+   r>   r,   r   r   r   r?   r   Zis_compiled_with_cudar
   Zget_cuda_device_countZis_compiled_with_xpur   Zget_xpu_device_countZis_compiled_with_ipur   Zget_ipu_device_countr8   r   r	   r'   )r   rF   rA   numrB   Zcustom_device_typerC   r   r   r   r@   v   sD   



zDevice.detect_device)Nr   r   )r   )r   r   r   r   r   propertyr   r$   r   r   setterr-   r9   r:   classmethodrD   r@   r   r   r   r   r      s(    








r   __main__)r+   Zpaddle.baser   Zpaddle.devicer   r   r   r   rD   r7   printr9   r   r   r   r   <module>   s    