Ë
    •\;jÐL ã                   ó   — d dl Z d dlZd dlmZ d dlmZmZ d dlmZ ddl	m
Z
mZmZmZ ej                  ej                  ej                   ej"                  ej$                  ej&                  ej(                  ej*                  ej,                  ej.                  ej0                  ej2                  ej4                  ej6                  ej8                  gZg d¢Z G d„ d	e«      Zd
„ Z  G d„ d«      Z!d„ Z"d„ Z#d„ Z$d%d„Z%d%d„Z&d&d„Z'd&d„Z(d„ Z) G d„ d«      Z* G d„ d«      Z+ G d„ d«      Z, G d„ d«      Z- G d„ d«      Z.ej^                  dd d!d"d#dfd$„Z0y)'é    N)ÚEnum)ÚTracerEventTypeÚTracerMemEventType)Úflopsé   )Úintersection_rangesÚmerge_rangesÚmerge_self_rangesÚ
sum_ranges)Ú	allreduceÚ	broadcastÚrpcc                   ó0   — e Zd ZdZdZdZdZdZdZdZ	dZ
d	Zy
)Ú
SortedKeysaw  
    SortedKeys is used to specify how to sort items when printing ``paddle.profiler.Profiler.summary`` table.

    The meaning of each SortedKeys is as following

    - **SortedKeys.CPUTotal** :  Sorted by CPU total time.

    - **SortedKeys.CPUAvg**  : Sorted by CPU average time.

    - **SortedKeys.CPUMax**  : Sorted by CPU max time.

    - **SortedKeys.CPUMin**  : Sorted by CPU min time.

    - **SortedKeys.GPUTotal**  : Sorted by GPU total time.

    - **SortedKeys.GPUAvg**  : Sorted by GPU average time.

    - **SortedKeys.GPUMax**  : Sorted by GPU max time.

    - **SortedKeys.GPUMin**  : Sorted by GPU min time.
    r   r   é   é   é   é   é   é   N)Ú__name__Ú
__module__Ú__qualname__Ú__doc__ÚCPUTotalÚCPUAvgÚCPUMaxÚCPUMinÚGPUTotalÚGPUAvgÚGPUMaxÚGPUMin© ó    úkG:\00. PROJECTS\API\Inventory\templateJSON\kerjaOCR\Lib\site-packages\paddle/profiler/profiler_statistic.pyr   r   1   s1   „ ñð* €HØ€FØ€FØ€FØ€HØ€FØ€FØ�Fr$   r   c                 ór   — | j                  dd«      }|j                  dd«      }|j                  dd«      }|S )z8
    convert static host node name to operator name
    z computeÚ z dygraphz pybind_imperative_func)Úreplace)ÚnameÚop_names     r%   Ú_nodename2opnamer+   Q   s:   € ð �l‰l˜: rÓ*€GØ�o‰o˜j¨"Ó-€GØ�o‰oÐ7¸Ó<€GØ€Nr$   c                   óH   — e Zd ZdZd„ Zd„ Zd„ Zed„ «       Zed„ «       Z	d„ Z
y)	ÚHostStatisticNodez?
    Wrap original node for calculating statistic metrics.
    c                 ó�   — || _         g | _        g | _        d| _        d| _        d| _        d| _        d| _        d| _        d| _	        y ©Nr   )
ÚhostnodeÚchildren_nodeÚruntime_nodeÚcpu_timeÚself_cpu_timeÚgpu_timeÚself_gpu_timeÚgeneral_gpu_timeÚself_general_gpu_timer   )Úselfr0   s     r%   Ú__init__zHostStatisticNode.__init__`   sN   € Ø ˆŒØˆÔØˆÔØˆŒØˆÔØˆŒØˆÔØ !ˆÔØ%&ˆÔ"Øˆ�
r$   c                 ó4  — | j                   j                  t        j                  k(  rqt	        | j                   d«      rZt        | j                   j                  «      }t        || j                   j                  | j                   j                  «      | _        y y y )NÚinput_shapes)
r0   Útyper   ÚOperatorÚhasattrr+   r)   r   r<   Ú
attributes)r9   r*   s     r%   Ú	cal_flopszHostStatisticNode.cal_flopsl   so   € Ø�=‰=×Ñ¤×!9Ñ!9Ò9Ü�t—}‘} nÔ5Ü*¨4¯=©=×+=Ñ+=Ó>�Ü"ØØ—M‘M×.Ñ.Ø—M‘M×,Ñ,ó�•
ð 6ð :r$   c                 ó€  — | j                   j                  | j                   j                  z
  | _        | j                  | _        | j                  «        | j                  D ]«  }|j                  «        |j                  «        | xj                  |j                  z  c_        | xj                  |j                  z  c_	        | xj                  |j                  |j                  z
  z  c_        | xj                  |j                  z  c_
        Œ­ | j                  D ]º  }|j                  «        | xj                  |j                  |j                  z
  z  c_        | xj                  |j                  z  c_        | xj                  |j                  z  c_        | xj                  |j                  z  c_	        | xj                  |j                  z  c_        Œ¼ | j                   j                  D ]Ï  }|j                  t         j"                  k(  rX| xj                  |j                  |j                  z
  z  c_        | xj                  |j                  |j                  z
  z  c_        | xj                  |j                  |j                  z
  z  c_	        | xj                  |j                  |j                  z
  z  c_        ŒÑ y ©N)r0   Úend_nsÚstart_nsr3   r4   rA   r1   Úcal_statisticr5   r7   r   r2   r6   r8   Údevice_noder=   r   ÚKernel)r9   ÚchildÚrtÚdevices       r%   rF   zHostStatisticNode.cal_statisticv   så  € ØŸ™×,Ñ,¨t¯}©}×/EÑ/EÑEˆŒØ!Ÿ]™]ˆÔØ�‰ÔØ×'Ô'ˆEØ�O‰OÔØ×ÑÔ!Ø�MŠM˜UŸ^™^Ñ+�MØ×!Ò! U×%;Ñ%;Ñ;Õ!Ø×Ò %§,¡,°·±Ñ"?Ñ?ÕØ�JŠJ˜%Ÿ+™+Ñ%ŽJð (ð ×#Ô#ˆBØ×ÑÔØ×Ò "§)¡)¨b¯k©kÑ"9Ñ9ÕØ�MŠM˜RŸ[™[Ñ(�MØ×Ò "§+¡+Ñ-ÕØ×!Ò! R×%8Ñ%8Ñ8Õ!Ø×&Ò&¨"×*=Ñ*=Ñ=Ö&ð $ð —m‘m×/Ô/ˆFØ�{‰{œo×4Ñ4Ò4Ø—’ §¡°·±Ñ!@Ñ@•Ø×"Ò" f§m¡m°f·o±oÑ&EÑEÕ"Ø×!Ò! V§]¡]°V·_±_Ñ%DÑDÕ!Ø×&Ò&¨&¯-©-¸&¿/¹/Ñ*IÑIÖ&ñ 0r$   c                 ó.   — | j                   j                  S rC   )r0   rD   ©r9   s    r%   rD   zHostStatisticNode.end_ns‘   s   € à�}‰}×#Ñ#Ð#r$   c                 ó.   — | j                   j                  S rC   )r0   rE   rM   s    r%   rE   zHostStatisticNode.start_ns•   s   € à�}‰}×%Ñ%Ð%r$   c                 ó.   — t        | j                  |«      S rC   )Úgetattrr0   ©r9   r)   s     r%   Ú__getattr__zHostStatisticNode.__getattr__™   s   € Ü�t—}‘} dÓ+Ð+r$   N)r   r   r   r   r:   rA   rF   ÚpropertyrD   rE   rR   r#   r$   r%   r-   r-   [   sD   „ ñò
òòJð6 ñ$ó ð$ð ñ&ó ð&ó,r$   r-   c                 ó*  — t        j                  t        «      }| j                  «       D ]f  \  }}g }|j	                  |«       ||   }|sŒ!|j                  «       }|j	                  |«       |j                  D ]  }|j	                  |«       Œ |rŒFŒh |S rC   )ÚcollectionsÚdefaultdictÚlistÚitemsÚappendÚpopr1   )Ú	nodetreesÚresultsÚ	thread_idÚrootnodeÚstackÚ
threadlistÚcurrent_nodeÚ	childnodes           r%   Útraverse_treerc   �   s‡   € Ü×%Ñ%¤dÓ+€GØ(Ÿ™Ö0Ñˆ	�8ØˆØ�‰�XÔØ˜YÑ'ˆ
ÚØ Ÿ9™9›;ˆLØ×Ñ˜lÔ+Ø)×7Ô7�	Ø—‘˜YÕ'ð 8ó ð	  1ð €Nr$   c                 ó  — g }g }|j                  | «       |rh|j                  «       }|j                  D ]  }|j                  |«       Œ |j                  D ]$  }|j                  D ]  }|j                  |«       Œ Œ& |rŒh|S )zD
    Get all device nodes called in the time range of hostnode.
    )rY   rZ   r1   r2   rG   )r0   r_   Údevice_nodesra   rb   ÚruntimenodeÚ
devicenodes          r%   Úget_device_nodesrh   «   s   € ð €EØ€LØ	‡L�L�ÔÙ
Ø—y‘y“{ˆØ%×3Ô3ˆIØ�L‰L˜Õ#ð 4à'×4Ô4ˆKØ)×5Ô5�
Ø×#Ñ# JÕ/ñ 6ð 5ò	 ð Ðr$   c                 ó€   ‡— dˆfd„	Šg }| j                  «       D ]!  \  }} ‰|«      \  }}|j                  |«       Œ# |S )Nc                 ó   •— d| j                   v rg dfS | j                  t        j                  t        j                  fv rg dfS | j                  t        j
                  k(  r)t        | «      }|j                  «        ||j                  fS g }d}| j                  D ]*  } ‰||dz   «      \  }}|sŒ||z  }|j                  |«       Œ, | j                  t        j                  k(  r(t        | «      }|j                  «        ||_        ||g|fS ||fS )NÚGradNoder   r   )r)   r=   r   ÚBackwardÚOptimizationr>   r-   rF   r   r1   rY   ÚForward)	ÚnodeÚdepthÚ	stat_nodeÚlayerÚnflopsÚcÚlÚfÚbuild_layers	           €r%   rw   z+_build_layer_from_tree.<locals>.build_layer½   s  ø€ Ø˜Ÿ™Ñ"Ø�q�5ˆLà�9‰9Ü×$Ñ$Ü×(Ñ(ð
ñ 
ð �q�5ˆLà�9‰9œ×0Ñ0Ò0Ü)¨$Ó/ˆIØ×#Ñ#Ô%Ø˜iŸo™oÐ-Ð-àˆØˆØ×#Ô#ˆAÙ˜q %¨!¡)Ó,‰DˆAˆqÚØ˜!‘�Ø—‘˜Q•ð	 $ð �9‰9œ×/Ñ/Ò/Ü)¨$Ó/ˆIØ×#Ñ#Ô%Ø$ˆIŒOØ˜uÐ% vÐ-Ð-à�fˆ}Ðr$   ©r   )rX   rY   )r[   ÚretÚ_r^   rr   rw   s        @r%   Ú_build_layer_from_treer{   ¼   sE   ø€ õð> €CØ —‘Ö(‰ˆˆ8Ù˜xÓ(‰ˆˆqØ�
‰
�5Õð )ð €Jr$   c                 óì   — | dz  dkD  rt        | dz  |«      › d�S | dz  dkD  rt        | dz  |«      › d�S | dz  dkD  rt        | dz  |«      › d�S | dz  dkD  rt        | dz  |«      › d	�S t        | |«      › S )
Ng   ¢”mBr   z Tç    eÍÍAz Gç    €„.Az Mç     @�@z K©Úround©ÚnÚ	precisions     r%   Ú_format_large_numberr…   ä   s¢   € ØˆD�y�1‚}Ü˜˜D™ )Ó,Ð-¨RÐ0Ð0ØˆC�x�!‚|Ü˜˜C™ Ó+Ð,¨BÐ/Ð/ØˆC�x�!‚|Ü˜˜C™ Ó+Ð,¨BÐ/Ð/ØˆC�x�!‚|Ü˜˜C™ Ó+Ð,¨BÐ/Ð/Ü�A�yÓ!Ð"Ð#r$   c                 ó¼   — | dz  dkD  rt        | dz  |«      › d�S | dz  dkD  rt        | dz  |«      › d�S | dz  dkD  rt        | dz  |«      › d�S t        | |«      › d�S )	Nr}   r   z sr~   z msr   z usz nsr€   r‚   s     r%   Ú_format_timer‡   ð   sƒ   € ØˆC�x�!‚|Ü˜˜C™ Ó+Ð,¨BÐ/Ð/ØˆC�x�!‚|Ü˜˜C™ Ó+Ð,¨CÐ0Ð0ØˆC�x�!‚|Ü˜˜C™ Ó+Ð,¨CÐ0Ð0Ü�A�yÓ!Ð" #Ð&Ð&r$   c                 ór   ‡‡‡‡‡— g Šg Šg Šdˆˆˆˆˆfd„	Š| dd  D ]
  } ‰|«       Œ dj                  ‰«      S )Nc                 ó¸  •— t        | t        «      r| D ]  } ‰
||dz   «       Œ y | j                  t        j                  t        j
                  fv �rt        ‰	«      dk(  r‰	j                  |«       t        | j                  «      }|‰	d   k(  r3t        ‰«      dkD  r%‰d   j                  |«      r‰j                  d«       t        ‰«      ‰k\  rdj                  ‰«      S d|‰	d   z
  z  }t        | j                  «      }t        | j                  «      }t        | j                  dz  | j                  z  «      }‰j                  |› |› d|› d|› d	|› d
�	«       y y )Nr   r   éÿÿÿÿr'   Ú r}   z
 latency: z	, FLOPs: z	, FLOPS: Ú
)Ú
isinstancerW   r=   r   rn   r>   ÚlenrY   r+   r)   Ú
startswithÚjoinr‡   r3   r…   r   )ro   rp   rƒ   r)   ÚalignÚtmÚflops_nÚflops_sÚloopÚoffsetÚprint_layer_treeÚrepeatry   s           €€€€€r%   r—   z*_gen_layer_flops.<locals>.print_layer_treeÿ   s6  ø€ Ü�dœDÔ!Û�Ù   E¨A¡IÕ.ñ ð �Y‰Yœ?×2Ñ2´O×4LÑ4LÐMÒMÜ�6‹{˜aÒØ—‘˜eÔ$ä# D§I¡IÓ.ˆDð ˜ ™Ò#¬¨C«°1ª¸¸Q¹×9JÑ9JÈ4Ô9Pà—‘˜A”ä�4‹y˜FÒ"Ø—w‘w˜s“|Ð#à˜5 6¨"¡:Ñ-Ñ.ˆEÜ˜dŸm™mÓ,ˆBÜ*¨4¯:©:Ó6ˆGÜ*¨4¯:©:¸Ñ+;¸d¿m¹mÑ+KÓLˆGØ�J‰JØ�'˜$˜˜z¨"¨¨Y°w°i¸yÈÈ	ÐQSÐTõð% Nr$   r   r'   rx   )r�   )ro   r˜   rƒ   r•   r–   r—   ry   s    ` @@@@r%   Ú_gen_layer_flopsr™   ú   sF   ü€ Ø
€CØ€FØ€D÷ñ ð6 �!�"‹XˆÙ˜Õð ð �7‰7�3‹<Ðr$   c                 ó0   — t        | «      }t        ||«      S )zV
    gen_layer_flops generate flops/runtime information depend on layer/operator.
    )r{   r™   )r[   r˜   Ú
layer_trees      r%   Úgen_layer_flopsrœ      s   € ô (¨	Ó2€JÜ˜J¨Ó/Ð/r$   c                 ó&  — i }t        j                  t        «      }t        j                  t        «      }| j                  «       D �]  \  }}g }|j	                  |«       t        |«      }g }|j	                  |«       |||<   ||   }	||   }
|sŒJ|j                  «       }|	j	                  |«       |j                  «       }|
j	                  |«       |j                  D ]J  }|j	                  |«       t        |«      }|j                  j	                  |«       |j	                  |«       ŒL |j                  D ](  }t        |«      }|j                  j	                  |«       Œ* |rŒÕ�Œ! |j                  «       D ]  \  }}|j                  «        Œ ||fS )zn
    Using HostStatisticNode to wrap original profiler result tree, and calculate node statistic metrics.
    )
