o
    &ÕjùS  ã                   @   sŠ   d dl 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 g d¢Zg d	¢Zg d
¢Z	G dd„ dƒZ
G dd„ dƒZG dd„ dƒZdS )é    Né   )Úmerge_ranges)Úmerge_self_ranges)Úrebuild_node_trees)Ú
sum_ranges)Útraverse_tree)Ú
DataloaderÚForwardÚBackwardÚOptimization)ÚOperatorZCudaRuntimeÚUserDefinedZOperatorInnerZCommunicationZPythonOpÚPythonUserDefinedZ
MluRuntime)ÚKernelZMemcpyZMemsetc                   @   s`   e Zd Zdd„ Zedd„ ƒZedd„ ƒZedd„ ƒZd	d
„ Zdd„ Z	dd„ Z
dd„ Zdd„ ZdS )ÚGeneralItemc                 C   sR   || _ d| _d| _d| _tdƒ| _d| _d| _tdƒ| _d| _	tdƒ| _
d| _d S ©Nr   Úinf)ÚnameÚcallÚcpu_timeÚmax_cpu_timeÚfloatÚmin_cpu_timeÚgpu_timeÚmax_gpu_timeÚmin_gpu_timeÚgeneral_gpu_timeÚmin_general_gpu_timeÚmax_general_gpu_time©Úselfr   © r!   ús/var/www/html/Deteccion_Ine/venv/lib/python3.10/site-packages/visualdl/component/profiler/parser/overview_parser.pyÚ__init__"   s   



zGeneralItem.__init__c                 C   ó   | j | j S ©N©r   r   ©r    r!   r!   r"   Úavg_cpu_time/   ó   zGeneralItem.avg_cpu_timec                 C   r$   r%   ©r   r   r'   r!   r!   r"   Úavg_gpu_time3   r)   zGeneralItem.avg_gpu_timec                 C   r$   r%   )r   r   r'   r!   r!   r"   Úavg_general_gpu_time7   r)   z GeneralItem.avg_general_gpu_timec                 C   ó2   || j kr|| _ || jk r|| _|  j|7  _d S r%   )r   r   r   ©r    Útimer!   r!   r"   Úadd_cpu_time;   ó
   

zGeneralItem.add_cpu_timec                 C   r-   r%   )r   r   r   r.   r!   r!   r"   Úadd_gpu_timeB   r1   zGeneralItem.add_gpu_timec                 C   r-   r%   )r   r   r   r.   r!   r!   r"   Úadd_general_gpu_timeI   r1   z GeneralItem.add_general_gpu_timec                 C   ó   |  j d7  _ d S ©Nr   ©r   r'   r!   r!   r"   Úadd_callP   ó   zGeneralItem.add_callc                 C   s0   |   ¡  |  |j¡ |  |j¡ |  |j¡ d S r%   )r7   r0   r   r2   r   r3   r   )r    Únoder!   r!   r"   Úadd_itemS   s   zGeneralItem.add_itemN)Ú__name__Ú
__module__Ú__qualname__r#   Úpropertyr(   r+   r,   r0   r2   r3   r7   r:   r!   r!   r!   r"   r   !   s    


r   c                   @   sL   e Zd Zdd„ Zedd„ ƒZedd„ ƒZdd„ Zd	d
„ Zdd„ Z	dd„ Z
dS )ÚModelPerspectiveItemc                 C   sH   || _ d| _d| _d| _tdƒ| _d| _d| _tdƒ| _i | _	i | _
d S r   )r   r   r   r   r   r   r   r   r   Ú	cpu_timesÚ	gpu_timesr   r!   r!   r"   r#   [   s   


zModelPerspectiveItem.__init__c                 C   r$   r%   r&   r'   r!   r!   r"   r(   g   r)   z!ModelPerspectiveItem.avg_cpu_timec                 C   r$   r%   r*   r'   r!   r!   r"   r+   k   r)   z!ModelPerspectiveItem.avg_gpu_timec                 C   r4   r5   r6   r'   r!   r!   r"   r7   o   r8   zModelPerspectiveItem.add_callc                 C   s:   |   ¡  || jkr|| _|| jk r|| _|  j|7  _d S r%   )r7   r   r   r   r.   r!   r!   r"   r0   r   s   

z!ModelPerspectiveItem.add_cpu_timec                 C   s(   || j kr|| _ || jk r|| _d S d S r%   )r   r   r.   r!   r!   r"   r2   z   s
   


ÿz!ModelPerspectiveItem.add_gpu_timec                 C   s
   || _ dS )zm
        Use this to set total gpu time in case gpu time calculated by add_gpu_time include overlap.
        N)r   r.   r!   r!   r"   Úset_gpu_time€   s   
z!ModelPerspectiveItem.set_gpu_timeN)r;   r<   r=   r#   r>   r(   r+   r7   r0   r2   rB   r!   r!   r!   r"   r?   Z   s    

r?   c                   @   sL   e Zd ZdZdd„ Zdd„ Z	ddd„Zd	d
„ Zdd„ Zdd„ Z	dd„ Z
dS )ÚOverviewParserzO
    Analyse time ranges for each TracerEventType, and summarize the time.
    c                 C   sN   i | _ i | _i | _t dd„ ¡| _t dd„ ¡| _d| _d| _d| _	d| _
d S )Nc                   S   ó   t  dd„ ¡S )Nc                   S   rD   )Nc                   S   rD   )Nc                   S   rD   )Nc                   S   ó
   t  t¡S r%   ©ÚcollectionsÚdefaultdictÚlistr!   r!   r!   r"   Ú<lambda>š   ó    zqOverviewParser.__init__.<locals>.<lambda>.<locals>.<lambda>.<locals>.<lambda>.<locals>.<lambda>.<locals>.<lambda>©rG   rH   r!   r!   r!   r"   rJ   š   ó    ú_OverviewParser.__init__.<locals>.<lambda>.<locals>.<lambda>.<locals>.<lambda>.<locals>.<lambda>rL   r!   r!   r!   r"   rJ   ™   ó    ÿúMOverviewParser.__init__.<locals>.<lambda>.<locals>.<lambda>.<locals>.<lambda>rL   r!   r!   r!   r"   rJ   ˜   rO   ú;OverviewParser.__init__.<locals>.<lambda>.<locals>.<lambda>rL   r!   r!   r!   r"   rJ   ˜   rM   z)OverviewParser.__init__.<locals>.<lambda>c                   S   rD   )Nc                   S   rD   )Nc                   S   rD   )Nc                   S   rE   r%   rF   r!   r!   r!   r"   rJ   ¤   rK   rN   rL   r!   r!   r!   r"   rJ   ¤   rM   rP   rL   r!   r!   r!   r"   rJ   £   rO   rQ   rL   r!   r!   r!   r"   rJ   £   rM   r   g        F)Úmemory_manipulation_itemsÚuserdefined_itemsÚmodel_perspective_itemsrG   rH   Úevents_per_stageÚmerged_events_per_stageÚ
stage_numsÚgpu_ulitizationÚhas_forwardÚ
has_devicer'   r!   r!   r"   r#   Œ   s   ÿÿ
zOverviewParser.__init__c                 C   s†  |   |¡ | j ¡ D ]š\}}| ¡ D ]‘\}}| ¡ D ]ˆ\}}| ¡ D ]\}}	|	 ¡ D ]v\}
}d| j| | | |
 vrHd| j| | | |
 d< d| j| | | |
 vrbd| j| | | |
 d< t|d dd|d< | j| | | |
 d  t|d ƒ7  < t| j| | | |
 d |d dd| j| | | |
 d< q*q"qqq
t| j ¡ ƒ}| jd	  |D ]¤}| j| }| ¡ D ]˜\}}| ¡ D ]\}}	|	 ¡ D ]†\}
}t	|d ƒ|d< d| jd	 | | |
 vrôd| jd	 | | |
 d< d| jd	 | | |
 vrd| jd	 | | |
 d< | jd	 | | |
 d  |d 7  < | jd	 | | |
 d  |d 7  < t| jd	 | | |
 d |d dd| jd	 | | |
 d< qÎqÆq¾q³| j ¡ D ]I\}}| ¡ D ]?\}}| ¡ D ]5\}}	d
|	v r¡|dkr‰| j
|  |	d
 d ¡ qm| j
|  |	d
 d ¡ |	d
 d | j
| j|< qmqeq]| jrÁ| jd	 d d d
 d | j
d	 j | _dS dS )zm
        Analysis node trees in profiler result, and get time range for different tracer event type.
        Zcallsr   Ú
total_timeÚtimesF)Z	is_sortedÚeventsTÚProfileStepr   ÚALLÚGPUN)Ú_parse_eventsrU   ÚitemsrV   r   Úlenr   rI   Úkeysr   rT   rB   r2   rA   rZ   r   rX   )r    Ú	nodetreesÚ
stage_nameZ
stage_dataZdevice_nameZ
steps_dataZstep_idxZthread_dataÚ	thread_idr]   Z
event_typeZevents_dataZstage_namesr!   r!   r"   Úparse¬   s  
ÿÿÿþþÿÿÿþÿÿÿþþÿÿÿþ
ÿÿÿÿþ
þþÿîÿÿÿ

ÿÿÿÿþÿÿÿÿÿÿÿÿþþÿÿÿþÿÿÿþþÿÿÿþþÿÿÿþûþÿÿÿþìÿÿ 

ÿ
ÿ

ÿ

ÿÿ€÷ÿÿÿÿþÿ
ýÿzOverviewParser.parseTc                 C   sŠ  |j dkrd}d| _n|j dkrd}n|j dkrd}n
|j dkr#d}nd}|r‚g }|j tv r;|jD ]}| |¡ q2n| |¡ |r€| ¡ }|jD ]}| |¡ qJ|jD ]»}	| j| d | |	j |	j  d  |	¡ | j| d | |	j |	j  d	  |	j	|	j
f¡ | j| d d
 |	j |	j  d  |	¡ | j| d d
 |	j |	j  d	  |	j	|	j
f¡ |	jD ]]}
d| _| j| d | |
j |
j  d  |
¡ | j| d | |
j |
j  d	  |
j	|
j
f¡ | j| d d
 |
j |
j  d  |
¡ | j| d d
 |
j |
j  d	  |
j	|
j
f¡ q²qU|j dks|j dkrq@|j }|dkr(d}| j| d | |j | d  |¡ | j| d | |j | d	  |j	|j
f¡ | j| d d
 |j | d  |¡ | j| d d
 |j | d	  |j	|j
f¡ |sCd S d S |jD ]½}	| j| d | |	j |	j  d  |	¡ | j| d | |	j |	j  d	  |	j	|	j
f¡ | j| d d
 |	j |	j  d  |	¡ | j| d d
 |	j |	j  d	  |	j	|	j
f¡ |	jD ]^}
d| _| j| d | |
j |
j  d  |
¡ | j| d | |
j |
j  d	  |
j	|
j
f¡ | j| d d
 |
j |
j  d  |
¡ | j| d d
 |
j |
j  d	  |
j	|
j
f¡ qâq…d S )Nr	   Tr
   r   r   ÚOtherZCPUr]   r\   r_   r`   r   r   )ÚtyperY   Ú	StageTypeÚchildren_nodeÚappendÚpopZruntime_noderU   rg   Zstart_nsZend_nsZdevice_noderZ   Z	stream_id)r    r9   Ú	stage_idxÚshould_recursiverf   ÚstackÚchildrenZcurrent_nodeZ	childnodeZruntimenodeZ
