
    x-j                         d dl Z d dlmZ d dlmZ d dlmZ  G d d          Z G d d          Ze	d	k    r3e
                                Z ee                                           dS dS )
    N)core)get_all_custom_device_type)get_available_custom_devicec                   "    e Zd ZdZdZdZdZdZdS )
DeviceTypecpugpuxpuipucustom_deviceN)__name__
__module____qualname__CPUGPUXPUIPUCUSTOM_DEVICE     h/var/www/html/banglarbhumi/venv/lib/python3.11/site-packages/paddle/distributed/launch/context/device.pyr   r      s'        
C
C
C
C#MMMr   r   c                       e Zd ZddZd Zed             Zed             Zed             Zed             Z	e	j
        d	             Z	d
 ZddZd Zed             Zed             ZdS )DeviceN c                 0    || _         || _        || _        d S N)_dtype_memory_labels)selfdtypememorylabelss       r   __init__zDevice.__init__    s    r   c                 6    d                     | j                  S N,)joinr   r    s    r   __str__zDevice.__str__%   s    xx%%%r   c                     | j         S r   )r   r)   s    r   r!   zDevice.dtype(   s
    {r   c                 .    t          | j                  pdS )N   )lenr   r)   s    r   countzDevice.count,   s    4<  %A%r   c                     | j         S r   )r   r)   s    r   r"   zDevice.memory0   
    |r   c                     | j         S r   )r   r)   s    r   r#   zDevice.labels4   r1   r   c                     t          |t                    r|                    d          | _        d S t          |t                    r	|| _        d S g | _        d S r&   )
isinstancestrsplitr   list)r    lbss     r   r#   zDevice.labels8   sQ    c3 	99S>>DLLLT"" 	DLLLDLLLr   c                 B   | 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-t                      }|rt          |d                   nd}d| dS d	S )
NFLAGS_selected_cpusFLAGS_selected_gpusFLAGS_selected_xpusFLAGS_selected_ipusr   r   FLAGS_selected_sFLAGS_selected_devices)	r   r   r   r   r   r   r   r   r5   r    custom_device_typesdevice_types      r   get_selected_device_keyzDevice.get_selected_device_keyA   s    ;*.((((;*.((((;*.((((;*.((((;*222"<">">/BJ'*+++  4[3333''r   c                      |s,d t          dt           j                            D             S d |                    d          D             } fd|D             S )zL
        return the device label/id relative to the visible devices
        c                 ,    g | ]}t          |          S r   r5   .0xs     r   
<listcomp>z/Device.get_selected_devices.<locals>.<listcomp>W   s    @@@qCFF@@@r   r   c                 6    g | ]}|                                 S r   )striprH   s     r   rK   z/Device.get_selected_devices.<locals>.<listcomp>Y   s     :::!AGGII:::r   r'   c                 ^    g | ])}t          j                            |                    *S r   )r5   r   index)rI   dr    s     r   rK   z/Device.get_selected_devices.<locals>.<listcomp>Z   s1    ===1C**1--..===r   )ranger.   r   r6   )r    devicesdevss   `  r   get_selected_deviceszDevice.get_selected_devicesR   sn      	>@@E!S->->$?$?@@@@::w}}S'9'9:::D========r   c                 Z    t                      }|rt          |d                   nd}d|dS )Nr   r   xccl)PADDLE_DISTRI_BACKENDPADDLE_XCCL_BACKEND)r   r5   rA   s      r   get_custom_device_envszDevice.get_custom_device_envs\   s@    8::5HPc-a0111b%+#.
 
 	
r   c                    t                      }d }t                      }|r`t          j        |_        t          |d                   }|                                 d}|t          j        v rt          j	        |          }ndt          j        v r&t          j
        |_        t          j	        d          }ndt          j        v r&t          j
        |_        t          j	        d          }nXdt          j        v rJt          j                    rt          j
        |_        nt          j        |_        t          j	        d          }|!|dk    r|                    d          |_        n|                                 S |S )Nr   _VISIBLE_DEVICESXPULINK_VISIBLE_DEVICESXPU_VISIBLE_DEVICESCUDA_VISIBLE_DEVICESallr'   )r   r   r   r   r   r5   upperosenvirongetenvr   r   is_compiled_with_xpur   r6   r   detect_device)r    devvisible_devicesrB   rC   visible_devices_strs         r   parse_devicezDevice.parse_deviced   sK   hh8:: 	@#1CJ1!455K%0%6%6%8%8"J"J"J"bj00"$),?"@"@&"*44#CJ i(ABBOO"bj00#CJ i(=>>OO#rz11(** ,'^

'^
 i(>??O&?e+C+C)//44CKK%%'''
r   c                    d }t                      }d}d }t                      }|rkt          |d                   }t          j        |_         ||          }|                                 d}|t          j        v rt          j	        |          }nt          j                    r9t          j        |_        t          j                    }t          j	        d          }nt          j                    r9t          j        |_        t          j                    }t          j	        d          }n[t          j                    rHt          j        |_        t          j                    }d t)          d|dz             D             |_        |S |dk    rt          j        |_        nB||dk    r d	 t)          d|          D             |_        n|                    d
          |_        |S )Nc                 d    t                      }d |D             }|                    |           }|S )Nc                 D    g | ]}|                     d           d         S ):r   )r6   )rI   devices     r   rK   zJDevice.detect_device.<locals>.get_custom_devices_count.<locals>.<listcomp>   s6     " " ")/S!!!$" " "r   )r   r/   )rC   all_custom_devicescustom_devices_counts      r   get_custom_devices_countz6Device.detect_device.<locals>.get_custom_devices_count   sI    !<!>!>" "3E" " " $6#;#;K#H#H ''r   r   r[   r^   r]   c                 ,    g | ]}t          |          S r   rG   rH   s     r   rK   z(Device.detect_device.<locals>.<listcomp>   s    ===a3q66===r   r-   r_   c                 ,    g | ]}t          |          S r   rG   rH   s     r   rK   z(Device.detect_device.<locals>.<listcomp>   s    999a3q66999r   r'   )r   r   r5   r   r   r   r`   ra   rb   rc   r   is_compiled_with_cudar   get_cuda_device_countrd   r   get_xpu_device_countis_compiled_with_ipur   get_ipu_device_countrQ   r   r   r6   )r    rq   rf   numrg   rB   custom_device_typerh   s           r   re   zDevice.detect_device   s   	( 	( 	( hh8:: 	!$%8%;!<!<#1CJ**+=>>C%++--???   #bj00"$),?"@"@')) 	#CJ,..C i(>??OO&(( 		#CJ+--C i(=>>OO&(( 	#CJ+--C==5C!G+<+<===CKJ!88#CJJ$5(@(@995C==999CKK)//44CK
r   )Nr   r   )r   )r   r   r   r$   r*   propertyr!   r/   r"   r#   setterrD   rT   rY   classmethodri   re   r   r   r   r   r      s(          
& & &   X & & X&   X   X ]  ]( ( ("> > > >
 
 
   [< , , [, , ,r   r   __main__)ra   paddle.baser   paddle.base.corer   paddle.devicer   r   r   r   ri   rP   printrT   r   r   r   <module>r      s    
			       7 7 7 7 7 7 5 5 5 5 5 5$ $ $ $ $ $ $ $Q Q Q Q Q Q Q Qh zA	E!
 
 
"
"##### r   