rU   rV   rW   rX   rY   r-   rZ   r1   r2   rF   )r[   Únode_statistic_treer\   Ú
newresultsr]   r^   r_   Úroot_statistic_nodeÚnewstackr`   Únewthreadlistra   Úcurrent_statistic_noderb   Úchild_statistic_noderf   Úruntime_statistic_nodes                    r%   Ú	wrap_treer¦   (  s  € ð ÐÜ×%Ñ%¤dÓ+€GÜ×(Ñ(¬Ó.€JØ(Ÿ™×0Ñˆ	�8ØˆØ�‰�XÔÜ/°Ó9ÐØˆØ�‰Ð+Ô,Ø)<Ð˜IÑ&Ø˜YÑ'ˆ
Ø" 9Ñ-ˆÚØ Ÿ9™9›;ˆLØ×Ñ˜lÔ+Ø%-§\¡\£^Ð"Ø× Ñ Ð!7Ô8Ø)×7Ô7�	Ø—‘˜YÔ'Ü'8¸Ó'CÐ$Ø&×4Ñ4×;Ñ;Ø(ôð —‘Ð 4Õ5ð 8ð  ,×8Ô8�Ü):¸;Ó)GÐ&Ø&×3Ñ3×:Ñ:Ø*õð  9ô ð  1ð6 +>×*CÑ*CÖ*EÑ&ˆ	Ð&Ø×)Ñ)Õ+ð +Fð  
Ð*Ð*r$   c                   ó.   — e Zd ZdZd„ Zd„ Zd„ Zd„ Zd„ Zy)ÚTimeRangeSummaryzO
    Analyse time ranges for each TracerEventType, and summarize the time.
    c                 ó$  — t        j                  t        «      | _        t        j                  d„ «      | _        t        j                  t
        «      | _        t        j                  d„ «      | _        t        j                  t
        «      | _        y )Nc                  ó4   — t        j                  t        «      S rC   ©rU   rV   rW   r#   r$   r%   Ú<lambda>z+TimeRangeSummary.__init__.<locals>.<lambda>X  s   € ”K×+Ñ+¬DÔ1r$   c                  ó4   — t        j                  t        «      S rC   )rU   rV   Úintr#   r$   r%   r¬   z+TimeRangeSummary.__init__.<locals>.<lambda>\  s   € ”K×+Ñ+¬CÔ0r$   )	rU   rV   rW   ÚCPUTimeRangeÚGPUTimeRanger®   ÚCPUTimeRangeSumÚGPUTimeRangeSumÚ
call_timesrM   s    r%   r:   zTimeRangeSummary.__init__U  sj   € Ü'×3Ñ3´DÓ9ˆÔÜ'×3Ñ3Ù1ó
ˆÔô  +×6Ñ6´sÓ;ˆÔÜ*×6Ñ6Ù0ó 
ˆÔô &×1Ñ1´#Ó6ˆ�r$   c           	      óø  — t        |«      }|j                  «       D �]L  \  }}t        j                  t        «      }t        j                  d„ «      }|dd D �]>  }||j
                     j                  |j                  |j                  f«       | j                  |j
                  xx   dz  cc<   |j                  D ]×  }||j
                     j                  |j                  |j                  f«       | j                  |j
                  xx   dz  cc<   |j                  D ]q  }	||	j                     |	j
                     |	j                     j                  |	j                  |	j                  f«       | j                  |	j
                  xx   dz  cc<   Œs ŒÙ �ŒA |j                  «       D ]:  \  }
}t        |d¬«      }t        | j                   |
   |d¬«      | j                   |
<   Œ< |j                  «       D ]p  \  }}|j                  «       D ]X  \  }
}|j                  «       D ]@  \  }}t        |d¬«      }t        | j"                  |   |
   |d¬«      | j"                  |   |
<   ŒB ŒZ Œr �ŒO | j                   j                  «       D ]  \  }
}t%        |«      | j&                  |
<   Œ | j"                  j                  «       D ]8  \  }}|j                  «       D ]   \  }
}t%        |«      | j(                  |   |
<   Œ" Œ: y)zm
        Analysis node trees in profiler result, and get time range for different tracer event type.
        c                  ó.   — t        j                  d„ «      S )Nc                  ó4   — t        j                  t        «      S rC   r«   r#   r$   r%   r¬   z:TimeRangeSummary.parse.<locals>.<lambda>.<locals>.<lambda>i  s   € œK×3Ñ3´DÔ9r$   )rU   rV   r#   r$   r%   r¬   z(TimeRangeSummary.parse.<locals>.<lambda>h  s   € œ×/Ñ/Ù9ôr$   r   NF©Ú	is_sortedT)rc   rX   rU   rV   rW   r=   rY   rE   rD   r³   r2   rG   Ú	device_idÚ	stream_idr
   r	   r¯   r°   r   r±   r²   )r9   r[   Úthread2hostnodesÚthreadidÚ	hostnodesr¯   r°   r0   rf   rg   Ú
event_typeÚtime_rangesr¹   Údevice_time_rangesÚevent_time_rangesrº   s                   r%   ÚparsezTimeRangeSummary.parse`  sÓ  € ô )¨Ó3ÐØ#3×#9Ñ#9×#;ÑˆH�iÜ&×2Ñ2´4Ó8ˆLÜ&×2Ñ2ñóˆLð
 & a bœM�Ø˜XŸ]™]Ñ+×2Ñ2Ø×&Ñ&¨¯©Ð8ôð —‘ §¡Ó.°!Ñ3Ó.Ø#+×#8Ô#8�KØ  ×!1Ñ!1Ñ2×9Ñ9Ø$×-Ñ-¨{×/AÑ/AÐBôð —O‘O K×$4Ñ$4Ó5¸Ñ:Ó5Ø&1×&=Ô&=˜
Ø$ Z×%9Ñ%9Ñ:¸:¿?¹?ÑKØ&×0Ñ0ñç ™& *×"5Ñ"5°z×7HÑ7HÐ!IÔJØŸ™¨
¯©Ó8¸AÑ=Ô8ñ	 '>ò $9ð *ð  ,8×+=Ñ+=Ö+?Ñ'�
˜KÜ/°ÀuÔM�Ü0<Ø×%Ñ% jÑ1°;È$ô1�×!Ñ! *Ò-ð ,@ð
 2>×1CÑ1CÖ1EÑ-�	Ð-Ø5G×5MÑ5MÖ5OÑ1�JÐ 1Ø2C×2IÑ2IÖ2KÑ.˜	 ;Ü&7Ø'°5ô'˜ô DPØ ×-Ñ-¨iÑ8¸ÑDØ'Ø&*ôD˜×)Ñ)¨)Ñ4°ZÒ@ñ	 3Lñ 6Pò 2Fð9 $<ðP (,×'8Ñ'8×'>Ñ'>Ö'@Ñ#ˆJ˜Ü/9¸+Ó/FˆD× Ñ  Ò,ð (Aà-1×->Ñ->×-DÑ-DÖ-FÑ)ˆIÐ)Ø+=×+CÑ+CÖ+EÑ'�
˜KÜ>HØó?�×$Ñ$ YÑ/°
Ò;ñ ,Fñ .Gr$   c                 ó6   — | j                   j                  «       S rC   )r°   ÚkeysrM   s    r%   Úget_gpu_devicesz TimeRangeSummary.get_gpu_devices•  s   € Ø× Ñ ×%Ñ%Ó'Ð'r$   c                 ó&   — | j                   |   |   S rC   )r²   )r9   r¹   r¾   s      r%   Úget_gpu_range_sumz"TimeRangeSummary.get_gpu_range_sum˜  s   € Ø×#Ñ# IÑ.¨zÑ:Ð:r$   c                 ó    — | j                   |   S rC   )r±   )r9   r¾   s     r%   Úget_cpu_range_sumz"TimeRangeSummary.get_cpu_range_sum›  s   € Ø×#Ñ# JÑ/Ð/r$   N)	r   r   r   r   r:   rÂ   rÅ   rÇ   rÉ   r#   r$   r%   r¨   r¨   P  s!   „ ñò	7ò3òj(ò;ó0r$   r¨   c                   ó   — e Zd ZdZd„ Zd„ Zy)ÚDistributedSummaryz¢
    Analysis communication and computation time range, and their overlap.
    The computation time is all kernel except kernels for communication like nccl.
    c                 óf   — g | _         g | _        g | _        g | _        g | _        d| _        d| _        y r/   )Úcpu_communication_rangeÚgpu_communication_rangeÚcommunication_rangeÚcomputation_rangeÚoverlap_rangeÚ	cpu_callsÚ	gpu_callsrM   s    r%   r:   zDistributedSummary.__init__¥  s8   € Ø')ˆÔ$Ø')ˆÔ$Ø#%ˆÔ Ø!#ˆÔØˆÔØˆŒØˆ�r$   c                 ó´  ‡
— t        |«      }|j                  «       D �]P  \  }}|dd D �]A  Š
‰
j                  t        j                  k(  r“| j
                  j                  ‰
j                  ‰
j                  f«       t        ‰
«      }|D ]Q  }|j                  t        j                  k(  sŒ!| j                  j                  |j                  |j                  f«       ŒS Œ´‰
j                  t        j                  k(  r¬t        ˆ
fd„t        D «       «      r”| j
                  j                  ‰
j                  ‰
j                  f«       t        ‰
«      }|D ]Q  }|j                  t        j                  k(  sŒ!| j                  j                  |j                  |j                  f«       ŒS �Œ}‰
j                  D ]¶  }|j                   D ]¥  }|j                  t        j                  k(  sŒ!|j"                  j%                  «       }	d|	v sd|	v r2| j                  j                  |j                  |j                  f«       Œu| j&                  j                  |j                  |j                  f«       Œ§ Œ¸ �ŒD �ŒS t)        t+        | j
                  «      «      | _        t)        t+        | j                  «      «      | _        t1        | j
                  d¬«      | _        t1        | j                  d¬«      | _        t3        | j
                  | j                  d¬«      | _        t1        | j&                  d¬«      | _        t7        | j4                  | j&                  d¬«      | _        y)	zH
        Collect all communication and computation time ranges.
        r   Nc              3   óV   •K  — | ]   }|‰j                   j                  «       v –— Œ" y ­wrC   )r)   Úlower)Ú.0r)   r0   s     €r%   Ú	<genexpr>z+DistributedSummary.parse.<locals>.<genexpr>Â  s,   øè ø€ ð Gá 4˜ð ˜HŸM™M×/Ñ/Ó1Ô1Ù 4ùs   ƒ&)ÚncclÚxcclFr·   T)rc   rX   r=   r   ÚCommunicationrÍ   rY   rE   rD   rh   rH   rÎ   r>   ÚanyÚ_CommunicationOpNamer2   rG   r)   rÖ   rÐ   rŽ   ÚsetrÒ   rÓ   r
   r	   rÏ   r   rÑ   )r9   r[   r»   r¼   r½   re   rG   rf   rg   Úkernel_namer0   s             @r%   rÂ   zDistributedSummary.parse®  sÓ  ø€ ô )¨Ó3ÐØ#3×#9Ñ#9×#;ÑˆH�iØ% a bœM�à—=‘=¤O×$AÑ$AÒAØ×0Ñ0×7Ñ7Ø!×*Ñ*¨H¯O©OÐ<ôô $4°HÓ#=�LÛ'3˜Ø&×+Ñ+¬×/EÑ/EÓEØ ×8Ñ8×?Ñ?Ø!,×!5Ñ!5°{×7IÑ7IÐ Jõñ (4ð —]‘]¤o×&>Ñ&>Ò>Ä3ó Gå 4óGô Dð ×0Ñ0×7Ñ7Ø!×*Ñ*¨H¯O©OÐ<ôô $4°HÓ#=�LÛ'3˜Ø&×+Ñ+¬×/EÑ/EÓEØ ×8Ñ8×?Ñ?Ø!,×!5Ñ!5°{×7IÑ7IÐ Jõò (4ð (0×'<Ô'<˜Ø*5×*AÔ*A˜JØ)Ÿ™´/×2HÑ2HÓHØ.8¯o©o×.CÑ.CÓ.E à$*¨kÑ$9Ø'-°Ñ'<à$(×$@Ñ$@×$GÑ$GØ)3×)<Ñ)<¸j×>OÑ>OÐ(Põ%&ð %)×$:Ñ$:×$AÑ$AØ)3×)<Ñ)<¸j×>OÑ>OÐ(Põ%&ñ +Bò (=ò= *ð $<ô\ œS ×!=Ñ!=Ó>Ó?ˆŒÜœS ×!=Ñ!=Ó>Ó?ˆŒÜ'8Ø×(Ñ(°Eô(