devicenodeZ	node_typer!   r!   r"   Ú_fill_stage_events  sÀ  





ÿ


ÿþþÿþþ
ÿÿþþÿþþ
ÿ
ÿþþÿþþ
ÿÿþþÿþþ
ÿò
ÿÿÿÿÿÿÿ
ÿÿÿÿÿÿÿÿ
ÿÎ
6ÿÿÿÿÿÿÿ
ÿÿÿÿÿÿÿÿ
ÿ
ÿþþÿÿÿ
ÿÿþþÿÿÿ
ÿôóz!OverviewParser._fill_stage_eventsc                 C   sÌ  t |ƒ}t|ƒ}| ¡ D ]\}}|dd … D ]}|jdkr"|  |¡ qqd}| ¡ D ]¹\}}|d7 }g }	|jD ]}|	 |¡ q7d| _d }
|	D ]”}|jdkrÔ|j| _|j	 
d¡d }d}d}|dkrr|  |¡ |j| jd j|< |j}|  jd7  _|jD ]*}|dkr |  |¡ |jtv r–|j| j|j j|< |jtv r ||j7 }|  ||¡ q|d| jvr³tdƒ| jd< |dkrË| jd  || ¡ || | jd j|< | j||dd qF|  ||
¡ qF| j||
dd q*d S )	Nr   r   r   r^   ú#ri   F)rp   )r   r   rb   rj   Úadd_userdefined_itemrl   rm   rW   Z
process_idr   ÚsplitÚadd_model_perspective_itemr   rT   r@   rk   rs   r?   r0   )r    re   Znode_wrapped_treesZnode_wrapped_threadlistZthreadidZwrapped_nodesZwrapped_nodeZthread_countZroot_wrapped_nodeZwrapped_profiler_step_nodesZcurrent_stage_idxZwrapped_profiler_step_nodero   r[   Zaccumulated_stage_timeZstage_wrapped_noder!   r!   r"   ra   n  sŽ   

€þ

ÿ
ÿÿ


þÿþ


ÿÿ
ÿ
ÿÿýÿÿÓzOverviewParser._parse_eventsc                 C   ó4   |j | jvrt|j ƒ| j|j < | j|j   |¡ d S r%   )r   rS   r   r:   )r    Zuserdefined_noder!   r!   r"   ru   ©  s   ÿÿz#OverviewParser.add_userdefined_itemc                 C   rx   r%   )r   rR   r   r:   )r    Zmemory_manipulation_noder!   r!   r"   Úadd_memory_manipulation_item°  s   ÿÿÿÿz+OverviewParser.add_memory_manipulation_itemc                 C   s‚   |j dkrd}n"|j dkrd}n|j dkrd}n|j dkr d}n
|j dkr(d}nd S || jvr6t|ƒ| j|< | j|  |j¡ d S )Nr	   r
   r   r   r^   )rj   rT   r?   r0   r   )r    Zmodel_perspective_noder   r!   r!   r"   rw   ¸  s    






ÿz)OverviewParser.add_model_perspective_itemN)T)r;   r<   r=   Ú__doc__r#   rh   rs   ra   ru   ry   rw   r!   r!   r!   r"   rC   ‡   s     \
ÿg;rC   )rG   Úutilsr   r   r   r   r   rk   ZCPUTypeZGPUTyper   r?   rC   r!   r!   r!   r"   Ú<module>   s   9-