
    x-j"                         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 d dlm	Z	 d dl
Z
d Z G d de          Z e            Zd Zd	 Zd
ededee         defdZd Zd Zd Zd Zd Zd Zd ZddZdS )    N)OrderedDict)ForkingPickler)register_after_forkc                  *    t           j        dk    rdS dS )NlinuxFT)sysplatform     j/var/www/html/banglarbhumi/venv/lib/python3.11/site-packages/paddle/incubate/multiprocessing/reductions.py_supported_checkr      s    
|w u4r   c                   4     e Zd Zd Zd Z fdZ fdZ xZS )_LRUSharedCachec                 p    d| _         |                                  t          | t          j                   d S )N   )limit_after_forkr   r   selfs    r   __init__z_LRUSharedCache.__init__)   s4    
D/"=>>>>>r   c                 6    t          j                    | _        d S N)	threadingLocklockr   s    r   r   z_LRUSharedCache._after_fork.   s    N$$			r   c                 
   | j         5  	 t                                          |          }t                                          ||           |cd d d            S # t          $ r Y d d d            d S w xY w# 1 swxY w Y   d S r   )r   superpop__setitem__KeyErrorr   keyvalue	__class__s      r   getz_LRUSharedCache.get1   s    Y 	 	C((##C///		 	 	 	 	 	 	 	
    	 	 	 	 	 	 	 	
	 	 	 	 	 	 	 	 	 	s/   A8AA
A5&A84A55A88A<?A<c                 f   | j         5  	 t                                          |           nJ# t          $ r= t	          |           | j        k    r"t                                          d           Y nw xY wt                                          ||           d d d            d S # 1 swxY w Y   d S )NF)last)r   r   __delitem__r    lenr   popitemr   r!   s      r   r   z_LRUSharedCache.__setitem__:   s    Y 	, 	,0##C(((( 0 0 0t99
**GGOOO///0 GGU+++	, 	, 	, 	, 	, 	, 	, 	, 	, 	, 	, 	, 	, 	, 	, 	, 	, 	,s2   B&!-B&AA41B&3A44%B&&B*-B*)__name__
__module____qualname__r   r   r%   r   __classcell__)r$   s   @r   r   r   (   so        ? ? ?
% % %    , , , , , , , , ,r   r   c                 B    t                               |           }|d S |S r   )shared_cacher%   )r"   	lodtensors     r   _cuda_from_cacher2   G   s&      %%Itr   c                 `   | t           j        j        j        k    r{t          j        j        j        |                                |                                fi |}|                                                                                    |           n|\  }}t           j        j	        j
                                        }|                                r(|                                                    |           n(t          j        g |                                          }||_        |S )N)dtype)paddlebase	frameworkEagerParamBaseshape_dtyper#   
get_tensor_share_data_withcoreeagerTensor_is_initialized	to_tensorstop_gradient)clsr1   metadatatensorsizerB   s         r   _rebuild_tensorrG   N   s
   
fk#222&5OOy//11
 
5=
 
 	!!##44Y????&m!'..00$$&& 	D00;;;;%b	0@0@0B0BCCCF,Mr   blob	dtype_idxdimsdevicec                 :    |                      |||||f          }|S r   )_new_shared_cuda)rC   rH   rI   rJ   lodrK   r1   s          r   _rebuild_vmm_tensorrO   _   s(     $$dItS&%IJJIr   c                 ,   |                                  }| j        s| j        st          d          | j                                        sK| j                                        s2| j                                        s| j                                        rht          |           t          j        j        j        k    rt          j        | j                  }n| j        | j        f}t$          t          |           ||ffS t'          d| j         d          )NzQRefusing to serialize non-leaf tensor which not stop_gradient, you can detach it!z?Only support tensors of CPU/CUDA/CUDAPinned Place, Not support z	 for now!)r;   rB   is_leafRuntimeErrorplaceis_cpu_placeis_gpu_placeis_cuda_pinned_placeis_xpu_placetyper5   r6   r7   r8   copydeepcopy__dict__rF   rG   
ValueError)rE   r1   rD   s      r   _reduce_tensorr]   f   s   !!##I 
 
_
 
 	

 	!!##
