o
    eS                    @   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   YD:\Projects\ConvertPro\env\Lib\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   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*   r7   r-   rA   r,   r;   r+   r:   )rH   Zviewsr   r   r   	get_viewsn   s$   





zProfilerData.get_viewsc              
   C   sX  | 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_typerN   GPUname{} GBtotalGlobalMemGB{}.{}computeMajorcomputeMinorProfileStep)rQ   memoryZcompute_capabilityutilizationrD   Zachieved_occupancyZtensor_core_percentage)rO   rN   rP   -)r)   r/   r   floatr&   intnextiterrF   r(   formatr   r5   rD   r3   cpu_timerC   rE   )rH   rO   gpu_idr   r   r   r'      s   
%zProfilerData.get_device_infosc                 C   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.
        rQ   calls
total_timeavg_timemax_timemin_timeratiocolumn_namecpugpurX   rX   
DataloaderForwardBackwardOptimizationOtherrQ   rd   re   rf   rg   r   )Zinf_subsrh   ri   )r   r)   r/   r3   ra   gpu_timecallr   avg_cpu_timemax_cpu_timemin_cpu_timer   avg_gpu_timemax_gpu_timemin_gpu_timerL   )rH   	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|  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r_|| j| jv rW|| t| j| j| | q4|| d q4|| j| jv rx|| t| j| j| | q4|| d q4q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>rX   stepsrn   ro   rp   rq   rr   rk   r   z&error in get_model_perspective_perstepr|   )r   r3   	cpu_timeskeyssortedrL   r   r   Z	gpu_times	Exceptionprint)
rH   rO   r{   r|   r   r   Z	stage_idxenew_datarQ   r   r   r   get_model_perspective_perstep  sr   
z*ProfilerData.get_model_perspective_perstepc                 C   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   qC|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   rk   Zcalling_timeskeyvalueZ	durationsratiosr   rN   ALLrd   re   rX   rP   )r   r	   r2   rL   r   r   r
   )rH   rO   r{   r|   
event_typeZevent_type_datar   r   r   r   get_event_type_perspectiveK  sB  
*z'ProfilerData.get_event_type_perspectivec              
   C   s  t  }g |d< g |d< ztD ]}|| jd d d v r&|d | g ||< q| jjrFtD ]}|| jd d d v rE|d | g ||< q-dD ]n}|| jv r|d | |d D ][}|tv r|| j| d d v r|| t| j| d d | d | qZ|| d	 qZ|tv r|| j| d d v r|| t| j| d d | d | qZ|| d	 qZqHt  }|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_typerX   rN   r   rP   rm   re   r   r|   z)error in get_event_type_model_perspective)
r   r	   r2   rL   r)   r/   r
   r   r   r   )rH   r{   r|   r   r   newdatar   r   r   r   r    get_event_type_model_perspective  s   

z-ProfilerData.get_event_type_model_perspectivec                 C   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rj|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	d q=|S )
NrQ   rd   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_ratiorj   Tr0   rQ   rd   r   r   r   r   r   Feventsr           )r   r)   r/   r4   r   ra   general_gpu_timerL   rt   r   ru   rv   rw   r   avg_general_gpu_timemax_general_gpu_timemin_general_gpu_time)rH   r{   r|   r}   r~   rQ   eventr   r   r   get_userdefined_perspective  sd   


















z(ProfilerData.get_userdefined_perspectivemsc                 C   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r8|}| jr7|}n|d | }| jrG|d | }d}d}	|D ]	\}
}||j7 }qM| jrf|D ]	\}
}|	|j7 }	q\|D ]@\}
}t  }|
|d< |j|d< t|j||d< t|j	||d< t|j
||d< t|j||d< t|j| |d< |d | qh| 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 )Nrc   rj   rk   rl   c                 S   
   | d j S Nr   r   xr   r   r   <lambda>+     
 z/ProfilerData.get_operator_pie.<locals>.<lambda>Tr   reversec                 S   r   r   ra   r   r   r   r   r   0  r   r   r   rQ   rd   re   rf   rg   rh   ri   )r   r0   r   r7   r   ra   r   rt   r   ru   rv   rw   r   rL   r   r   r   )rH   topkr{   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   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s4|dkrA|d d }|dd  }n|d | }g }|d g d tt}|D ]\}	}
|d |	 d
}t }|
j	 D ]H\}}d|v syd|v r|d}nd|v rd}nd|v rd}nqm|
| |dkr|| t|j| ||j7 }qm|| t|j| ||j7 }qm|dkr|d t|
j| | n|d t|
j| | |
d |d D ]}||v rq|| d
 qqX|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r>||  |j7  < ||j7 }q||  |j7  < ||j7 }q|dkrZ||