ˆÔ$ô (9Ø×(Ñ(°Eô(
ˆÔ$ô $0Ø×(Ñ(Ø×(Ñ(Øô$
ˆÔ ô
 "3Ø×"Ñ"¨eô"
ˆÔô 1Ø×$Ñ$ d×&<Ñ&<Èô
ˆÕr$   N)r   r   r   r   r:   rÂ   r#   r$   r%   rË   rË   Ÿ  s   „ ñò
óE
r$   rË   c                   ó¬   — e Zd ZdZ G d„ d«      Z G d„ de«      Z G d„ de«      Z G d„ d	e«      Z G d
„ de«      Zd„ Z	d„ Z
d„ Zd„ Zd„ Zd„ Zd„ Zd„ Zy)ÚEventSummaryzT
    Analyse operator event in profiling data, correlate with its device event.
    c                   óv   — e Zd Zd„ Zed„ «       Zed„ «       Zed„ «       Zed„ «       Zd„ Z	d„ Z
d„ Zd	„ Zd
„ Zd„ Zy)úEventSummary.ItemBasec                 óþ   — || _         d| _        d| _        d| _        d| _        t        d«      | _        d| _        t        d«      | _        i | _	        i | _
        d| _        t        d«      | _        d| _        d| _        y )Nr   Úinf)r)   Úcallr3   r5   Úmax_cpu_timeÚfloatÚmin_cpu_timeÚmax_gpu_timeÚmin_gpu_timeÚdevicesÚoperator_innersr7   Úmin_general_gpu_timeÚmax_general_gpu_timeÚ_flopsrQ   s     r%   r:   zEventSummary.ItemBase.__init__ü  sx   € ØˆDŒIØˆDŒIØˆDŒMØˆDŒMØ !ˆDÔÜ % e£ˆDÔØ !ˆDÔÜ % e£ˆDÔØˆDŒLØ#%ˆDÔ Ø$%ˆDÔ!Ü(-¨e«ˆDÔ%Ø()ˆDÔ%ØˆD�Kr$   c                 ó   — | j                   S rC   ©rð   rM   s    r%   r   zEventSummary.ItemBase.flops  s   € à—;‘;Ðr$   c                 ó4   — | j                   | j                  z  S rC   )r3   ræ   rM   s    r%   Úavg_cpu_timez"EventSummary.ItemBase.avg_cpu_time  ó   € à—=‘= 4§9¡9Ñ,Ð,r$   c                 ó4   — | j                   | j                  z  S rC   )r5   ræ   rM   s    r%   Úavg_gpu_timez"EventSummary.ItemBase.avg_gpu_time  rõ   r$   c                 ó4   — | j                   | j                  z  S rC   )r7   ræ   rM   s    r%   Úavg_general_gpu_timez*EventSummary.ItemBase.avg_general_gpu_time  s   € à×(Ñ(¨4¯9©9Ñ4Ð4r$   c                 ó†   — || j                   kD  r|| _         || j                  k  r|| _        | xj                  |z  c_        y rC   )rç   ré   r3   ©r9   Útimes     r%   Úadd_cpu_timez"EventSummary.ItemBase.add_cpu_time  ó<   € Ø�d×'Ñ'Ò'Ø$(�Ô!Ø�d×'Ñ'Ò'Ø$(�Ô!Ø�MŠM˜TÑ!ŽMr$   c                 ó†   — || j                   kD  r|| _         || j                  k  r|| _        | xj                  |z  c_        y rC   )rê   rë   r5   rû   s     r%   Úadd_gpu_timez"EventSummary.ItemBase.add_gpu_time#  rþ   r$   c                 ó†   — || j                   kD  r|| _         || j                  k  r|| _        | xj                  |z  c_        y rC   )rï   rî   r7   rû   s     r%   Úadd_general_gpu_timez*EventSummary.ItemBase.add_general_gpu_time*  s?   € Ø�d×/Ñ/Ò/Ø,0�Ô)Ø�d×/Ñ/Ò/Ø,0�Ô)Ø×!Ò! TÑ)Ö!r$   c                 ó.   — | xj                   dz  c_         y ©Nr   )ræ   rM   s    r%   Úadd_callzEventSummary.ItemBase.add_call1  s   € Ø�IŠI˜‰NŽIr$   c                 ó.   — | xj                   |z  c_         y rC   rò   )r9   r   s     r%   Ú	add_flopszEventSummary.ItemBase.add_flops4  s   € Ø�KŠK˜5Ñ ŽKr$   c                 ó   — t         ‚rC   )ÚNotImplementedError©r9   ro   s     r%   Úadd_itemzEventSummary.ItemBase.add_item7  s   € Ü%Ð%r$   N)r   r   r   r:   rS   r   rô   r÷   rù   rý   r   r  r  r  r  r#   r$   r%   ÚItemBaserã   û  su   „ ò	ð  
ñ	ó 
ð	ð 
ñ	-ó 
ð	-ð 
ñ	-ó 
ð	-ð 
ñ	5ó 
ð	5ò	"ò	"ò	*ò	ò	!ó	&r$   r  c                   ó   — e Zd Zd„ Zy)úEventSummary.DeviceItemc                 ó~   — | xj                   dz  c_         | j                  |j                  |j                  z
  «       y r  )ræ   r   rD   rE   r
  s     r%   r  z EventSummary.DeviceItem.add_item;  s*   € Ø�IŠI˜‰N�IØ×Ñ˜dŸk™k¨D¯M©MÑ9Õ:r$   N©r   r   r   r  r#   r$   r%   Ú
DeviceItemr  :  s   „ ó	;r$   r  c                   ó   — e Zd Zd„ Zy)úEventSummary.OperatorItemc                 ó>  — | j                  «        | j                  |j                  «       | j                  |j                  «       | j                  |j                  «       | j                  |j                  «       |j                  D ]–  }|j                  t        j                  k7  sŒ!|j                  | j                  vr6t        j!                  |j                  «      | j                  |j                  <   | j                  |j                     j#                  |«       Œ˜ |j$                  D ]m  }|j&                  D ]\  }|j                  }|| j(                  vr"t        j+                  |«      | j(                  |<   | j(                  |   j#                  |«       Œ^ Œo y rC   )r  rý   r3   r   r5   r  r7   r  r   r1   r=   r   r>   r)   rí   rá   ÚOperatorItemr  r2   rG   rì   r  )r9   ro   rI   rf   rg   r)   s         r%   r  z"EventSummary.OperatorItem.add_item@  s8  € Ø�M‰MŒOØ×Ñ˜dŸm™mÔ,Ø×Ñ˜dŸm™mÔ,Ø×%Ñ% d×&;Ñ&;Ô<Ø�N‰N˜4Ÿ:™:Ô&Ø×+Ô+�Ø—:‘:¤×!9Ñ!9Ó9Ø—z‘z¨×)=Ñ)=Ñ=ô )×5Ñ5°e·j±jÓAð ×,Ñ,Ø!ŸJ™Jñð ×(Ñ(¨¯©Ñ4×=Ñ=¸eÕDð ,ð  $×0Ô0�Ø"-×"9Ô"9�JØ%Ÿ?™?�DØ 4§<¡<Ñ/Ü-9×-DÑ-DÀTÓ-J˜Ÿ™ TÑ*Ø—L‘L Ñ&×/Ñ/°
Õ;ñ	 #:ñ  1r$   Nr  r#   r$   r%   r  r  ?  s   „ ó	<r$   r  c                   ó   — e Zd Zd„ Zy)úEventSummary.ForwardItemc                 óF  — | j                  «        | j                  |j                  «       | j                  |j                  «       | j                  |j                  «       | j                  |j                  «       |j                  D ]–  }|j                  t        j                  k7  sŒ!|j                  | j                  vr6t        j!                  |j                  «      | j                  |j                  <   | j                  |j                     j#                  |«       Œ˜ y rC   )r  rý   r3   r   r5   r  r7   r  r   r1   r=   r   r>   r)   rí   rá   r  r  )r9   ro   rI   s      r%   r  z!EventSummary.ForwardItem.add_itemV  sÑ   € Ø�M‰MŒOØ×Ñ˜dŸm™mÔ,Ø×Ñ˜dŸm™mÔ,Ø×%Ñ% d×&;Ñ&;Ô<Ø�N‰N˜4Ÿ:™:Ô&Ø×+Ô+�Ø—:‘:¤×!9Ñ!9Ó9Ø—z‘z¨×)=Ñ)=Ñ=ô )×5Ñ5°e·j±jÓAð ×,Ñ,Ø!ŸJ™Jñð ×(Ñ(¨¯©Ñ4×=Ñ=¸eÕDñ ,r$   Nr  r#   r$   r%   ÚForwardItemr  U  s   „ ó	Er$   r  c                   ó   — e Zd Zd„ Zy)úEventSummary.GeneralItemc                 óÆ   — | j                  «        | j                  |j                  «       | j                  |j                  «       | j                  |j                  «       y rC   )r  rý   r3   r   r5   r  r7   r
  s     r%   r  z!EventSummary.GeneralItem.add_iteme  sC   € Ø�M‰MŒOØ×Ñ˜dŸm™mÔ,Ø×Ñ˜dŸm™mÔ,Ø×%Ñ% d×&;Ñ&;Õ<r$   Nr  r#   r$   r%   ÚGeneralItemr  d  s   „ ó	=r$   r  c                 óÂ   — i | _         t        j                  t        «      | _        i | _        t        j                  t        «      | _        i | _        i | _        i | _	        y rC   )
rX   rU   rV   ÚdictÚthread_itemsÚuserdefined_itemsÚuserdefined_thread_itemsÚmodel_perspective_itemsÚmemory_manipulation_itemsÚkernel_itemsrM   s    r%   r:   zEventSummary.__init__k  sY   € ØˆŒ
Ü'×3Ñ3Üó
ˆÔð "$ˆÔÜ(3×(?Ñ(?Üó)
ˆÔ%ð (*ˆÔ$Ø)+ˆÔ&ØˆÕr$   c                 óæ  — t        |«      \  }}|j                  «       D �]$  \  }}|dd D �]  }|j                  t        j                  k(  r| j                  |«       |j                  t        j                  k(  s|j                  t        j                  k(  sŒmd|j                  j                  «       v s8d|j                  j                  «       v sd|j                  j                  «       v r| j                  |«       ŒÓ|j                  t        j                  k(  sŒñ| j                  |«       �Œ | j                  |d   «       �Œ' |j                  «       D �]  \  }}t        j                  «       }|j                  |«       |sŒ/|j!                  «       }	|	j"                  D ]Ç  }
|
j                  t        j$                  k(  sW|
j                  t        j&                  k(  s:|
j                  t        j(                  k(  s|
j                  t        j*                  k(  r| j-                  |
«       Œ‰|
j                  t        j.                  k(  r| j-                  |
«       |j                  |
«       ŒÉ |rŒé�Œ y)z;
        Analysis operator event in the nodetress.
        r   NÚmemcpyÚ
memorycopyÚmemsetr   )r¦   rX   r=   r   r>   Úadd_operator_itemÚUserDefinedÚPythonUserDefinedr)   rÖ   Úadd_memory_manipulation_itemÚadd_userdefined_itemÚadd_kernel_itemrU   ÚdequerY   Úpopleftr1   rn   Ú
Dataloaderrl   rm   Úadd_model_perspective_itemÚProfileStep)r9   r[   Únode_statistic_treesÚthread2host_statistic_nodesr¼   Úhost_statistic_nodesÚhost_statistic_noder    r0  ra   rI   s              r%   rÂ   zEventSummary.parsex  s  € ô =FÀiÓ<PÑ9ÐÐ9ð )×.Ñ.×0ñ
ØØ à';Ø�ô(Ð#ð '×+Ñ+¬×/GÑ/GÒGØ×*Ñ*Ð+>Ô?à'×,Ñ,´×0KÑ0KÒKØ*×/Ñ/Ü&×8Ñ8ó9ð !Ð$7×$<Ñ$<×$BÑ$BÓ$DÑDØ'Ð+>×+CÑ+C×+IÑ+IÓ+KÑKØ#Ð':×'?Ñ'?×'EÑ'EÓ'GÑGà×9Ñ9Ð:MÕNð 0×4Ñ4Ü.×@Ñ@óAð !×5Ñ5Ð6IÖJð+(ð, × Ñ Ð!5°aÑ!8Ö9ð/ 1ð2 .B×-GÑ-G×-IÑ)ˆHÐ)Ü×%Ñ%Ó'ˆEØ�L‰LÐ,Ô-ÚØ$Ÿ}™}›�Ø)×7Ô7�EàŸ
™
¤o×&=Ñ&=Ò=Ø Ÿ:™:¬×)CÑ)CÒCØ Ÿ:™:¬×)AÑ)AÒAØ Ÿ:™:¬×)EÑ)EÒEà×7Ñ7Ø!õð !Ÿ:™:¬×)DÑ)DÒDØ ×;Ñ;¸EÔBØŸ™ UÕ+ð 8ô ñ .Jr$   c                  ó   — y rC   r#   ©r9   Úoperator_nodes     r%   Úadd_forward_itemzEventSummary.add_forward_item­  s   € Ør$   c                 ó*  — |j                   | j                  vr6t        j                  |j                   «      | j                  |j                   <   | j                  |j                      j	                  |«       |j                   | j
                  |j                     vrCt        j                  |j                   «      | j
                  |j                     |j                   <   | j
                  |j                     |j                      j	                  |«       y rC   )r)   rX   rá   r  r  r   r]   r:  s     r%   r*  zEventSummary.add_operator_item°  sã   € Ø×Ñ T§Z¡ZÑ/Ü-9×-FÑ-FØ×"Ñ"ó.ˆD�J‰J�}×)Ñ)Ñ*ð 	�
