o
    &jW                    @   s   d dl mZ d dl mZ ddlmZ ddlmZ ddlmZ ddl	m
Z
 ddlmZ dd	lmZ dd
lmZ ddlmZ ddlmZ ddlmZ ddlmZ ddlmZ ddlmZ dd ZG dd dZG dd dZdS )    )defaultdict)OrderedDict   )DistributedParser)KernelParser)MemoryParser)OperatorParser)CPUType)GPUType)OverviewParser)TraceParser)format_floatformat_memory)format_ratio)format_time)traverse_treec                 C   sJ   t | }| D ]\}}|D ]}t|jts!t|jdd |_qqd S )N.r   )r   items
isinstancetypestrsplit)
node_treesZ	nodelists	thread_idZnodelistnode r   j/var/www/html/Deteccion_Ine/venv/lib/python3.10/site-packages/visualdl/component/profiler/profiler_data.pyfilter_type!   s   r   c                   @   s   e Zd Z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dZdd Z			d/ddZd.ddZd0ddZd.d d!Zd"d# Zd$d% Zd.d&d'Zd(ed)ddfd*d+Zd1d,d-ZdS )2ProfilerDataz6
  Hold all parsed data to serve for user requests.
  c                 C   s  || _ || _|| _| | _t| j | | _| | _	|
 | _d | _d | _d | _d | _d | _d | _| | _| rt | _| j| j | jj| _| jj| _| jj| _| jj| _| jj| _t | _| j| j | jj| _| jj| _ | rt! | _| j| j | jj"| _#|$ rt% | _| j| j | jj&| _&| jj'| _'| jj(| _(| jj)| _)| jj*| _*| jj+| _+| rt, | _| jt-| j | jj.| _.| jj/| _/| jj0| _0| jj1| _1| jj2| _3| jj4| _4t5 | _| j|j6 d S N)7runworker_name	span_indxget_datar   r   Zget_extra_infoextra_infosZget_span_idxZspan_idxget_device_infosdevice_infosoverview_parseroperator_parserdistributed_parsermemory_parserkernel_parsertrace_parser
has_devicehas_gpuZhas_hostr   parsemerged_events_per_stagemodel_perspective_itemsuserdefined_itemsgpu_ulitization
process_idr   r   operator_itemsitems_with_input_shapeoperator_items_with_input_shaper   Z
steps_timedistributed_timeZ
has_memoryr   memory_curveallocated_itemsreserved_itemspaired_eventssize_rangespeak_allocation_valuesr   r   kernel_items$kernel_items_with_op_name_attributes	occupancysm_efficiencyZtensor_core_ratiotensorcore_ratiogpu_idsr   content)selfr!   r"   r#   Zprofiler_resultr   r   r   __init__.   sf   

























zProfilerData.__init__c                 C   s   g }| j r| j jr|d | jr| jr|d | jr$| jr$|d | jr/| jr/|d | j	r:| j
r:|d |d |S )zG
        Return available views this profile data can provide.
        ZOverviewOperatorz
GPU KernelZMemoryZDistributedTrace)r(   Zhas_forwardappendr)   r6   r,   r@   r+   r:   r*   r9   )rG   Zviewsr   r   r   	get_viewsn   s$   





zProfilerData.get_viewsc              
   C   sb  | j sd S | j js!d}|tt| jd tt| jd ddS d}ttt| j}|| j	v r|tt| jd tt| jd d| j	| d d
t| j	| d	 d
d
| j	| d | j	| d t| jt| j| jd j t| jt| jddS |tt| jd tt| jd ddddt| jt| j| jd j t| jt| jddS )NCPUzProcess Cpu UtilizationzSystem Cpu Utilization)Zprocess_utilizationZsystem_utilization)device_typerM   GPUname{} GBtotalGlobalMemGB{}.{}computeMajorcomputeMinorProfileStep)rP   memoryZcompute_capabilityutilizationrC   Zachieved_occupancyZtensor_core_percentage)rN   rM   rO   -)r(   r.   r   floatr%   intnextiterrE   r'   formatr   r4   rC   r2   cpu_timerB   rD   )rG   rN   gpu_idr   r   r   r&      s   
%zProfilerData.get_device_infosc                 C   s  | j sdS t }g d|d< g |d< | j jrg |d< | jd j}| jd j}dD ]}|| jv rt }||d< | j| j|d	< t| j| j||d
< t| j| j||d< t| j| j	||d< t| j| j
|dd|d< t| j| j| |d< | j jrt }||d< | j| j|d	< t| j| j||d
< t| j| j||d< t| j| j||d< t| j| j|dd|d< t| j| j| |d< |d | | j jr|d | q(|S )z_
        Get total cpu and gpu statistics for model perspective of each profiler step.
        NrP   calls