<$$&&
 <,,..
 <$$&&	
 <<6;0???}V_55HHV%9:H$v,,	8!DEEefleee
 
 	
r   c           	      f    |                      |||||||f          }|                                 |S r   )_new_shared_filename_shared_decref	rC   ipc_name	shared_fdrF   type_idxrJ   rN   dataloader_use_file_descriptorr1   s	            r   _rebuild_lodtensor_filenamerf      sM     ((*	

 
I r   c           	          |                                 }|                     |||||||f          }|                                 |S r   )detachr_   r`   ra   s	            r   !_rebuild_lodtensor_filedescriptorri      s^       ""I((*	

 
I r   c           	          t          ||f          }|)|                     |||||||f          }	|	t          ||f<   n>t          j        j                                        }	|	                    ||||||f           |	S r   )r2   rM   r0   r5   r6   r=   DenseTensor_share_buffer_with
rC   handleoffset_bytesrF   rd   rJ   rN   
device_idxcache_tensorr1   s
             r   _rebuild_cuda_tensorrr      s     $V\$:;;L((\44jI
 
	 09fl+,,K$0022	$$44jA	
 	
 	
 r   c           	          t          ||f          }|)|                     |||||||f          }	|	t          ||f<   n>t          j        j                                        }	|	                    ||||||f           |	S r   )r2   _new_shared_xpur0   r5   r6   r=   rk   rl   rm   s
             r   _rebuild_xpu_tensorru      s     $V\$:;;L''\44jI
 
	 09fl+,,K$0022	$$44jA	
 	
 	
 r   c                      |             S r   r
   )rC   s    r   _rebuild_lodtensor_emptyrw      s     355Lr   c                    |                                                                  s&|                                                                  r|                                 D ]!}|dk    rt          t          |           ffc S "t          j        j        	                                d         }| 
                    |          }|rNt          |          }t          j                            |d                   |d<   t          |          }t           }nt"          }|                                  n}|                                                                  rt          j        j                                        }|                                                                  }||k    r$t          j        j                            |           	 |                                 }t1          |          dk    rt2          }nt4          }||k    r$t          j        j                            |           n# ||k    r%t          j        j                            |           w w xY w|                                                                  r|                                 }t:          }nt=          d          |t          |           g|R fS )Nr   $FLAGS_dataloader_use_file_descriptor      z3We only support pass cpu/gpu/xpu lodtensor for now!)_placerT   rV   r9   rw   rX   r5   r6   r=   globals_share_filenamelistmultiprocessing	reductionDupFdtupleri   rf   _shared_increfrU   get_cuda_current_device_idgpu_device_idset_cuda_current_device_id_share_cudar)   rO   rr   rW   
_share_xpuru   rR   )r1   dimre   rD   metalistrebuildprev_idcur_ids           r   _reduce_lodtensorr      s   ''))-
2244-
 ??$$ 	F 	FCaxx04	??2DEEEE  *0)9)A)A)C)C2*
& ,,*
 
 * 	2H~~H)399(1+FFHQKXH7GG1G  """"						(	(	*	* 
+"==??!!##1133fK77???	E ,,..H8}}!!-.&   ;;GDDD &   ;;GDDDD !						(	(	*	* 
''))%A
 
 	
 d9oo11122s   	6H* *-Ireturnc                     t                      sd S t          j        t          j        t
                     t          j        t          j        j        j        j        t
                     t          j        t          j        j	        j
        t
                     t          j        t          j        j        j        t                     d S r   )r   r   registerr5   r?   r]   r6   r=   r>   r7   r8   rk   r   r
   r   r   init_reductionsr     s     FM>:::FK,29>JJJ,n   FK,8:KLLLLLr   )r   N)rY   r   r   r   collectionsr   multiprocessing.reductionr   multiprocessing.utilr   r5   r   r   r0   r2   rG   bytesintr   rO   r]   rf   ri   rr   ru   rw   r   r   r
   r   r   <module>r      s       
 


     # # # # # # 4 4 4 4 4 4 4 4 4 4 4 4   , , , , ,k , , ,8       "!$,0IDG   
 
 
4  2  4  .  .  03 03 03f	M 	M 	M 	M 	M 	Mr   