‰
�=×%Ñ%Ñ&×/Ñ/°Ô>à×Ñ T×%6Ñ%6°}×7NÑ7NÑ%OÑOô ×)Ñ)¨-×*<Ñ*<Ó=ð ×Ñ˜m×5Ñ5Ñ6Ø×"Ñ"ñð 	×Ñ˜-×1Ñ1Ñ2°=×3EÑ3EÑF×OÑOØõ	
r$   c                 ó*  — |j                   | j                  vr6t        j                  |j                   «      | j                  |j                   <   | j                  |j                      j	                  |«       |j                   | j
                  |j                     vrCt        j                  |j                   «      | j
                  |j                     |j                   <   | j
                  |j                     |j                      j	                  |«       y rC   )r)   r!  rá   r  r  r"  r]   )r9   Úuserdefined_nodes     r%   r.  z!EventSummary.add_userdefined_itemÀ  sû   € Ø× Ñ ¨×(>Ñ(>Ñ>ô ×(Ñ(Ð)9×)>Ñ)>Ó?ð ×"Ñ"Ø ×%Ñ%ñð 	×ÑÐ/×4Ñ4Ñ5×>Ñ>Ð?OÔPð ×!Ñ!Ø×0Ñ0Ð1A×1KÑ1KÑLñMô
 ×(Ñ(Ð)9×)>Ñ)>Ó?ð ×)Ñ)Ð*:×*DÑ*DÑEØ ×%Ñ%ñð 	×%Ñ%Ð&6×&@Ñ&@ÑAØ×!Ñ!ñ	
ç
‰(Ð#Õ
$r$   c                 óð   — |j                   | j                  vr6t        j                  |j                   «      | j                  |j                   <   | j                  |j                      j	                  |«       y rC   )r)   r$  rá   r  r  )r9   Úmemory_manipulation_nodes     r%   r-  z)EventSummary.add_memory_manipulation_itemÓ  sk   € Ø#×(Ñ(°×0NÑ0NÑNô ×(Ñ(Ð)A×)FÑ)FÓGð ×*Ñ*Ø(×-Ñ-ñð 	×&Ñ&Ð'?×'DÑ'DÑE×NÑNØ$õ	
r$   c                 óâ  — |j                   t        j                  k(  rd}n�|j                   t        j                  k(  rd}na|j                   t        j                  k(  rd}nA|j                   t        j
                  k(  rd}n!|j                   t        j                  k(  rd}ny || j                  vr"t        j                  |«      | j                  |<   | j                  |   j                  |«       y )Nrn   rl   rm   r2  r4  )r=   r   rn   rl   rm   r2  r4  r#  rá   r  r  )r9   Úmodel_perspective_noder)   s      r%   r3  z'EventSummary.add_model_perspective_itemÜ  sÅ   € Ø!×&Ñ&¬/×*AÑ*AÒAØ‰DØ#×(Ñ(¬O×,DÑ,DÒDØ‰DØ#×(Ñ(¬O×,HÑ,HÒHØ!‰DØ#×(Ñ(¬O×,FÑ,FÒFØ‰DØ#×(Ñ(¬O×,GÑ,GÒGØ ‰DàØ�t×3Ñ3Ñ3Ü1=×1IÑ1IÈ$Ó1OˆD×(Ñ(¨Ñ.Ø×$Ñ$ TÑ*×3Ñ3Ð4JÕKr$   c                 ó  — t        |«      }|D ]z  }|j                  t        j                  k(  sŒ!|j                  }|| j
                  vr"t        j                  |«      | j
                  |<   | j
                  |   j                  |«       Œ| y rC   )	rh   r=   r   rH   r)   r%  rá   r  r  )r9   Ú	root_nodere   rG   r)   s        r%   r/  zEventSummary.add_kernel_itemí  sw   € Ü'¨	Ó2ˆÛ'ˆKØ×Ñ¤?×#9Ñ#9Ó9Ø"×'Ñ'�Ø˜t×0Ñ0Ñ0Ü.:×.EÑ.EÀdÓ.K�D×%Ñ% dÑ+Ø×!Ñ! $Ñ'×0Ñ0°Õ=ñ (r$   N)r   r   r   r   r  r  r  r  r  r:   rÂ   r<  r*  r.  r-  r3  r/  r#   r$   r%   rá   rá   ö  sn   „ ñ÷=&ñ =&ô~;�Xô ;ô
<�xô <ô,E�hô Eô=�hô =òò3,òjò
ò %ò&
òLó">r$   rá   c                   ó6   — e Zd ZdZ G d„ d«      Zd„ Zd„ Zd„ Zy)ÚMemorySummaryz2
    Analyse memory events in profiling data.
    c                   ó   — e Zd Zdd„Zd„ Zy)úMemorySummary.MemoryItemc                 ót   — || _         || _        d| _        d| _        d| _        d| _        d| _        || _        y r/   )Ú
event_nameÚplaceÚallocation_countÚ
free_countÚallocation_sizeÚ	free_sizeÚincrease_sizeÚmemory_type)r9   rK  rL  rR  s       r%   r:   z!MemorySummary.MemoryItem.__init__ý  s>   € Ø(ˆDŒOØˆDŒJØ$%ˆDÔ!ØˆDŒOØ#$ˆDÔ ØˆDŒNØ!"ˆDÔØ*ˆDÕr$   c                 óš  — |t         j                  k(  s|t         j                  k(  r+| xj                  dz  c_        | xj                  |z  c_        n\|t         j
                  k(  s|t         j                  k(  r+| xj                  dz  c_        | xj                  |z  c_        nt        d«       | j                  | j                  z
  | _
        y )Nr   zNo corresponding type.)r   ÚAllocateÚReservedAllocaterM  rO  ÚFreeÚReservedFreerN  rP  ÚprintrQ  )r9   ÚsizeÚallocation_types      r%   Úadd_memory_recordz*MemorySummary.MemoryItem.add_memory_record  s    € àÔ#5×#>Ñ#>Ò>Ø"Ô&8×&IÑ&IÒIà×%Ò%¨Ñ*Õ%Ø×$Ò$¨Ñ,Ö$ð  Ô#5×#:Ñ#:Ò:Ø"Ô&8×&EÑ&EÒEà—’ 1Ñ$•Ø—’ $Ñ&–ô Ð.Ô/Ø!%×!5Ñ!5¸¿¹Ñ!FˆDÕr$   N)Ú	Allocated)r   r   r   r:   r[  r#   r$   r%   Ú
MemoryItemrI  ü  s   „ ó	+ó	Gr$   r]  c                 óô   — t        j                  t        «      | _        t        j                  t        «      | _        t        j                  t
        «      | _        t        j                  t
        «      | _        y rC   )rU   rV   r  Úallocated_itemsÚreserved_itemsr®   Úpeak_allocation_valuesÚpeak_reserved_valuesrM   s    r%   r:   zMemorySummary.__init__  sX   € Ü*×6Ñ6Üó 
ˆÔô *×5Ñ5Üó
ˆÔô '2×&=Ñ&=¼cÓ&BˆÔ#Ü$/×$;Ñ$;¼CÓ$@ˆÕ!r$   c                 ó|  — |j                   D �],  }|j                  t        j                  k(  s|j                  t        j                  k(  r—|| j
                  |j                     vr;t        j                  ||j                  d«      | j
                  |j                     |<   | j
                  |j                     |   j                  |j                  |j                  «       nÐ|j                  t        j                  k(  s|j                  t        j                  k(  r–|| j                  |j                     vr;t        j                  ||j                  d«      | j                  |j                     |<   | j                  |j                     |   j                  |j                  |j                  «       t        | j                  |j                     |j                   «      | j                  |j                  <   t        | j"                  |j                     |j$                  «      | j"                  |j                  <   �Œ/ y )Nr\  ÚReserved)Úmem_noder=   r   rT  rV  r_  rL  rG  r]  r[  Úincrease_bytesrU  rW  r`  Úmaxra  Úpeak_allocatedrb  Úpeak_reserved)r9   rK  ro   Úmemnodes       r%   Ú_analyse_node_memoryz"MemorySummary._analyse_node_memory$  sÇ  € Ø—}•}ˆGà—‘Ô 2× ;Ñ ;Ò;Ø—<‘<Ô#5×#:Ñ#:Ò:à T×%9Ñ%9¸'¿-¹-Ñ%HÑHô &×0Ñ0Ø" G§M¡M°;óð ×(Ñ(¨¯©Ñ7Ø"ñð
 ×$Ñ$ W§]¡]Ñ3Øñç#Ñ# G×$:Ñ$:¸G¿L¹LÕIà—‘Ô 2× CÑ CÒCØ—<‘<Ô#5×#BÑ#BÒBà T×%8Ñ%8¸¿¹Ñ%GÑGô &×0Ñ0Ø" G§M¡M°:óð ×'Ñ'¨¯©Ñ6Ø"ñð
 ×#Ñ# G§M¡MÑ2Øñç#Ñ# G×$:Ñ$:¸G¿L¹LÔIÜ9<Ø×+Ñ+¨G¯M©MÑ:Ø×&Ñ&ó:ˆD×'Ñ'¨¯©Ñ6ô 8;Ø×)Ñ)¨'¯-©-Ñ8¸'×:OÑ:Oó8ˆD×%Ñ% g§m¡mÓ4ñ? %r$   c                 óf  — t        |«      }|j                  «       D ]“  \  }}|dd D ]†  }|j                  t        j                  k(  rŒ!|j                  t        j
                  k(  r-|j                  D ]  }| j                  |j                  |«       Œ  | j                  |j                  |«       Œˆ Œ• y)z8
        Analyse memory event in the nodetress.
        r   N)	rc   rX   r=   r   ÚOperatorInnerr>   r1   rk  r)   )r9   r[   r»   r¼   Ú
host_nodesÚ	host_noderI   s          r%   rÂ   zMemorySummary.parseH  s–   € ô )¨Ó3ÐØ$4×$:Ñ$:Ö$<Ñ ˆH�jØ'¨¨›^�	Ø—>‘>¤_×%BÑ%BÒBØØ—>‘>¤_×%=Ñ%=Ò=Ø!*×!8Ô!8˜Ø×1Ñ1°)·.±.À%ÕHð "9à×)Ñ)¨)¯.©.¸)ÕDñ ,ñ %=r$   N)r   r   r   r   r]  r:   rk  rÂ   r#   r$   r%   rG  rG  ÷  s%   „ ñ÷Gñ Gò<Aò"óHEr$   rG  c                   ó   — e Zd ZdZd„ Zy)ÚStatisticDataz$
    Hold all analysed results.
    c                 óp  — || _         || _        t        «       | _        t	        «       | _        t        «       | _        t        «       | _	        | j                  j                  |«       | j
                  j                  |«       | j                  j                  |«       | j                  j                  |«       y rC   )Ú
node_treesÚ
extra_infor¨   Útime_range_summaryrá   Úevent_summaryrË   Údistributed_summaryrG  Úmemory_summaryrÂ   )r9   rs  rt  s      r%   r:   zStatisticData.__init__\  sŠ   € Ø$ˆŒØ$ˆŒÜ"2Ó"4ˆÔÜ)›^ˆÔÜ#5Ó#7ˆÔ Ü+›oˆÔØ×Ñ×%Ñ% jÔ1Ø×Ñ× Ñ  Ô,Ø× Ñ ×&Ñ& zÔ2Ø×Ñ×!Ñ! *Õ-r$   N)r   r   r   r   r:   r#   r$   r%   rq  rq  W  s   „ ñó
.r$   rq  TFÚmséd   éK   c                 óŠF  ‡M‡N‡O‡P‡Q— ddl m} 	 dŠMdgŠQdgŠN‰M gŠOdgˆMˆNˆOˆQfd„	}	d„ }
g ŠPˆPfd„}dhd	„}did
„}| j                  j                  t        j
                  «      }|�|j                  |v �r‰ddg}d}d} |	|«       |dd  D ]
  } |	|«       Œ ‰Qd   }‰Nd   }‰Od   } | |
|d«      «        ||«        | |j                  |Ž «        ||«       d |t        | j                  d   «      «      g} | |j                  |Ž «       d |t        | j                  d   «      «      g} | |j                  |Ž «       | j                  j                  «       D ]\  }t        | j                  j                  |t        j                  «      «      }||z  }d|› � ||«      g} | |j                  |Ž «       Œ^  ||«        |d«        |d|z  «        |d«        |d«       |dk(  rdj                  ‰P«      S |�|j                  |v �r_g d¢}dgŠQdgŠN‰M gŠOd}|D ]
  } |	|«       Œ ‰Qd   }‰Nd   }‰Od   } | |
|d«      «        |d|› �«        ||«        | |j                  |Ž «        ||«       t        j                   t"        «      }t        j                   t"        «      }t        j                   t"        «      }t        j                   t"        «      }|j%                  | j                  j&                  «       |j%                  | j                  j&                  «       | j                  j(                  j+                  «       D ]  \  }}|t        j,                  k7  sŒ|||<   Œ  | j.                  j0                  rWt3        | j.                  j0                  «      |t        j,                  <   | j.                  j4                  |t        j,                  <   t        j6                  t        j8                  t        j:                  t        j<                  fD ]‰  }t?        |«      jA                  d«      d   } ||v sŒ%| | jB                  jD                  v sŒ>| jB                  jD                  |    jF                  ||<   | jB                  jD                  |    jH                  ||<   Œ‹ t        j                   tJ        «      }!| j                  jL                  j+                  «       D ]1  \  }"}#|#j+                  «       D ]  \  }}$tO        |!|   |$d¬«      |!|<   Œ Œ3 |!j+                  «       D ]  \  }}$t3        |$«      ||<   Œ | j.                  jP                  rWt3        | j.                  jP                  «      |t        j,                  <   | j.                  jR                  |t        j,                  <   tU        |j+                  «       d„ d¬«      }%|%d   \  }}&d j                  t?        |«      jA                  d«      d   «      ||    ||&|¬!«       |t        |&«      |z  «      g} | |j                  |Ž «       |%dd  D ]g  \  }}&d"j                  t?        |«      jA                  d«      d   «      ||    ||&|¬!«       |t        |&«      |z  «      g} | |j                  |Ž «       Œi  ||«       g d#¢} | |j                  |Ž «        ||«       |j+                  «       D ]g  \  }}&d"j                  t?        |«      jA                  d«      d   «      ||    ||&|¬!«       |t        |&«      |z  «      g} | |j                  |Ž «       Œi  ||«        |d$«        |d|z  «        |d«        |d«       |�|jV                  |v �r| jB                  jD                  }'tY        |'«      dkD  �rZg }(d})d}*| jB                  jD                  d%   jZ                  }+d&D �]W  },|,|'v sŒ	|'|,   }-|+dk(  rd}.nt        |-jZ                  «      |+z  }.d%|,v r|,› nd'|,› �},|,› |-jF                  d(j                   ||-jH                  |¬!«       ||-j\                  |¬!«       ||-j^                  |¬!«       ||-j`                  |¬!«       |t        |-jH                  «      |z  «      «      d(j                   ||-jZ                  |¬!«       ||-jb                  |¬!«       ||-jd                  |¬!«       ||-jf                  |¬!«       ||.«      «      g}|(ji                  |«       d%|,vs�Œ:|)|-jH                  z  })|*|-jZ                  z  }*�ŒZ ||)z
  }/|+|*z
  }0|+dk(  rd}.nt        |0«      |+z  }.d)dd*j                   ||/|¬!«       |t        |/«      |z  «      «      d*j                   ||0|¬!«       ||.«      «      g}|(ji                  |«       d+}1d,}2d,}3|(D ]…  }tk        |d   t"        «      r1tY        t?        |d   «      «      |1kD  rtY        t?        |d   «      «      }1tY        |d   «      |2kD  rtY        |d   «      }2tY        |d-   «      |3kD  sŒxtY        |d-   «      }3Œ‡ g d.¢}dgŠQdgŠN‰M gŠOd/} |	|«        |	|1«        |	|2«        |	|3«       ‰Qd   }‰Nd   }‰Od   } | |