total_timeavg_timemax_timemin_timeratiocolumn_namecpugpurW   rW   
DataloaderForwardBackwardOptimizationOtherrP   rc   rd   re   rf   r   )Zinf_subsrg   rh   )r(   r   r.   r2   r`   gpu_timecallr   avg_cpu_timemax_cpu_timemin_cpu_timer   avg_gpu_timemax_gpu_timemin_gpu_timerK   )rG   	time_unitdatatotal_cpu_timetotal_gpu_time
stage_namecpu_stage_datagpu_stage_datar   r   r   get_model_perspective   s   












z"ProfilerData.get_model_perspectivec           
   
   C   s  | j sd S zt }g |d< dd | jd j D }t|}||d< dD ]a}|| jvr,q$|d | g ||< |D ]K}t|}|dkrd|| j| jv r\|| t| j| j| | q9|| d q9|| j| j	v r}|| t| j| j	| | q9|| d q9q$W n t
y } ztd	| W Y d }~nd }~ww i }|d |d< |d |d< g |d
< |d D ]}	|d
 ||	  q|S )Norderc                 S   s   g | ]}t |qS r   r\   ).0Zstep_idr   r   r   
<listcomp>%  s    z>ProfilerData.get_model_perspective_perstep.<locals>.<listcomp>rW   stepsrm   rn   ro   rp   rq   rj   r   z&error in get_model_perspective_perstepr{   )r(   r   r2   	cpu_timeskeyssortedrK   r   r   Z	gpu_times	Exceptionprint)
rG   rN   rz   r{   r   r~   Z	stage_idxenew_datarP   r   r   r   get_model_perspective_perstep  sv   
z*ProfilerData.get_model_perspective_perstepc                 C   sH  | j sd S t }g |d< |dkrtD ]}i }i |d< g |d d< g |d d< i |d< g |d d< g |d d< i |d< g |d d< g |d d< dD ]{}|| jv r|| j| d	 d
 v r|d d | |d d | |d d | |d d | j| d	 d
 | d  |d d t| j| d	 d
 | d | |d d t| j| d	 d
 | d | jd d	 d
 | d   qH|d d r|||< |d | q|S tD ]}i }i |d< g |d d< g |d d< i |d< g |d d< g |d d< i |d< g |d d< g |d d< dD ]~}|| jv r|| j| d d
 v r|d d | |d d | |d d | |d d | j| d d
 | d  |d d t| j| d d
 | d | |d d t| j| d d
 | d | jd d d
 | d   q|d d r|||< |d | q|S )Nr   rj   Zcalling_timeskeyvalueZ	durationsratiosr   rM   ALLrc   rd   rW   rO   )r(   r   r	   r1   rK   r   r   r
   )rG   rN   rz   r{   
event_typeZevent_type_datar~   r   r   r   get_event_type_perspectiveQ  sF  
*z'ProfilerData.get_event_type_perspectivec              
   C   s  | j sd S t }g |d< g |d< ztD ]}|| jd d d v r+|d | g ||< q| j jrKtD ]}|| jd d d v rJ|d | g ||< q2dD ]n}|| jv r|d | |d D ][}|tv r|| j| d d v r|| t| j| d d | d | q_|| d	 q_|tv r|| j| d d v r|| t| j| d d | d | q_|| d	 q_qMt }|d |d< |d |d< g |d
< |d D ]}|d
 ||  qW |S  ty } zt	d| W Y d }~|S d }~ww )Nr   
phase_typerW   rM   r   rO   rl   rd   r   r{   z)error in get_event_type_model_perspective)
r(   r   r	   r1   rK   r.   r
   r   r   r   )rG   rz   r{   r   r~   newdatar   r   r   r   r    get_event_type_model_perspective  s   

z-ProfilerData.get_event_type_model_perspectivec                 C   s  | j sd S t }| j jrg d|d< d|d< n
g d|d< d|d< g |d< d}d}| j D ]\}}||j7 }||j7 }q.| j D ]\}}| j jr|d ||jt	|j|t	|j
|t	|j|t	|j|t|dkro|j| nd	t	|j|t	|j|t	|j|t	|j|t|dkr|j| nd	d qB|d ||jt	|j|t	|j
|t	|j|t	|j|t|dkr|j| nd	d qB|S )
NrP   rc   cpu_total_timecpu_avg_timecpu_max_timecpu_min_time	cpu_ratiogpu_total_timegpu_avg_timegpu_max_timegpu_min_time	gpu_ratiori   Tr/   rP   rc   r   r   r   r   r   Feventsr           )r(   r   r.   r3   r   r`   general_gpu_timerK   rs   r   rt   ru   rv   r   avg_general_gpu_timemax_general_gpu_timemin_general_gpu_time)rG   rz   r{   r|   r}   rP   eventr   r   r   get_userdefined_perspective  sh   


