j7 }q||
j7 }q|| |d< |d D ]}||vrvd||< || t|| | qk|d D ]}|d ||  q|S )Nr   r   r|   rk   c                 S   r   r   r   r   r   r   r   r   m  r   z6ProfilerData.get_operator_pie_expand.<locals>.<lambda>Tr   c                 S   r   r   r   r   r   r   r   r   s  r   r      )infer_shapecomputenode_creationothersr   Z
infer_metar   r   r   r   )r   r   r7   r   extendr   listrL   setoperator_innersaddr   ra   r   r\   )rH   r   rO   r{   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_expandd  s   










z$ProfilerData.get_operator_pie_expandr   Nc                    sj   fdd}t  }g |d< d}d}| j D ]\}}	||	j7 }||	j7 }q|s|dkrp| jr;g d|d< d|d	< n
g d
|d< d|d	< | jrUt| 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 qc|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 qc||	}|rA|d ||	j|t	|	j t	|	j
 t	|	j t	|	j t|dkr:|	j| ndd qc|d ||	jt	|	j t	|	j
 t	|	j t	|	j t|dkrg|	j| ndd
 qc|S | jrg 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||	}|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r4|	j| ndd q|d ||	j|t	|	j t	|	j
 t	|	j t	|	j t|dkrc|	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r]| jr9g 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 qE|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 qE||	}|r-|d ||	j|t	|	j t	|	j
 t	|	j t	|	j t|dkr%|	j| ndd qE|d ||	jt	|	j t	|	j
 t	|	j t	|	j t|dkrS|	j| ndd
 qE|S | jrlg d|d< d|d	< n