|d0«      «        |d|› �«        ||«        | |j                  |Ž «        ||«       |(D ]  } | |j                  |Ž «       Œ  ||«        |d1«        |d|z  «        |d«        |d«       |�|jl                  |v �rÜ| j.                  jn                  �rÅg d2¢}dgŠQdgŠN‰M gŠOd}|D ]
  } |	|«       Œ ‰Qd   }‰Nd   }‰Od   } | |
|d3«      «        |d|› �«        ||«        | |j                  |Ž «        ||«       t3        | j.                  jn                  «      }4t3        | j.                  jp                  «      }5t3        | j.                  jr                  «      }6d% |||¬!«       |t        |«      |z  «      g} | |j                  |Ž «       d4 ||4|¬!«       |t        |4«      |z  «      g} | |j                  |Ž «       d5 ||5|¬!«       |t        |5«      |z  «      g} | |j                  |Ž «       d6 ||6|¬!«       |t        |6«      |z  «      g} | |j                  |Ž «        ||«        |d7«        |d|z  «        |d«        |d«       |�|jt                  |v �rk| jB                  j*                  �rTg }(d8}|r| jB                  jv                  }7nd9| jB                  j*                  i}7|7j+                  «       D �]�  \  }8}9|(ji                  d:|8› �«       |tx        jz                  k(  rtU        |9j+                  «       d;„ d¬«      }%�nU|tx        j|                  k(  rtU        |9j+                  «       d<„ d¬«      }%�n#|tx        j~                  k(  rtU        |9j+                  «       d=„ d¬«      }%nò|tx        j€                  k(  rtU        |9j+                  «       d>„ ¬?«      }%nÂ|tx        j‚                  k(  rtU        |9j+                  «       d@„ d¬«      }%n‘|tx        j„                  k(  rtU        |9j+                  «       dA„ d¬«      }%n`|tx        j†                  k(  rtU        |9j+                  «       dB„ d¬«      }%n/|tx        jˆ                  k(  rtU        |9j+                  «       dC„ ¬?«      }%d}:d};%D ]#  \  },}-|:|-jH                  z  }:|;|-jŠ                  z  };Œ% |%D �]½  \  },}-|:dk(  rd}<nt        |-jH                  «      |:z  }<|;dk(  rd}.nt        |-jŠ                  «      |;z  }.|,|-jF                  d(j                   ||-jH                  |¬!«       ||-j\                  |¬!«       ||-j^                  |¬!«       ||-j`                  |¬!«       ||<«      «      d(j                   ||-jŠ                  |¬!«       ||-jŒ                  |¬!«       ||-jŽ                  |¬!«       ||-j�                  |¬!«       ||.«      «      |-j’                  g}|(ji                  |«       |s�Œ9|-j”                  j+                  «       D �]m  \  }=}>|-jH                  dk(  rd}<n"t        |>jH                  «      |-jH                  z  }<|-jŠ                  dk(  rd}.n"t        |>jŠ                  «      |-jŠ                  z  }.tY        |=«      dz   |kD  r|=d |dDz
   }=|=dEz  }=d'|=› �|>jF                  d(j                   ||>jH                  |¬!«       ||>j\                  |¬!«       ||>j^                  |¬!«       ||>j`                  |¬!«       ||<«      «      d(j                   ||>jŠ                  |¬!«       ||>jŒ                  |¬!«       ||>jŽ                  |¬!«       ||>j�                  |¬!«       ||.«      «      dg}|(ji                  |«       |>j–                  j+                  «       D ]Ý  \  }?}@|>jŠ                  dk(  rd}.n"t        @jZ                  «      |>jŠ                  z  }.tY        |?«      dFz   |kD  r|?d |dGz
   }?|?dEz  }?dH|?› �@jF                  dId(j                   ||@jZ                  |¬!«       ||@jb                  |¬!«       ||@jd                  |¬!«       ||@jf                  |¬!«       ||.«      «      dg}|(ji                  |«       Œß �Œp |-j–                  j+                  «       D ]Ý  \  }?}@|-jŠ                  dk(  rd}.n"t        @jZ                  «      |-jŠ                  z  }.tY        |?«      dz   |kD  r|?d |dDz
   }?|?dEz  }?d'|?› �@jF                  dId(j                   ||@jZ                  |¬!«       ||@jb                  |¬!«       ||@jd                  |¬!«       ||@jf                  |¬!«       ||.«      «      dg}|(ji                  |«       Œß �ŒÀ �Œ“ d+}1d,}2d,}3dJ}A|(D ]–  }tk        |t>        «      rŒtk        |d   t"        «      r1tY        t?        |d   «      «      |1kD  rtY        t?        |d   «      «      }1tY        |d   «      |2kD  rtY        |d   «      }2tY        |d-   «      |3kD  sŒ‰tY        |d-   «      }3Œ˜ g dK¢}dgŠQdgŠN‰M gŠO |	|«        |	|1«        |	|2«        |	|3«        |	A«       ‰Qd   }‰Nd   }‰Od   } | |
|dL«      «        |d|› �«        ||«        | |j                  |Ž «        ||«       |(D ]7  }tk        |t>        «      r | |
||«      «       Œ# | |j                  |Ž «       Œ9  ||«        |d«        |d«       |�|j˜                  |v �r3| jB                  jš                  �rg }(| jB                  jš                  }B|tx        j„                  k(  rtU        Bj+                  «       dM„ d¬«      }%n~|tx        j†                  k(  rtU        Bj+                  «       dN„ d¬«      }%nM|tx        jˆ                  k(  rtU        Bj+                  «       dO„ ¬?«      }%ntU        Bj+                  «       dP„ d¬«      }%d}C|%D ]  \  },}-C|-jZ                  z  }CŒ |%D ]¦  \  },}-Cdk(  rd}.nt        |-jZ                  «      Cz  }.|,|-jF                  d(j                   ||-jZ                  |¬!«       ||-jb                  |¬!«       ||-jd                  |¬!«       ||-jf                  |¬!«       ||.«      «      g}|(ji                  |«       Œ¨ g dQ¢}dR}d+}1d,}3|(D ]f  }tk        |d   t"        «      r1tY        t?        |d   «      «      |1kD  rtY        t?        |d   «      «      }1tY        |d   «      |3kD  sŒYtY        |d   «      }3Œh dgŠQdgŠN‰M gŠO |	|«        |	|1«        |	|3«       ‰Qd   }‰Nd   }‰Od   } | |
|dS«      «        |d|› �«        ||«        | |j                  |Ž «        ||«       t�        jž                  dT«      }D|(D ]x  }Dj¡                  |d   «      }E|Er$Ej£                  d«      |Ej£                  d«      z   },n|d   },tY        |,«      |kD  r|,d |d-z
   dEz   |d<   n|,|d<    | |j                  |Ž «       Œz  ||«        |d«        |d«       |�|j¤                  |v �ræ| jB                  j¦                  �rÏg }(| jB                  j¦                  }F| jB                  jD                  d%   jŠ                  }+|Fj+                  «       D �]  \  },}-|+dk(  rd}.nt        |-jŠ                  «      |+z  }.|,|-jF                  d(j                   ||-jH                  |¬!«       ||-j\                  |¬!«       ||-j^                  |¬!«       ||-j`                  |¬!«       |t        |-jH                  «      |z  «      «      d(j                   ||-jŠ                  |¬!«       ||-jŒ                  |¬!«       ||-jŽ                  |¬!«       ||-j�                  |¬!«       ||.«      «      g}|(ji                  |«       �Œ" g d.¢}d}d+}1d,}2d,}3|(D ]¤  }tY        |d   «      |kD  rtY        |d   «      }tk        |d   t"        «      r1tY        t?        |d   «      «      |1kD  rtY        t?        |d   «      «      }1tY        |d   «      |2kD  rtY        |d   «      }2tY        |d-   «      |3kD  sŒ—tY        |d-   «      }3Œ¦ dgŠQdgŠN‰M gŠO |	|«        |	|1«        |	|2«        |	|3«       ‰Qd   }‰Nd   }‰Od   } | |
|dU«      «        |d|› �«        ||«        | |j                  |Ž «        ||«       |(D ]  } | |j                  |Ž «       Œ  ||«        |d«        |d«       |�|j¨                  |v �rÑ| jB                  jª                  �rºg }(| jB                  jD                  d%   jŠ                  }+|r| jB                  j¬                  }Gnd9| jB                  jª                  i}GGj+                  «       D �]Æ  \  }8}9|(ji                  d:|8› �«       |tx        jz                  k(  rtU        |9j+                  «       dV„ d¬«      }%�nU|tx        j|                  k(  rtU        |9j+                  «       dW„ d¬«      }%�n#|tx        j~                  k(  rtU        |9j+                  «       dX„ d¬«      }%nò|tx        j€                  k(  rtU        |9j+                  «       dY„ ¬?«      }%nÂ|tx        j‚                  k(  rtU        |9j+                  «       dZ„ d¬«      }%n‘|tx        j„                  k(  rtU        |9j+                  «       d[„ d¬«      }%n`|tx        j†                  k(  rtU        |9j+                  «       d\„ d¬«      }%n/|tx        jˆ                  k(  rtU        |9j+                  «       d]„ ¬?«      }%%D �]  \  },}-|+dk(  rd}.nt        |-jŠ                  «      |+z  }.|,|-jF                  d(j                   ||-jH                  |¬!«       ||-j\                  |¬!«       ||-j^                  |¬!«       ||-j`                  |¬!«       |t        |-jH                  «      |z  «      «      d(j                   ||-jŠ                  |¬!«       ||-jŒ                  |¬!«       ||-jŽ                  |¬!«       ||-j�                  |¬!«       ||.«      «      g}|(ji                  |«       �Œ" �ŒÉ d}d+}1d,}2d,}3|(D ]µ  }tk        |t>        «      rŒtY        |d   «      |kD  rtY        |d   «      }tk        |d   t"        «      r1tY        t?        |d   «      «      |1kD  rtY        t?        |d   «      «      }1tY        |d   «      |2kD  rtY        |d   «      }2tY        |d-   «      |3kD  sŒ¨tY        |d-   «      }3Œ· g d.¢}dgŠQdgŠN‰M gŠO |	|«        |	|1«        |	|2«        |	|3«       ‰Qd   }‰Nd   }‰Od   } | |
|d^«      «        |d|› �«        ||«        | |j                  |Ž «        ||«       |(D ]7  }tk        |t>        «      r | |
||«      «       Œ# | |j                  |Ž «       Œ9  |d«        |d«       |�|j®                  |v �r¦| j°                  j²                  s| j°                  j´                  �ry| j°                  j²                  j+                  «       D �]Q  \  }H}Ig }(tU        |Ij+                  «       d_„ d¬«      }%|%D ][  \  }J}-|J|-j¶                  |-j¸                  |-jº                  |-j¼                  |-j¾                  |-jÀ                  g}|(ji                  |«       Œ] tU        | j°                  j´                  H   j+                  «       d`„ d¬«      }K|KD ][  \  }J}-|J|-j¶                  |-j¸                  |-jº                  |-j¼                  |-j¾                  |-jÀ                  g}|(ji                  |«       Œ] g da¢}dgŠQdgŠN‰M gŠOdb}d/}L |	|«        |	dc«        |	|L«        |	|L«        |	|L«        |	|L«        |	|L«       ‰Qd   }‰Nd   }‰Od   } | |
|ddH› �«      «        |dej                  | j°                  jÂ                  |H   «      «        |dfj                  | j°                  jÄ                  |H   «      «        ||«        | |j                  |Ž «        ||«       |(D ]7  }tk        |t>        «      r | |
||«      «       Œ# | |j                  |Ž «       Œ9  |d«        |d«       �ŒT dj                  ‰P«      S )jNr   )ÚSummaryViewr   r'   c                 óœ   •— ‰dxx   d|z   t        | «      z   dz   d‰z  z   z  cc<   ‰dxx   d| z  d‰z  z   z  cc<   ‰dxx   | ‰z   z  cc<   y )Nr   z{: Ú}r‹   Ú-)Ústr)ÚpaddingÚtext_dirÚSPACING_SIZEÚheader_sep_listÚline_length_listÚrow_format_lists     €€€€r%   Ú
add_columnz _build_table.<locals>.add_column|  sh   ø€ Ø˜ÓØ�HÑœs 7›|Ñ+¨cÑ1°S¸<Ñ5GÑHñ	
Óð 	˜Ó˜c G™m¨s°\Ñ/AÑBÑBÓØ˜Ó˜w¨Ñ5Ñ5Ôr$   c                 óJ   — | t        |«      z
  }|dz  }d|z  |z   d||z
  z  z   S )Nr   r€  )rŽ   )r‚  ÚtextÚleft_lengthÚhalfs       r%   Ú	add_titlez_build_table.<locals>.add_titleƒ  s8   € Ø¤ D£	Ñ)ˆØ˜aÑˆØ�T‰z˜DÑ  3¨+¸Ñ*<Ñ#=Ñ=Ð=r$   c                 óJ   •— ‰j                  | «       ‰j                  d«       y )NrŒ   )rY   )ÚsÚresults    €r%   rY   z_build_table.<locals>.appendŠ  s   ø€ Ø�‰�aÔØ�‰�dÕr$   r   c                 ó    — | t        d«      k(  ryt        | «      }|dk(  r|dz  }n|dk(  r|dz  }n