z(ProfilerData.get_userdefined_perspectivemsc                 C   s  | j sd S t }g d|d< g |d< | jr%g |d< t| j dd dd}t| j d	d dd}|d
kr=|}| jr<|}n|d | }| jrL|d | }d}d}	|D ]	\}
}||j7 }qR| jrk|D ]	\}
}|	|j7 }	qa|D ]@\}
}t }|
|d< |j|d< t	|j||d< t	|j
||d< t	|j||d< t	|j||d< t|j| |d< |d | qm| jr|D ]@\}
}t }|
|d< |j|d< t	|j||d< t	|j||d< t	|j||d< t	|j||d< t|j|	 |d< |d | q|S )Nrb   ri   rj   rk   c                 S   
   | d j S Nr   r   xr   r   r   <lambda>9     
 z/ProfilerData.get_operator_pie.<locals>.<lambda>Tr   reversec                 S   r   r   r`   r   r   r   r   r   >  r   r   r   rP   rc   rd   re   rf   rg   rh   )r)   r   r/   r   r6   r   r`   r   rs   r   rt   ru   rv   r   rK   r   r   r   )rG   topkrz   r{   Zgpu_sorted_itemsZcpu_sorted_itemsZ	cpu_itemsZ	gpu_itemsr|   r}   op_nameitemr   r   r   r   r   get_operator_pie,  s   

zProfilerData.get_operator_piec                 C   s8  | j sd S t }g |d< g |d< g |d< |dkr%t| j dd dd}nt| j d	d dd}|d
ks9|dkrF|d d }|dd  }n|d | }g }|d g d tt}|D ]\}	}
|d |	 d
}t	 }|
j
 D ]H\}}d|v s~d|v rd}nd|v rd}nd|v rd}nqr|| |dkr|| t|j| ||j7 }qr|| t|j| ||j7 }qr|dkr|d t|
j| | n|d t|
j| | |d |d D ]}||v rq|| d
 qq]|rd
}d
}|d d tt}|D ]^\}	}
|
j
 D ]B\}}d|v rd}nd|v r$d}n