g d|d< d|d	< |D ]9}| j|  D ]-\}}	|sg }n|dd d }dd |D }| jrI||	}|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rA|	j| ndd q||	}|r|d ||	j||	|t	|	j t	|	j
 t	|	j t	|	j t|dkrz|	j| ndd	 q|d ||	j|t	|	j t	|	j
 t	|	j t	|	j t|dkr|	j| ndd qqx|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   ra   r\   r   rt   r   ru   rv   rw   r   r   r   r   rL   )r   Zdatasr   r   r   r   r|   r{   r   r   get_children_data  s6   









z:ProfilerData.get_operator_table.<locals>.get_children_datar   r   r   r   rj   Tr0   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   )rQ   rd   childrenr   r   r   r   r   r   r   r   r   r   )rQ   rd   r   r   r   r   r   r   )rQ   rd   input_shaper   r   r   r   r   r   r   r   r   r   )rQ   rd   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{}:{}r[   r`   r   r   shaper   r   r   r         z3ProfilerData.get_operator_table.<locals>.<listcomp>)rQ   rd   r   r   r   r   r   r   r   r   r   r   r   r   )	rQ   rd   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   /  r   c                 S   r   r   r   r   r   r   r   r     r   )r   r7   r   ra   r   r0   r   rL   rt   r   ru   rv   rw   r   r   r   r   r9   r   )rH   group_bysearch_namer{   r   r|   r}   r~   rQ   r   r   Zchildren_eventsnew_arrange_datar   r8   r   r   Zshape_stringZshapesresultsr   r   r   get_operator_table  s  *









#







!













   ]   








%







#











  ?  













#







"











 * 







'





%









 zProfilerData.get_operator_tablec           
      C   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 |	 q6|S )N
rQ   rd   re   rf   rg   rh   mean blocks per smmean est achieved occupancytensor core usedri   rj   r   c                 S   r   r   rs   r   r   r   r   r   ]  r   z-ProfilerData.get_kernel_pie.<locals>.<lambda>Tr   r   r   rQ   rd   re   rf   rg   rh   r   r   r   ri   )r   r   rA   r   rs   rt   r   rx   ry   rz   r   sum_blocks_per_smsum_occupancytensorcore_usedr   rL   )
rH   r   r{   r|   r   r   r~   kernel_namer   r   r   r   r   get_kernel_pieQ  sT   



zProfilerData.get_kernel_pie c                 C   s  t  }g |d< d}| j D ]	\}}||j7 }q|s9|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 |
 q3|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 rW|| qI|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 |
 qf|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   rj   c                 S   r   r   r   r   r   r   r   r     r   z/ProfilerData.get_kernel_table.<locals>.<lambda>Tr   rQ   rd   re   rf   rg   rh   r   r   r   ri   )rQ   rd   operatorgridblockregister per threadshared memoryre   rf   rg   rh   r   r   r   ri   c                 S   r   r   r   r   r   r   r   r     r   r[   r   r   r   r   r   c                 S   r   r   r   r   r   r   r   r     r   )r   rA   r   rs   r   rt   r   rx   ry   rz   r   r   r   r   r   rL   rB   r   )rH   r   r   r{   r|   r~   rQ   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  sz  



u



I







"



zProfilerData.get_kernel_tablec           
      C   s   t  }g d|d< g |d< t| j dd dd}|dkr |}n|d | }d	}d	}|D ]\}}	|	jr8||	j7 }||	j7 }q,|d d
|t|| d |d d|| t|| | d |S )N)rQ   rd   ri   rj   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   rA   r   r   rt   rL   r   )
rH   r   r{   r|   r   r   Ztotal_callsZtensorcore_callsr   r   r   r   r   get_kernel_tc_pie  s8   

zProfilerData.get_kernel_tc_piec                 C   s   | j jS r    )r.   rG   )rH   r   r   r   get_trace_dataD  s   zProfilerData.get_trace_datac              	   C   sX   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   rL   r   r?   r@   )rH   r|   r   r   r   r   get_memory_devicesG  s   

zProfilerData.get_memory_devicesc                 C   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PeakReservedrQ   c                 S      | d S )Nr   r   r   r   r   r   r   a      z/ProfilerData.get_memory_curve.<locals>.<lambda>r   r   r      r   )r;   r   r   rL   r   r   )rH   rO   r{   Zcurvesr|   r   r   Zsorted_eventsr   	timestampsize
event_namer   r   r   get_memory_curveV  s(   


zProfilerData.get_memory_curver   infc                    s  i }g d|d< g |d< | j | } fdd}t||}t|dd d}|s*|S d }	|D ]Q}
|
d	 rA|
d
 rA|
d
 |
d	  }	nd }	|d |
d |
d |
d |
d	 r[t|
d	 |nd |
d |
d
 rjt|
d
 |nd |	d urtt|	|nd t|
d dd q.|S )N)Z
MemoryAddr
MemoryTypeZAllocatedEventZAllocatedTimestampZ	FreeEventZFreeTimestampZDurationSizerj   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_funcz  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>   filterr   rL   r   r   )rH   rO   r   r   r   r{   r|   Zpaired_event_listr  durationr   r   r  r   get_memory_eventsl  s6   



zProfilerData.get_memory_eventsc                    s   i }g d|d< g |d< | j | } fdd}| j| }dd | D }|dd | D   r8t||}t|d	d
 dd}|sE|S |D ]"\}	}
|d |	|
j|
j|
j	t
|
jdt
|
jdt
|
jdd qG|S )N)Z	EventNamer   ZAllocationCountZ	FreeCountZAllocationSizeZFreeSizeZIncreasedSizerj   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   rL   Zmemory_typeZallocation_countZ
free_countr   Zallocation_sizeZ	free_sizer  )rH   rO   r   r|   Zallocated_eventsr  Zreserved_eventsZ
all_eventsr   r   r   r   r
  r   get_op_memory_events  s8   

	





z!ProfilerData.get_op_memory_eventsr   )r   Nr   )r   Nr   r    )__name__
__module____qualname____doc__rI   rM   r'   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r\   r	  r  r   r   r   r   r   )   sD    @UA0W6
HDe
     

. 
)

?r   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)rH   r!   r  r  r   r   r   rI     s   
z DistributedProfilerData.__init__c                 C   s   g }| j D ]I}|j}|s|  S 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{}rQ   rR   rS   rT   rU   rV   rW   z{}%)r"   r6   Z	device_idrQ   rY   ZcomputeCapabilityrZ   )r  r(   r]   r^   r_   rF   rL   r"   r`   r6   r   r   r5   )rH   r|   profile_datar(   rb   r   r   r   get_distributed_info  s,   




z,DistributedProfilerData.get_distributed_infor   c                 C   s&  i }g d|d< g |d< g |d< t t}| jD ]i}|d |j |dkr6|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)rX   CommunicationComputationOverlapOthersr   r"   r|   AllrX   r  Zcommunication_timer  Zcomputation_timer  Zoverlap_timer  r   )
r   r   r  rL   r"   r   r3   r   ra   r:   )rH   stepr{   r|   r   r  r   r   r   r   get_distributed_histogram  s`   
z1DistributedProfilerData.get_distributed_histogramc                 C   s<   | j D ]}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   -  s    zADistributedProfilerData.get_distributed_steps.<locals>.<listcomp>)r  r   r:   r   r   )rH   r  r   Zfinal_stepsr   r   r   get_distributed_steps)  s   
z-DistributedProfilerData.get_distributed_stepsNr  )r  r  r  r  rI   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>                ?