|dk(  r|dz  }d	j                  d
|z  |«      S )z7
        Transform time in ns to time in unit.
        rå   r€  r�  r}   ry  r~   Úusr   ú{}{:.2f}r‹   )rè   Úformat)rü   ÚunitÚindentr�  s       r%   Úformat_timez!_build_table.<locals>.format_timeŽ  sc   € ð ”5˜“<ÒØä˜4“[ˆFØ�sŠ{Ø˜#‘‘Ø˜’Ø˜#‘‘Ø˜’Ø˜#‘�Ø×$Ñ$ S¨6¡\°6Ó:Ð:r$   c                 ó2   — dj                  d|z  | dz  «      S )zK
        Transform ratio within [0, 1] to percentage presentation.
        r“  r‹   rz  )r”  )Úratior–  s     r%   Úformat_ratioz"_build_table.<locals>.format_ratiož  s   € ð × Ñ   v¡¨u°s©{Ó;Ð;r$   ÚDevicezUtilization (%)é   é   zDevice SummaryzCPU(Process)zProcess Cpu UtilizationzCPU(System)zSystem Cpu UtilizationÚGPUa?  Note:
CPU(Process) Utilization = Current process CPU time over all cpu cores / elapsed time, so max utilization can be reached 100% * number of cpu cores.
CPU(System) Utilization = All processes CPU time over all cpu cores(busy time) / (busy time + idle time).
GPU Utilization = Current process GPU time / elapsed time.r€  )z
Event TypeÚCallszCPU Timeú	Ratio (%)é   zOverview SummaryzTime unit: Ú.Tr·   c                 ó   — | d   S r  r#   ©Úxs    r%   r¬   z_build_table.<locals>.<lambda>5  s   € °°1²r$   )ÚkeyÚreversez{})r•  z  {})r'   rŸ  zGPU Timer   a@  Note:
In this table, We sum up all collected events in terms of event type.
The time of events collected on host are presented as CPU Time, and as GPU Time if on device.
Events with different types may overlap or inclusion, e.g. Operator includes OperatorInner, so the sum of ratios is not 100%.
The time of events in the same type with overlap will not calculate twice, and all time is summed after merged.
Example:
Thread 1:
  Operator: |___________|     |__________|
Thread 2:
  Operator:   |____________|     |___|
After merged:
  Result:   |______________|  |__________|
r4  )r4  r2  rn   rl   rm   z  z{} / {} / {} / {} / {}z  Othersz{} / - / - / - / {}r   é(   r   )ÚNamerŸ  ú&CPU Total / Avg / Max / Min / Ratio(%)ú&GPU Total / Avg / Max / Min / Ratio(%)é   zModel SummaryzÖNote:
In this table, GPU time is the sum of all device(GPU) events called in the phase.
Unlike overview summary, if two device(GPU) events execute on different streams with overlap time, we sum them directly here.
)r©  z
Total Timer   zDistribution Summaryz  Communicationz  Computationz	  Overlapa  Note:
Communication time: Communication Event time, Communication Op time and its kernel time on gpu.
Computation time: Kernel time, except kernels belong to communication(nccl kernels).
Overlap time: Communication time intersects with computation time.
Example:
Communication:
  CPU:              |_________________|
  GPU:                                  |______________|
  Total:            |_________________| |______________|
Computation time(Kernel):
  GPU:         |________________|
Overlap time:       |___________|
é4   zAll threads mergedzThread: c                 ó    — | d   j                   S r  ©r3   r¤  s    r%   r¬   z_build_table.<locals>.<lambda><  ó   € °Q°q±T·]²]r$   c                 ó    — | d   j                   S r  ©rô   r¤  s    r%   r¬   z_build_table.<locals>.<lambda>A  ó   €  a¨¡d×&7Ò&7r$   c                 ó    — | d   j                   S r  ©rç   r¤  s    r%   r¬   z_build_table.<locals>.<lambda>G  r³  r$   c                 ó    — | d   j                   S r  ©ré   r¤  s    r%   r¬   z_build_table.<locals>.<lambda>L  ó   € °Q°q±T×5FÒ5Fr$   )r¦  c                 ó    — | d   j                   S r  ©r7   r¤  s    r%   r¬   z_build_table.<locals>.<lambda>Q  ó   €  a¨¡d×&;Ò&;r$   c                 ó    — | d   j                   S r  ©rù   r¤  s    r%   r¬   z_build_table.<locals>.<lambda>W  ó   €  a¨¡d×&?Ò&?r$   c                 ó    — | d   j                   S r  ©rï   r¤  s    r%   r¬   z_build_table.<locals>.<lambda>]  r¾  r$   c                 ó    — | d   j                   S r  ©rî   r¤  s    r%   r¬   z_build_table.<locals>.<lambda>b  ó   € °Q°q±T×5NÒ5Nr$   r   z...r   r   z    z- / - / - / - / -é
   )r©  rŸ  rª  r«  ÚFLOPszOperator Summaryc                 ó    — | d   j                   S r  )r÷   r¤  s    r%   r¬   z_build_table.<locals>.<lambda>`  ó   €  ! A¡$×"3Ò"3r$   c                 ó    — | d   j                   S r  )rê   r¤  s    r%   r¬   z_build_table.<locals>.<lambda>f  rÇ  r$   c                 ó    — | d   j                   S r  )rë   r¤  s    r%   r¬   z_build_table.<locals>.<lambda>k  s   € ¸¸!¹×8IÒ8Ir$   c                 ó    — | d   j                   S r  )r5   r¤  s    r%   r¬   z_build_table.<locals>.<lambda>p  s   €  ! A¡$§-¢-r$   )r©  rŸ  r«  éZ   zKernel Summaryz(.+?)(<.*>)(\(.*\))zMemory Manipulation Summaryc                 ó    — | d   j                   S r  r¯  r¤  s    r%   r¬   z_build_table.<locals>.<lambda>&  r°  r$   c                 ó    — | d   j                   S r  r²  r¤  s    r%   r¬   z_build_table.<locals>.<lambda>+  r³  r$   c                 ó    — | d   j                   S r  rµ  r¤  s    r%   r¬   z_build_table.<locals>.<lambda>1  r³  r$   c                 ó    — | d   j                   S r  r·  r¤  s    r%   r¬   z_build_table.<locals>.<lambda>6  r¸  r$   c                 ó    — | d   j                   S r  rº  r¤  s    r%   r¬   z_build_table.<locals>.<lambda>;  r»  r$   c                 ó    — | d   j                   S r  r½  r¤  s    r%   r¬   z_build_table.<locals>.<lambda>A  r¾  r$   c                 ó    — | d   j                   S r  rÀ  r¤  s    r%   r¬   z_build_table.<locals>.<lambda>G  r¾  r$   c                 ó    — | d   j                   S r  rÂ  r¤  s    r%   r¬   z_build_table.<locals>.<lambda>L  rÃ  r$   zUserDefined Summaryc                 ó    — | d   j                   S r  ©rQ  r¤  s    r%   r¬   z_build_table.<locals>.<lambda>²  ó   €  ! A¡$×"4Ò"4r$   c                 ó    — | d   j                   S r  rÕ  r¤  s    r%   r¬   z_build_table.<locals>.<lambda>Æ  rÖ  r$   )r©  ÚTypezAllocation Countz
Free CountzAllocation Sizez	Free SizezIncreased Sizeé2   é   zMemory Summary - zPeak Allocated Memory: {}zPeak Reserved Memory: {})Ú<)ry  r   rx   )cÚprofilerr}  ru  rÉ   r   r4  Ú
DeviceViewr”  rè   rt  rÅ   rÇ   rH   r�   ÚOverViewrU   rV   r®   Úupdater³   r±   rX   rÛ   rw  rÍ   r   rÒ   r2  rn   rl   rm   r�  Úsplitrv  r#  ræ   r3   rW   r°   r	   rÎ   rÓ   ÚsortedÚ	ModelViewrŽ   r5   rô   rç   ré   r÷   rê   rë   rY   r�   ÚDistributedViewrÏ   rÐ   rÑ   ÚOperatorViewr   r   r   r   r   r   r   r    r!   r"   r7   rù   rï   rî   r   rí   rì   Ú
KernelViewr%  ÚreÚcompileÚmatchÚgroupÚMemoryManipulationViewr$  ÚUDFViewr!  r"  Ú
MemoryViewrx  r_  r`  rR  rM  rN  rO  rP  rQ  ra  rb  )RÚstatistic_dataÚ	sorted_byÚ	op_detailÚ
thread_sepÚ	time_unitÚ	row_limitÚmax_src_column_widthÚviewsr}  rˆ  r�  rY   r—  rš  Ú
total_timeÚheadersÚname_column_widthÚDEFAULT_COLUMN_WIDTHrz   Ú
row_formatÚ
header_sepÚline_lengthÚ
row_valuesÚgpu_namer5   ÚutilizationÚcpu_type_timeÚgpu_type_timeÚcpu_call_timesÚgpu_call_timesr¾   ÚvalueÚevent_type_nameÚgpu_time_ranger¹   rÀ   Ú
time_rangeÚsorted_itemsrü   r#  Úall_row_valuesÚaccmulation_timeÚgpu_accmulation_timeÚgpu_total_timer)   ÚitemÚ	gpu_ratioÚ
other_timeÚother_gpu_timeÚcalltime_widthÚcpu_data_description_widthÚgpu_data_description_widthÚcommunication_timeÚcomputation_timeÚoverlap_timer   r]   rX   Útotal_op_cpu_timeÚtotal_op_gpu_timeÚ	cpu_ratioÚinnerop_nameÚinnerop_nodeÚdevice_node_namerG   Úflops_widthr%  Útotal_kernel_gpu_timeÚkernel_name_patternrè  r$  r"  Údevice_typeÚmemory_eventsrK  Úsorted_reserved_itemsÚnumber_column_widthr„  r…  r†  r�  r‡  sR                                                                                @@@@@r%   Ú_build_tabler#  i  sF%  ü€ õ &à%à€LØ�d€OØ�d€OØ%˜�Ð÷6ð 6ò>ð
 €Fôó;ó <ð  ×2Ñ2×DÑDÜ×#Ñ#ó€Jð €}˜×.Ñ.°%Ò7àÐ.Ð/ˆØÐØ!ÐÙÐ$Ô%Ø˜˜“ˆAÙÐ+Õ,ð ð % QÑ'ˆ