d|v r,d}nq|dkrC||  |j7  < ||j7 }q||  |j7  < ||j7 }q|dkr_||
j7 }q||
j7 }q|| |d< |d D ]}||vr{d||< || t|| | qp|d D ]}|d ||  q|S )Nr   r   r{   rj   c                 S   r   r   r   r   r   r   r   r   }  r   z6ProfilerData.get_operator_pie_expand.<locals>.<lambda>Tr   c                 S   r   r   r   r   r   r   r   r     r   r      )infer_shapecomputenode_creationothersr   Z
infer_metar   r   r   r   )r)   r   r   r6   r   extendr   listrK   setoperator_innersaddr   r`   r   r[   )rG   r   rN   rz   r{   sorted_itemsr   Zother_itemsZinner_op_datar   r   Zinnerop_knownsub_timesZhave_innerop_nameinnerop_namer   Ztotal_event_timesothers_timer   r   r   get_operator_pie_expandr  s   










z$ProfilerData.get_operator_pie_expandr   Nc                    st  | j sd S  fdd}t }g |d< d}d}| j D ]\}}	||	j7 }||	j7 }q|s|dkru| jr@g d|d< d|d	< n
g d
|d< d|d	< | jrZt| j dd dd}
nt| j dd dd}
|
D ]	\}}	| jr||	}|r|d ||	j	|t
|	j t
|	j t
|	j t
|	j t|dkr|	j| ndt
|	j t
|	j t
|	j t
|	j t|dkr|	j| ndd qh|d ||	j	t
|	j t
|	j t
|	j t
|	j t|dkr|	j| ndt
|	j t
|	j t
|	j t
|	j t|dkr
|	j| ndd qh||	}|rF|d ||	j	|t
|	j t
|	j t
|	j t
|	j t|dkr?|	j| ndd qh|d ||	j	t
|	j t
|	j t
|	j t
|	j t|dkrl|	j| ndd
 qh|S | jrg d|d< d|d	< n
g d|d< d|d	< i }| j D ]\}}| D ]\}}||||f< qq| jrt| dd dd}
nt| dd dd}
|
D ]-\\}}}	|sg }n|dd d }dd |D }| jr||	}|rA|d ||	j	||t
|	j t
|	j t
|	j t
|	j t|dkr|	j| ndt
|	j t
|	j t
|	j t
|	j t|dkr9|	j| ndd q|d ||	j	|t
|	j t
|	j t
|	j t
|	j t|dkrh|	j| ndt
|	j t
|	j t
|	j t
|	j t|dkr|	j| ndd q||	}|r|d ||	j	||t
|	j t
|	j t
|	j t
|	j t|dkr|	j| ndd	 q|d ||	j	|t
|	j t
|	j t
|	j t
|	j t|dkr|	j| ndd q|S | jr
t| j dd dd}
nt| j dd dd}
g }|
D ]\}}||v r(|| q|dkrb| jr>g d|d< d|d	< n
g d
|d< d|d	< |D ]}| j| }	| jr||	}|r|d ||	j	|t
|	j t
|	j t
|	j t
|	j t|dkr|	j| ndt
|	j t
|	j t
|	j t
|	j t|dkr|	j| ndd qJ|d ||	j	t
|	j t
|	j t
|	j t
|	j t|dkr|	j| ndt
|	j t
|	j t
|	j t
|	j t|dkr|	j| ndd qJ||	}|r2|d ||	j	|t
|	j t
|	j t
|	j t
|	j t|dkr*|	j| ndd qJ|d ||	j	t
|	j t
|	j t
|	j t
|	j t|dkrX|	j| ndd
 qJ|S | jrqg d|d< d|d	< n
g d|d< d|d	< |D ]9}| j|  D ]-\}}	|sg }n|dd d }dd |D }| jrN||	}|r|d ||	j	||t
|	j t
|	j t
|	j t
|	j t|dkr|	j| ndt
|	j t
|	j t
|	j t
|	j t|dkr|	j| ndd q|d ||	j	|t
|	j t
|	j t
|	j t
|	j t|dkr%|	j| ndt
|	j t
|	j t
|	j t
|	j t|dkrF|	j| ndd q||	}|r|d ||	j	||	|t
|	j t
|	j t
|	j t
|	j t|dkr|	j| ndd	 q|d ||	j	|t
|	j t
|	j t
|	j t
|	j t|dkr|	j| ndd qq}|S ) Nc                    s   g }| j  D ]]\}}|jdkrd}nt|j| j }|jdkr#d}nt|j| j }||jt|j t|j t|j t|j	 t
|t|j t|j t|j t|j t
|d}|| q|S )Nr   r   )r   r   r`   r[   r   rs   r   rt   ru   rv   r   r   r   r   rK   )r   Zdatasr   r   r   r   r{   rz   r   r   get_children_data  s6   









z:ProfilerData.get_operator_table.<locals>.get_children_datar   r   r   r   ri   Tr/   r   Fc                 S   r   r   r   r   r   r   r   r   #  r   z1ProfilerData.get_operator_table.<locals>.<lambda>r   c                 S   r   r   r   r   r   r   r   r   (  r   r   )rP   rc   childrenr   r   r   r   r   r   r   r   r   r   )rP   rc   r   r   r   r   r   r   )rP   rc   input_shaper   r   r   r   r   r   r   r   r   r   )rP   rc   r   r   r   r   r   r   c                 S   r   r   r   r   r   r   r   r     r   c                 S   r   r   r   r   r   r   r   r     r   	c                 S      g | ]
}d j |d qS z{}:{}rZ   r_   r   r   shaper   r   r   r         z3ProfilerData.get_operator_table.<locals>.<listcomp>)rP   rc   r   r   r   r   r   r   r   r   r   r   r   r   )	rP   rc   r   r   r   r   r   r   r   c                 S   r   r   r   r   r   r   r   r   =  r   c                 S   r   r   r   r   r   r   r   r   B  r   c                 S   r   r   r   r   r   r   r   r     r   )r)   r   r6   r   r`   r   r/   r   rK   rs   r   rt   ru   rv   r   r   r   r   r8   r   )rG   group_bysearch_namerz   r   r{   r|   r}   rP   r   r   Zchildren_eventsnew_arrange_datar   r7   r   r   Zshape_stringZshapesresultsr   r   r   get_operator_table  s  *









#







!













   ]   








%







#











  ?  













#







"











 * 







'





%









 zProfilerData.get_operator_tablec           
      C   s.  | j sd S t }g d|d< g |d< t| j dd dd}|dkr%|}n|d | }d	}|D ]	\}}||j7 }q/|D ]Y\}}t }	||	d
< |j|	d< t|j||	d< t|j||	d< t|j	||	d< t|j
||	d< t|j|j |	d< t|j|j |	d< |j|	d< t|j| |	d< |d |	 q;|S )N
rP   rc   rd   re   rf   rg   mean blocks per smmean est achieved occupancytensor core usedrh   ri   r   c                 S   r   r   rr   r   r   r   r   r   r  r   z-ProfilerData.get_kernel_pie.<locals>.<lambda>Tr   r   r   rP   rc   rd   re   rf   rg   r   r   r   rh   )r,   r   r   r@   r   rr   rs   r   rw   rx   ry   r   sum_blocks_per_smsum_occupancytensorcore_usedr   rK   )
rG   r   rz   r{   r   r   r}   kernel_namer   r   r   r   r   get_kernel_pied  sX   



zProfilerData.get_kernel_pie c                 C   s  | j sd S t }g |d< d}| j D ]	\}}||j7 }q|s>|dkrg d|d< t| j dd dd	}|D ]Y\}}	t }
||
d
< |	j|
d< t|	j||
d< t|	j||
d< t|	j	||
d< t|	j
||
d< t|	j|	j |
d< t|	j|	j |
d< |	j|
d< t|	j| |
d< |d |
 q8|S g d|d< i }| j D ]\}}| D ]
\}}	|	|||f< qqt| dd dd	}|D ]y\\}}}	|d\}}}}}t }
||
d
< |	j|
d< ||
d< ||
d< ||
d< ||
d< ||
d< t|	j||
d< t|	j||
d< t|	j	||
d< t|	j
||
d< t|	j|	j |
d< t|	j|	j |
d< |	j|
d< t|	j| |
d< |d |
 q|S t| j dd dd	}g }|D ]\}}	||v r\|| qN|dkrg d|d< |D ]]}| j| }	t }
||
d
< |	j|
d< t|	j||
d< t|	j||
d< t|	j	||
d< t|	j
||
d< t|	j|	j |
d< t|	j|	j |
d< |	j|
d< t|	j| |
d< |d |
 qk|S |D ]}| j|  D ]x\}}	|d\}}}}}t }
||
d
< |	j|
d< ||
d< ||
d< ||
d< ||
d< ||
d< t|	j||
d< t|	j||
d< t|	j	||
d< t|	j
||
d< t|	j|	j |
d< t|	j|	j |
d< |	j|
d< t|	j| |
d< |d |
 q֐q|S )Nr   r   r   r   ri   c                 S   r   r   r   r   r   r   r   r     r   z/ProfilerData.get_kernel_table.<locals>.<lambda>Tr   rP   rc   rd   re   rf   rg   r   r   r   rh   )rP   rc   operatorgridblockregister per threadshared memoryrd   re   rf   rg   r   r   r   rh   c                 S   r   r   r   r   r   r   r   r     r   rZ   r   r   r   r   r   c                 S   r   r   r   r   r   r   r   r     r   )r,   r   r@   r   rr   r   rs   r   rw   rx   ry   r   r   r   r   r   rK   rA   r   )rG   r   r   rz   r{   r}   rP   r   r   r   r   r   Zitems_with_attributes
attributesr   r   r   Zregister_per_threadZshared_memoryr   r   r   r   r   get_kernel_table  s~  



u



I







"



zProfilerData.get_kernel_tablec           
      C   s   | j sd S t }g d|d< g |d< t| j dd dd}|dkr%|}n|d | }d	}d	}|D ]\}}	|	jr=||	j7 }||	j7 }q1|d d
|t|| d |d d|| t|| | d |S )N)rP   rc   rh   ri   r   c                 S   r   r   r   r   r   r   r   r   <  r   z0ProfilerData.get_kernel_tc_pie.<locals>.<lambda>Tr   r   r   zTensor core usedzTensor core unused)	r,   r   r   r@   r   r   rs   rK   r   )
rG   r   rz   r{   r   r   Ztotal_callsZtensorcore_callsr   r   r   r   r   get_kernel_tc_pie2  s<   

zProfilerData.get_kernel_tc_piec                 C   s   | j sd S | j jS r    )r-   rF   )rG   r   r   r   get_trace_data]  s   zProfilerData.get_trace_datac              	   C   sb   | j sd S g }| j D ]"}||t| j| d dt| j| d dt| j| dd q|S )Nr   KBr   )devicemin_sizemax_sizeZmax_allocation_size)r+   r:   r   rK   r   r>   r?   )rG   r{   r   r   r   r   get_memory_devicesb  s   

zProfilerData.get_memory_devicesc                 C   s   | j sd S | j| }i }ddddd|d< | D ]1\}}g ||< t|dd d	}|D ]}|d
 }	|d }
|d }|| t|	|t|
d|g q+q|S )Nu	   已分配u	   已预留u   最大已分配u   最大已预留)Z	AllocatedReservedZPeakAllocatedZPeakReservedrP   c                 S      | d S )Nr   r   r   r   r   r   r         z/ProfilerData.get_memory_curve.<locals>.<lambda>r   r   r      r   )r+   r:   r   r   rK   r   r   )rG   rN   rz   Zcurvesr{   r   r   Zsorted_eventsr   	timestampsize
event_namer   r   r   get_memory_curves  s,   


zProfilerData.get_memory_curver   infc                    s  | j sd S i }g d|d< g |d< | j| } fdd}t||}t|dd d}|s/|S d }	|D ]Q}
|
d	 rF|
d
 rF|
d
 |
d	  }	nd }	|d |
d |
d |
d |
d	 r`t|
d	 |nd |
d |
d
 rot|
d
 |nd |	d uryt|	|nd t|
d dd q3|S )N)Z
MemoryAddr
MemoryTypeZAllocatedEventZAllocatedTimestampZ	FreeEventZFreeTimestampZDurationSizeri   r{   c                    sn   t | d d}s|kr| krdS dS |kr5| kr5| d r)| d v r)dS | d r5| d v r5dS dS )Nr   r   Tr      Fr   )r   r   r   r   r   r   r   filter_func  s   	z3ProfilerData.get_memory_events.<locals>.filter_funcc                 S   r   )Nr   r   r   r   r   r   r     r   z0ProfilerData.get_memory_events.<locals>.<lambda>r         r   r   r   r      r   )r+   r=   filterr   rK   r   r   )rG   rN   r   r   r   rz   r{   Zpaired_event_listr  durationr   r   r  r   get_memory_events  s:   



zProfilerData.get_memory_eventsc                    s   | j sd S i }g d|d< g |d< | j| } fdd}| j| }dd | D }|dd | D   r=t||}t|d	d
 dd}|sJ|S |D ]"\}	}
|d |	|
j|
j	|
j
t|
jdt|
jdt|
jdd qL|S )N)Z	EventNamer   ZAllocationCountZ	FreeCountZAllocationSizeZFreeSizeZIncreasedSizeri   r{   c                    s    sdS  | d v rdS dS )NTr   Fr   )r   r   r   r   r    s
   z6ProfilerData.get_op_memory_events.<locals>.filter_funcc                 S      g | ]\}}||fqS r   r   r   r   r   r   r   r   r         z5ProfilerData.get_op_memory_events.<locals>.<listcomp>c                 S   r
  r   r   r  r   r   r   r     r  c                 S   r   r   )increase_sizer   r   r   r   r     r   z3ProfilerData.get_op_memory_events.<locals>.<lambda>Tr   r   )r+   r;   r<   r   r   r  r   rK   Zmemory_typeZallocation_countZ