Ø$ QÑ'ˆ
Ø& qÑ)ˆñ 	‰y˜Ð&6Ó7Ô8ÙˆzÔÙÐ ˆz× Ñ  'Ð*Ô+ÙˆzÔàÙÜ�n×/Ñ/Ð0IÑJÓKóð
ˆ
ñ 	Ð ˆz× Ñ  *Ð-Ô.àÙÜ�n×/Ñ/Ð0HÑIÓJóð
ˆ
ñ 	Ð ˆz× Ñ  *Ð-Ô.Ø&×9Ñ9×IÑIÖKˆHÜØ×1Ñ1×CÑCØœo×4Ñ4óóˆHð
 # ZÑ/ˆKØ ˜zÐ*©L¸Ó,EÐFˆJÙÐ$�:×$Ñ$ jÐ1Õ2ð Lñ 	ˆzÔÙðIô	
ñ
 	ˆs�[Ñ Ô!ÙˆrŒ
ÙˆrŒ
à˜Š?Ø—7‘7˜6“?Ð"à€}˜×,Ñ,°Ò5âBˆØ˜$ˆØ˜$ˆØ)˜M˜?Ðà!ÐÛˆAÙÐ+Õ,ð ð % QÑ'ˆ
Ø$ QÑ'ˆ
Ø& qÑ)ˆñ 	‰y˜Ð&8Ó9Ô:Ù�˜Y˜KÐ(Ô)ÙˆzÔÙÐ ˆz× Ñ  'Ð*Ô+ÙˆzÔÜ#×/Ñ/´Ó4ˆÜ#×/Ñ/´Ó4ˆÜ$×0Ñ0´Ó5ˆÜ$×0Ñ0´Ó5ˆØ×Ñ˜n×?Ñ?×JÑJÔKØ×Ñ˜n×?Ñ?×JÑJÔKð
 ×.Ñ.×>Ñ>×DÑDÖFñ
ØØàœ_×:Ñ:Ó:Ø,1�˜jÒ)ð Gð ×-Ñ-×EÒEÜ;EØ×2Ñ2×JÑJó<ˆMœ/×7Ñ7Ñ8ð
 ×2Ñ2×<Ñ<ð Ü×-Ñ-ñô
 ×&Ñ&Ü×#Ñ#Ü×$Ñ$Ü×(Ñ(ó	
ˆJô " *›o×3Ñ3°CÓ8¸Ñ;ˆOà˜nÒ,Ø#Ø!×/Ñ/×GÑGòHð
 #×0Ñ0×HÑHØ#ñç‘$ð	 Øñð #×0Ñ0×HÑHØ#ñç‘(ð	 Øòð#
ô. %×0Ñ0´Ó6ˆð ×.Ñ.×;Ñ;×AÑAÖCñ
ØØà*<×*BÑ*BÖ*DÑ&�
˜JÜ-9Ø" :Ñ.°
Àdô.�˜zÒ*ñ +Eð Dð
 '5×&:Ñ&:Ö&<Ñ"ˆJ˜