free_countr   Zallocation_sizeZ	free_sizer  )rG   rN   r   r{   Zallocated_eventsr  Zreserved_eventsZ
all_eventsr   r   r   r   r	  r   get_op_memory_events  s<   

	





z!ProfilerData.get_op_memory_eventsr   )r   Nr   )r   Nr   r    )__name__
__module____qualname____doc__rH   rL   r&   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r[   r  r  r   r   r   r   r   )   sD    @WC2Y8
JFg
     

0 
+

Ar   c                   @   s2   e Zd ZdZdd Zdd ZdddZd	d
 ZdS )DistributedProfilerDatazg
    Hold data for distributed view.
    Aggregate all data for distributed in ProfileData object.
    c                 C   s   || _ || _|| _d S r    )r!   spanprofile_datas)rG   r!   r  r  r   r   r   rH     s   
z DistributedProfilerData.__init__c                 C   s   g }| j D ]M}|j}|s|  S |jsqttt|j}||jd	|j
d	||| d d	t|| d dd	|| d || d	 d
	t|jd q|S )Nzpid: {}zGPU{}rP   rQ   rR   rS   rT   rU   rV   z{}%)r"   r5   Z	device_idrP   rX   ZcomputeCapabilityrY   )r  r'   r/   r\   r]   r^   rE   rK   r"   r_   r5   r   r   r4   )rG   r{   profile_datar'   ra   r   r   r   get_distributed_info	  s0   




z,DistributedProfilerData.get_distributed_infor   c                 C   s.  i }g d|d< g |d< g |d< t t}| jD ]m}|jsq|d |j |dkr:|d t|jd j| | n|d t|jd j	| |d t|j
| d | |d	 t|j
| d
 | |d t|j
| d | |d t|j
| d | q|d D ]}|d ||  q|S )N)rW   CommunicationComputationOverlapOthersr   r"   r{   AllrW   r  Zcommunication_timer  Zcomputation_timer  Zoverlap_timer  r   )r   r   r  r*   rK   r"   r   r2   r   r`   r9   )rG   steprz   r{   r   r  r   r   r   r   get_distributed_histogram'  sd   
z1DistributedProfilerData.get_distributed_histogramc                 C   sD   | j D ]}|js	qt|j }dgtdd |D  }|  S d S )Nr  c                 S   s   g | ]
}|d krt |qS )r  r   )r   r  r   r   r   r   V  s    zADistributedProfilerData.get_distributed_steps.<locals>.<listcomp>)r  r*   r   r9   r   r   )rG   r  r   Zfinal_stepsr   r   r   get_distributed_stepsP  s   
z-DistributedProfilerData.get_distributed_stepsNr  )r  r  r  r  rH   r  r  r   r   r   r   r   r    s    
)r  N)collectionsr   r   Zparser.distributed_parserr   Zparser.kernel_parserr   Zparser.memory_parserr   Zparser.operator_parserr   Zparser.overview_parserr	   r
   r   Zparser.trace_parserr   Zparser.utilsr   r   r   r   r   r   r   r  r   r   r   r   <module>   s>                b