Ü(2°:Ó(>ˆM˜*Ò%ð '=à×-Ñ-×EÒEÜ;EØ×2Ñ2×JÑJó<ˆMœ/×7Ñ7Ñ8ð
 ×2Ñ2×<Ñ<ð Ü×-Ñ-ñô Ø×ÑÓ!¡~¸tô
ˆð (¨™?Ñˆ
�Dà�K‰Kœ˜J›×-Ñ-¨cÓ2°1Ñ5Ó6Ø˜:Ñ&Ù˜ 9Ô-Ùœ˜t› zÑ1Ó2ð	
ˆ
ñ 	Ð ˆz× Ñ  *Ð-Ô.Ø ,¨Q¨RÓ 0ÑˆJ˜à—‘œc *›o×3Ñ3°CÓ8¸Ñ;Ó<Ø˜zÑ*Ù˜D yÔ1ÙœU 4›[¨:Ñ5Ó6ð	ˆJñ Ð$�:×$Ñ$ jÐ1Õ2ð !1ñ 	ˆzÔÚ8ˆÙÐ ˆz× Ñ  'Ð*Ô+ÙˆzÔØ -× 3Ñ 3Ö 5ÑˆJ˜à—‘œc *›o×3Ñ3°CÓ8¸Ñ;Ó<Ø˜zÑ*Ù˜D yÔ1ÙœU 4›[¨:Ñ5Ó6ð	ˆJñ Ð$�:×$Ñ$ jÐ1Õ2ð !6ñ 	ˆzÔÙð
;ô	
ñ 	ˆs�[Ñ Ô!ÙˆrŒ
ÙˆrŒ
à€}˜×-Ñ-°Ò6ð ×(Ñ(×@Ñ@ð 	 ô Ð&Ó'¨!Ó+ØˆNØ ÐØ#$Ð à×,Ñ,×DÑDØ!ñç‘(ð ô
�ð Ð2Ò2Ø2°4Ñ8�DØ%¨Ò*Ø$%™	ä$)¨$¯-©-Ó$8¸>Ñ$I˜	Ø(5¸Ñ(=˜d™VÀRÈÀvÀ;�Dà˜&ØŸ	™	Ø0×7Ñ7Ù'¨¯©¸IÔFÙ'¨×(9Ñ(9À	ÔJÙ'¨×(9Ñ(9À	ÔJÙ'¨×(9Ñ(9À	ÔJÙ(¬¨t¯}©}Ó)=À
Ñ)JÓKóð 1×7Ñ7Ù'¨¯©¸IÔFÙ'¨×(9Ñ(9À	ÔJÙ'¨×(9Ñ(9À	ÔJÙ'¨×(9Ñ(9À	ÔJÙ(¨Ó3óð"�Jð$ #×)Ñ)¨*Ô5Ø$¨DÓ0Ø(¨D¯M©MÑ9Ð(Ø,°·±Ñ=Ò,ðGðJ $Ð&6Ñ6ˆJØ+Ð.BÑBˆNØ Ò"Ø‘	ä! .Ó1°NÑB�	àØØ%×,Ñ,Ù 
°Ô;Ù ¤ zÓ!2°ZÑ!?Ó@óð &×,Ñ,Ù °YÔ?Ù  Ó+óðˆJð ×!Ñ! *Ô-àˆNØ)+Ð&Ø)+Ð&Û,�
ä˜z¨!™}¬cÔ2ÜœC 
¨1¡Ó.Ó/°.Ò@ä%(¬¨Z¸©]Ó);Ó%<�NÜ�z !‘}Ó%Ð(BÒBÜ14°ZÀ±]Ó1CÐ.Ü�z !‘}Ó%Ð(BÓBÜ14°ZÀ±]Ó1CÑ.ð -òˆGð  "˜dˆOØ!˜dˆOØ!- ˜ÐØ "ÐÙÐ(Ô)Ù�~Ô&ÙÐ1Ô2ÙÐ1Ô2à(¨Ñ+ˆJØ(¨Ñ+ˆJØ*¨1Ñ-ˆKñ ‘9˜[¨/Ó:Ô;Ù�[  Ð,Ô-Ù�:ÔÙÐ$�:×$Ñ$ gÐ.Ô/Ù�:ÔÛ,�
ÙÐ(�z×(Ñ(¨*Ð5Õ6ð -á�:ÔÙðRôñ �3˜Ñ$Ô%Ù�2ŒJÙ�2ŒJà€}˜×3Ñ3°uÒ<à×-Ñ-×AÓAòˆGð
  "˜dˆOØ!˜dˆOØ!- ˜Ðà#%Ð Û�ÙÐ/Õ0ð ð )¨Ñ+ˆJØ(¨Ñ+ˆJØ*¨1Ñ-ˆKñ ‘9˜[Ð*@ÓAÔBÙ�[  Ð,Ô-Ù�:ÔÙÐ$�:×$Ñ$ gÐ.Ô/Ù�:ÔÜ!+Ø×2Ñ2×FÑFó"Ðô  *Ø×2Ñ2×DÑDó Ðô &Ø×2Ñ2×@Ñ@óˆLð Ù˜J¨YÔ7ÙœU :Ó.°Ñ;Ó<ðˆJñ
 Ð$�:×$Ñ$ jÐ1Ô2à!ÙÐ.°YÔ?ÙœUÐ#5Ó6¸ÑCÓDðˆJñ
 Ð$�:×$Ñ$ jÐ1Ô2ð  ÙÐ,°9Ô=ÙœUÐ#3Ó4°zÑAÓBðˆJñ
 Ð$�:×$Ñ$ jÐ1Ô2ð Ù˜L¨yÔ9ÙœU <Ó0°:Ñ=Ó>ðˆJñ
 Ð$�:×$Ñ$ jÐ1Ô2Ù�:ÔÙð
6ôñ �3˜Ñ$Ô%Ù�2ŒJÙ�2ŒJà€}˜×0Ñ0°EÒ9à×'Ñ'×-Ó-ØˆNØ "ÐÙØ-×;Ñ;×HÑH‘ð )¨.×*FÑ*F×*LÑ*Lð �ð %1×$6Ñ$6×$8Ñ �	˜5Ø×%Ñ%¨°°Ð&<Ô=Ø¤
× 3Ñ 3Ò3Ü#)ØŸ™›Ñ+BÈDô$’Lð ¤*×"3Ñ"3Ò3Ü#)ØŸ™›Ù7Ø $ô$’Lð
 ¤*×"3Ñ"3Ò3Ü#)ØŸ™›Ù7Ø $ô$‘Lð
 ¤*×"3Ñ"3Ò3Ü#)ØŸ™›Ñ+Fô$‘Lð ¤*×"5Ñ"5Ò5Ü#)ØŸ™›Ù;Ø $ô$‘Lð
 ¤*×"3Ñ"3Ò3Ü#)ØŸ™›Ù?Ø $ô$‘Lð
 ¤*×"3Ñ"3Ò3Ü#)ØŸ™›Ù?Ø $ô$‘Lð
 ¤*×"3Ñ"3Ò3Ü#)ØŸ™›Ñ+Nô$�Lð %&Ð!Ø$%Ð!ã".‘J�D˜$Ø%¨¯©Ñ6Ð%Ø%¨×)>Ñ)>Ñ>Ñ%ð #/ô #/‘J�D˜$Ø(¨AÒ-Ø$%™	ä$)¨$¯-©-Ó$8Ð;LÑ$L˜	Ø(¨AÒ-Ø$%™	ô " $×"7Ñ"7Ó8Ð;LÑLð "ð ØŸ	™	Ø0×7Ñ7Ù'¨¯©¸IÔFÙ'¨×(9Ñ(9À	ÔJÙ'¨×(9Ñ(9À	ÔJÙ'¨×(9Ñ(9À	ÔJÙ(¨Ó3óð 1×7Ñ7Ù'¨×(=Ñ(=ÀIÔNÙ'Ø $× 9Ñ 9À	ôñ (Ø $× 9Ñ 9À	ôñ (Ø $× 9Ñ 9À	ôñ )¨Ó3óð Ÿ
™
ð/"�Jð2 #×)Ñ)¨*Ô5Û ð "×1Ñ1×7Ñ7×9ñØ(Ø(à#Ÿ}™}°Ò1Ø,-¡	ô %*¨,×*?Ñ*?Ó$@À4Ç=Á=Ñ$Pð !*ð  $×4Ñ4¸Ò9Ø,-¡	ô %*¨,×*GÑ*GÓ$HØ&*×&;Ñ&;ñ%<ð !*ô  # <Ó0°1Ñ4Ð7HÒHØ/;Ø$;Ð&7¸!Ñ&;ð0" ð !-°Ñ 5 à"$ \ NÐ 3Ø ,× 1Ñ 1Ø 8× ?Ñ ?Ù$/Ø(4×(=Ñ(=ÀIô%&ñ %0Ø(4×(AÑ(AØ-6ô%&ñ %0Ø(4×(AÑ(AØ-6ô%&ñ %0Ø(4×(AÑ(AØ-6ô%&ñ %1°Ó$;ó!!"ð$ !9× ?Ñ ?Ù$/Ø(4×(EÑ(EØ-6ô%&ñ %0Ø(4×(IÑ(IØ-6ô%&ñ %0Ø(4×(IÑ(IØ-6ô%&ñ %0Ø(4×(IÑ(IØ-6ô%&ñ %1°Ó$;ó#!"ð& !$ðQ)*˜JðT +×1Ñ1°*Ô=ð ".×!5Ñ!5×!;Ñ!;Ö!=ñ!Ø 0Ø +à#/×#@Ñ#@ÀAÒ#EØ01¡Iô ).¨k×.BÑ.BÓ(CØ*6×*GÑ*Gñ)Hð %.ô
 %(Ð(8Ó$9¸AÑ$=Ø&7ò%8ð 8HØ(?Ð*;¸aÑ*?ð8&Ð$4ð %5¸Ñ$=Ð$4à&*Ð+;Ð*<Ð$=Ø$/×$4Ñ$4Ø$7Ø$<×$CÑ$CÙ(3Ø,7×,@Ñ,@Àyô)*ñ )4Ø,7×,DÑ,DØ1:ô)*ñ )4Ø,7×,DÑ,DØ1:ô)*ñ )4Ø,7×,DÑ,DØ1:ô)*ñ )5°YÓ(?ó!%&ð$ %(ð-." 
ð0 !/× 5Ñ 5°jÕ AòQ ">ðC :ðZ "Ÿ\™\×/Ñ/Ö1ñØ,Ø'à#×4Ñ4¸Ò9Ø,-¡	ô %*¨+×*>Ñ*>Ó$?Ø&*×&;Ñ&;ñ%<ð !*ô  #Ð#3Ó4°qÑ8Ð;LÒLØ3CØ$;Ð&7¸!Ñ&;ð4"Ð 0ð !1°EÑ 9Ð 0à"$Ð%5Ð$6Ð 7Ø +× 0Ñ 0Ø 3Ø 8× ?Ñ ?Ù$/Ø(3×(<Ñ(<À9ô%&ñ %0Ø(3×(@Ñ(@Àyô%&ñ %0Ø(3×(@Ñ(@Àyô%&ñ %0Ø(3×(@Ñ(@Àyô%&ñ %1°Ó$;ó!"ð !$ð'*˜Jð* +×1Ñ1°*Õ=òE 2òm #/ðg %9ðZ ˆNØ)+Ð&Ø)+Ð&ØˆKÛ,�
Ü˜j¬#Ô.Øä˜z¨!™}¬cÔ2ÜœC 
¨1¡Ó.Ó/°.Ò@ä%(¬¨Z¸©]Ó);Ó%<�NÜ�z !‘}Ó%Ð(BÒBÜ14°ZÀ±]Ó1CÐ.Ü�z !‘}Ó%Ð(BÓBÜ14°ZÀ±]Ó1CÑ.ð -òˆGð  "˜dˆOØ!˜dˆOØ!- ˜ÐÙÐ(Ô)Ù�~Ô&ÙÐ1Ô2ÙÐ1Ô2Ù�{Ô#à(¨Ñ+ˆJØ(¨Ñ+ˆJØ*¨1Ñ-ˆKñ ‘9˜[Ð*<Ó=Ô>Ù�[  Ð,Ô-Ù�:ÔÙÐ$�:×$Ñ$ gÐ.Ô/Ù�:ÔÛ,�
Ü˜j¬#Ô.Ù™9 [°*Ó=Õ>áÐ,˜:×,Ñ,¨jÐ9Õ:ð	 -ñ
 �:ÔÙ�2ŒJÙ�2ŒJà€}˜×.Ñ.°%Ò7à×'Ñ'×4Ó4ØˆNØ)×7Ñ7×DÑDˆLØœJ×-Ñ-Ò-Ü%Ø ×&Ñ&Ó(Ù3Ø ô ‘ð
 œj×/Ñ/Ò/Ü%Ø ×&Ñ&Ó(Ù3Ø ô ‘ð
 œj×/Ñ/Ò/Ü%Ø ×&Ñ&Ó(Ñ.Iô ‘ô  &Ø ×&Ñ&Ó(Ù/Ø ô �ð %&Ð!Û*‘
��dØ%¨¯©Ñ6Ñ%ð +ã*‘
��dØ(¨AÒ-Ø !‘Iä % d§m¡mÓ 4Ð7LÑ L�IàØ—I‘IØ,×3Ñ3Ù# D§M¡M¸	ÔBÙ# D×$5Ñ$5¸IÔFÙ# D×$5Ñ$5¸IÔFÙ# D×$5Ñ$5¸IÔFÙ$ YÓ/óð
�
ð ×%Ñ% jÕ1ð! +ò$ˆGð !#ÐØˆNØ)+Ð&Û,�
ä˜z¨!™}¬cÔ2ÜœC 
¨1¡Ó.Ó/°.Ò@ä%(¬¨Z¸©]Ó);Ó%<�NÜ�z !‘}Ó%Ð(BÓBÜ14°ZÀ±]Ó1CÑ.ð -ð  "˜dˆOØ!˜dˆOØ!- ˜ÐÙÐ(Ô)Ù�~Ô&ÙÐ1Ô2à(¨Ñ+ˆJØ(¨Ñ+ˆJØ*¨1Ñ-ˆKñ ‘9˜[Ð*:Ó;Ô<Ù�[  Ð,Ô-Ù�:ÔÙÐ$�:×$Ñ$ gÐ.Ô/Ù�:ÔÜ"$§*¡*Ð-CÓ"DÐÛ,�
Ø+×1Ñ1°*¸Q±-Ó@�ÙØ Ÿ;™; q›>¨E¯K©K¸«NÑ:‘Dà% a™=�DÜ�t“9Ð0Ò0Ø$(Ð)@Ð+<¸qÑ+@Ð$AÀEÑ$I�J˜q’Mà$(�J˜q‘MÙÐ(�z×(Ñ(¨*Ð5Õ6ð -ñ �:ÔÙ�2ŒJÙ�2ŒJà€}˜×:Ñ:¸eÒCà×'Ñ'×AÓAØˆNà×,Ñ,×FÑFð &ð ×,Ñ,×DÑDØ!ñç"Ñ"ð ð
 8×=Ñ=×?‘
��dØ! QÒ&Ø !‘Iä % d×&;Ñ&;Ó <¸~Ñ M�IàØ—I‘IØ,×3Ñ3Ù# D§M¡M¸	ÔBÙ# D×$5Ñ$5¸IÔFÙ# D×$5Ñ$5¸IÔFÙ# D×$5Ñ$5¸IÔFÙ$¤U¨4¯=©=Ó%9¸JÑ%FÓGóð -×3Ñ3Ù# D×$9Ñ$9À	ÔJÙ# D×$=Ñ$=ÀIÔNÙ# D×$=Ñ$=ÀIÔNÙ# D×$=Ñ$=ÀIÔNÙ$ YÓ/óð�
ð$ ×%Ñ% jÖ1ð/ @ò2ˆGð !"ÐØˆNØ)+Ð&Ø)+Ð&Û,�
Ü�z !‘}Ó%Ð(9Ò9Ü(+¨J°q©MÓ(:Ð%ä˜z¨!™}¬cÔ2ÜœC 
¨1¡Ó.Ó/°.Ò@ä%(¬¨Z¸©]Ó);Ó%<�NÜ�z !‘}Ó%Ð(BÒBÜ14°ZÀ±]Ó1CÐ.Ü�z !‘}Ó%Ð(BÓBÜ14°ZÀ±]Ó1CÑ.ð -ð  "˜dˆOØ!˜dˆOØ!- ˜ÐÙÐ(Ô)Ù�~Ô&ÙÐ1Ô2ÙÐ1Ô2à(¨Ñ+ˆJØ(¨Ñ+ˆJØ*¨1Ñ-ˆKñ ‘9˜[Ð*GÓHÔIÙ�[  Ð,Ô-Ù�:ÔÙÐ$�:×$Ñ$ gÐ.Ô/Ù�:ÔÛ,�
ÙÐ(�z×(Ñ(¨*Ð5Õ6ð -á�:ÔÙ�2ŒJÙ�2ŒJà€}˜×+Ñ+¨uÒ4à×'Ñ'×9Ó9ØˆNà×,Ñ,×DÑDØ!ñç"Ñ"ð ñ
 à"×0Ñ0×IÑIñ )ð
 )¨.×*FÑ*F×*XÑ*Xð,Ð(ð %=×$BÑ$B×$DÑ �	˜5Ø×%Ñ%¨°°Ð&<Ô=Ø¤
× 3Ñ 3Ò3Ü#)ØŸ™›Ñ+BÈDô$’Lð ¤*×"3Ñ"3Ò3Ü#)ØŸ™›Ù7Ø $ô$’Lð
 ¤*×"3Ñ"3Ò3Ü#)ØŸ™›Ù7Ø $ô$‘Lð
 ¤*×"3Ñ"3Ò3Ü#)ØŸ™›Ñ+Fô$‘Lð ¤*×"5Ñ"5Ò5Ü#)ØŸ™›Ù;Ø $ô$‘Lð
 ¤*×"3Ñ"3Ò3Ü#)ØŸ™›Ù?Ø $ô$‘Lð
 ¤*×"3Ñ"3Ò3Ü#)ØŸ™›Ù?Ø $ô$‘Lð
 ¤*×"3Ñ"3Ò3Ü#)ØŸ™›Ñ+Nô$�Lô #/‘J�D˜$Ø%¨Ò*Ø$%™	ô " $×"7Ñ"7Ó8¸>ÑIð "ð ØŸ	™	Ø0×7Ñ7Ù'¨¯©¸IÔFÙ'¨×(9Ñ(9À	ÔJÙ'¨×(9Ñ(9À	ÔJÙ'¨×(9Ñ(9À	ÔJÙ(¬¨t¯}©}Ó)=À
Ñ)JÓKóð 1×7Ñ7Ù'¨×(=Ñ(=ÀIÔNÙ'Ø $× 9Ñ 9À	ôñ (Ø $× 9Ñ 9À	ôñ (Ø $× 9Ñ 9À	ôñ )¨Ó3óð"�Jð0 #×)Ñ)¨*Ö5ò? #/ð[ %Eð^ !"ÐØˆNØ)+Ð&Ø)+Ð&Û,�
Ü˜j¬#Ô.ØÜ�z !‘}Ó%Ð(9Ò9Ü(+¨J°q©MÓ(:Ð%ä˜z¨!™}¬cÔ2ÜœC 
¨1¡Ó.Ó/°.Ò@ä%(¬¨Z¸©]Ó);Ó%<�NÜ�z !‘}Ó%Ð(BÒBÜ14°ZÀ±]Ó1CÐ.Ü�z !‘}Ó%Ð(BÓBÜ14°ZÀ±]Ó1CÑ.ð -òˆGð  "˜dˆOØ!˜dˆOØ!- ˜ÐáÐ(Ô)Ù�~Ô&ÙÐ1Ô2ÙÐ1Ô2à(¨Ñ+ˆJØ(¨Ñ+ˆJØ*¨1Ñ-ˆKñ ‘9˜[Ð*?Ó@ÔAÙ�[  Ð,Ô-Ù�:ÔÙÐ$�:×$Ñ$ gÐ.Ô/Ù�:ÔÛ,�
Ü˜j¬#Ô.Ù™9 [°*Ó=Õ>áÐ,˜:×,Ñ,¨jÐ9Õ:ð	 -ñ
 �2ŒJÙ�2ŒJà€}˜×.Ñ.°%Ò7ð ×)Ñ)×9Ò9Ø×,Ñ,×;Ó;ð
  ×.Ñ.×>Ñ>×DÑD×FñØØà!#�Ü%Ø!×'Ñ'Ó)Ù4Ø ô �ó )5Ñ$�J à"Ø×(Ñ(Ø×-Ñ-ØŸ™Ø×,Ñ,ØŸ™Ø×*Ñ*ð"�Jð #×)Ñ)¨*Õ5ð )5ô )/Ø"×1Ñ1×@Ñ@Ø#ñç‘e“gÙ4Ø ô)Ð%ó )>Ñ$�J à"Ø×(Ñ(Ø×-Ñ-ØŸ™Ø×,Ñ,ØŸ™Ø×*Ñ*ð"�Jð #×)Ñ)¨*Õ5ð )>ò�ð $& $�Ø#% $�Ø%1 M ?Ð Ø$&Ð!Ø&(Ð#ÙÐ,Ô-Ù˜2”ÙÐ.Ô/ÙÐ.Ô/ÙÐ.Ô/ÙÐ.Ô/ÙÐ.Ô/à,¨QÑ/�
Ø,¨QÑ/�
Ø.¨qÑ1�ñ Ù˜kÐ->¸{¸mÐ+LÓMôñ Ø/×6Ñ6Ø&×5Ñ5×LÑLØ'ñóôñ Ø.×5Ñ5Ø&×5Ñ5×JÑJØ'ñóôñ �zÔ"ÙÐ(�z×(Ñ(¨'Ð2Ô3Ù�zÔ"Û"0�JÜ! *¬cÔ2Ù™y¨°jÓAÕBáÐ0˜z×0Ñ0°*Ð=Õ>ð	 #1ñ
 �r”
Ù�r–
ð{ Gð~ �7‰7�6‹?Ðr$   )r   )r   )1rU   ræ  Úenumr   Úpaddle.base.corer   r   Úpaddle.utils.flopsr   Ústatistic_helperr   r	   r
   r   r>   r2  r4  ÚCudaRuntimerH   ÚMemcpyÚMemsetr+  rm  rn   rl   rm   rÛ   ÚPythonOpr,  Ú_AllTracerEventTyperÝ   r   r+   r-   rc   rh   r{   r…   r‡   r™   rœ   r¦   r¨   rË   rá   rG  rq  r   r#  r#   r$   r%   Ú<module>r-     sd  ðó Û 	Ý ç @Ý $÷ó ð ×ÑØ×ÑØ×ÑØ×ÑØ×ÑØ×ÑØ×ÑØ×ÑØ×!Ñ!Ø×ÑØ×ÑØ× Ñ Ø×!Ñ!Ø×ÑØ×%Ñ%ðÐ ò$ 9Ð ô�ô ò@÷?,ñ ?,òDòò"%óP	$ó'ó#óL0ò%+÷PL0ñ L0÷^T
ñ T
÷n~>ñ ~>÷B]Eñ ]E÷@.ñ .ð( ×!Ñ!ØØØØØØ
ôdr$   