
    çg%                        d dl Z d dlmZ d dlZd dlZd dlZd dlm	Z	m
Z
 d Zd Zd Zd Z edd	d
g          Z edddddd          Z eddddd          Z eddddd          Zi d ej                                        D             d ej                                        D             Zd Zd Zd Zd Zedk    r e             dS dS )    N)
namedtuple)COMPUTE_METADATA_SCOPE_NAME
TritonHookc                 "   g }| r~| D ]z}|                                 }|D ]a}|                    d          d                                                                          }|||fv r|                    |dz               nb{n|d         gdz   }|S )N(r    (inc))lowersplitstripappend)metricsraw_metricsretmetric
raw_metricraw_metric_no_units         R/var/www/html/ai-engine/env/lib/python3.11/site-packages/triton/profiler/viewer.pymatch_available_metricsr   
   s    
C 	* 	 	F\\^^F)  
%/%5%5c%:%:1%=%C%C%E%E%K%K%M%M"j*<===JJzH4555E >		 1~)J    c                     t          j        |           }|                    d          }t          j                            |          }||                                |fS )N   )jsonloadpopht
GraphFramefrom_literalshow_metric_columns)filedatabasedevice_infogfs       r   get_raw_metricsr#      sL    yH,,q//K		#	#H	-	-Br%%''44r   c           	         t          j        d| j        dg          }|D ]2}||         D ]%}||         |         d         }||         |         d         }||         |         d         }t          j        D ]}| d         |k    }	| |	         }
d| |
j        vr#d	}|d
k    r<|dk    r	d|dz  z  }ni|dk    r	d|dz  z  }nZ|dk    r|dz  |z  dz  dz  dz  |dz  z  }n<|dk    r$|dk    r	d|dz  z  }n'|dk    s|dk    rd|dz  z  }nt          d|           |j        |	dfxx         |
d|                              d	          |z  z  cc<   ڐ'4|S )N        min_timeindexcolumnsarchnum_sms
clock_rateDeviceIdflopsr   CUDA80g  2C   89g bB90r   g    x:Ai     mBHIPgfx90ag  //bBgfx941gfx942g ?y"CzUnsupported device type: )	pd	DataFramer(   r   flops_widthr)   
ValueErrorlocfillna)dfr!   min_time_flopsdevice_typedevice_indexr*   r+   r,   widthidxdevice_frames	max_flopss               r   get_min_time_flopsrH       s   \#RX
|LLLN" l l'4 	l 	lL{+L9&AD!+.|<YGG$[1,?MJ#/ l ln4 "3"5??-*???	&((t||$*eai$8		%1eai$@		&-mj&@J&ORV&VZ^%^chklcl$m	 E))x''$*eai$8		))TX-=-=$-$;	$%N%N%NOOO"3
?333}_U__7U7\7\]^7_7_bk7kk3333-l		l6 r   c                 4   t          j        d| j        dg          }|D ]w}||         D ]l}| d         |k    }| |         }||         |         d         }||         |         d         }d|z  |z  dz  d	z  }	|j        |dfxx         |d
         |	z  z  cc<   mx|S )Nr%   r&   r'   r-   memory_clock_rate	bus_width   g     @@r1   bytes)r:   r;   r(   r>   )
r@   r!   min_time_bytesrB   rC   rE   rF   rJ   rK   peak_bandwidths
             r   get_min_time_bytesrP   A   s    \#RX
|LLLN" [ ['4 	[ 	[LZ.L0CsGM +K 8 FGZ [#K0>{KI]->>DqHNsJ///=3IN3ZZ////	[ r   
FactorDictnamefactortimer   gMbP?gư>g&.>)time/sztime/msztime/usztime/nsr.   g    eAr5   )zflop/szgflop/sztflop/srM   )zbyte/szgbyte/sztbyte/sc                     i | ]
}|t           S  )flops_factor_dict.0keys     r   
<dictcomp>r\   T   +     3 3 3  3 3 3r   c                     i | ]
}|t           S rW   )bytes_factor_dictrY   s     r   r\   r\   V   r]   r   c                    g }g }t          t          j        g|          d         }t          j        dz   |                    d          d                             d          d         z   }|D ]}|dk    rt	          | j        |          }	t          | j        |          }
| j        |         t          j        |         t          j        d         z  z  }|
d                             |	d         t                    |z  | j        d	<   |
                    d	           |t          v rt          |         }|j        }|j        }t          |g|          d         }| j        |         | j        |         t          j        |         z  z  ||         z  | j        | d
<   |
                    | d
           E|t          j        v rt          j        dz   |                    d          d         z   }| j        |         t          j        |         t          j        |         z  z  | j        | d
<   |
                    | d
           |
                    |           |rt          ||          }||z   S )Nr   /r   r   )utilrU   r&   z
util (inc)r   )r   time_factor_dictrR   r
   rP   	dataframerH   rS   combinemaxr   derivable_metrics)r"   r   r   r!   derived_metricsoriginal_metricstime_metric_name	time_unitr   rN   rA   time_secderiveable_metricmetric_namemetric_factor_dictmatched_metric_namemetric_time_units                    r   derive_metricsrs   [   s   O.0@0E/FTTUVW!&,/?/E/Ec/J/J1/M/S/STW/X/XYZ/[[I , ,V/kJJN/kJJN|$459I9PQZ9[9I9PQY9Z:[ \H)7
)C)K)KN[eLfhk)l)low)wBL&""<0000((( 1& 9+0K!2!9"9;-"U"UVW"X/1|<O/P02=M0NQaQhirQs0s0u/A&/I0JBLF***+ ""f#4#4#45555'.../4s:V\\#=N=Nq=QQ.0l;K.L '	25E5LM]5^^/`BLF***+""f#4#4#45555##F++++ R23C[QQ---r   c           	      @   t          |d          5 }t          |          \  }}}	t          |          dk    s
J d            |                                 t	          || ||	          } |s|r'|rd| dn|}
dd|
ig}|                    |d	          }ddt           dig}|                    |d	          }|r&d| d         d
| ig}|                    |d	          }t          |                    | d|d                     d d d            d S # 1 swxY w Y   d S )Nrr   z"No metrics found in the input filez^(?!z).**rR   T)squashz>= F)metric_columnexpand_namedepthrender_header)	openr#   lenupdate_inclusive_columnsrs   filterr   printtree)r   filenameincludeexclude	thresholdrz   fr"   r   r!   name_filterquerys               r   parser   ~   s   	h		 b'6q'9'9$K;!###%I###
##%%% Wk;GG 	/g 	/18E-----gK6;/0E5..BA!<AAABCYYuTY** 	/71:'8Y'8'89:E5..BbggGUZ_g``aaa#b b b b b b b b b b b b b b b b b bs   C5DDDc                 N   t          | d          5 }t          |          \  }}}t          d           |rV|D ]S}|                    d          d                                                                         }t          d|            T	 d d d            d S # 1 swxY w Y   d S )Nru   zAvailable metrics:r   r   z- )r|   r#   r   r
   r   r	   )	file_namer   _r   r   r   s         r   show_metricsr      s    	i		 +A..;"### 	1) 1 1
%/%5%5c%:%:1%=%C%C%E%E%K%K%M%M"/-//0000                 s   A<BB!Bc                  *   t          j        dt           j                  } |                     dddd           |                     dd	t          d d
           |                     ddt          d d           |                     ddt          d d           |                     ddt
          d d           |                     ddt          dd           |                                 \  }}t          |          dk    s
J d            |d         }|j	        r|j	        
                    d          nd }|j        }|j        }|j        }|j        }|r|rt          d          |j        rt#          |           d S |rt%          ||||||           d S d S )Nz,Performance data viewer for proton profiles.)descriptionformatter_classz-lz--list
store_truea`  List available metrics. Metric names are case insensitive and ignore units.
Derived metrics can be created when source metrics are available.
- time/s, time/ms, time/us, time/ns: time
- flop/s, gflop/s, tflop/s: flops / time
- byte/s, gbyte/s, tbyte/s: bytes / time
- util: max(sum(flops<width>) / peak_flops<width>_time, bytes / peak_bandwidth_time))
)actionhelpz-mz	--metricszAt maximum two metrics can be specified, separated by comma.
There are two modes:
1) Choose the output metric to display. It's case insensitive and ignore units.
2) Derive a new metric from existing metrics.
)typedefaultr   z-iz	--includez?Include frames(kernels) that match the given regular expressionz-ez	--excludez?Exclude frames(kernels) that match the given regular expressionz-tz--thresholdzrExclude frames(kernels) whose metrics are below the given threshold. This filter only applies on the first metric.z-dz--depthd   z The depth of the tree to displayr   zMust specify a file to readr   ,z'Cannot specify both include and exclude)argparseArgumentParserRawTextHelpFormatteradd_argumentstrfloatintparse_known_argsr}   r   r
   r   r   r   rz   r=   listr   r   )		argparserargstarget_argsr   r   r   r   r   rz   s	            r   mainr      s)   'B 5  I 	       
 
 
 N     N     |     /     "2244D+{q   "?   AI)-?dl  %%%4GlGlGIJE D7 DBCCCy FY	 Fgy'7IuEEEEEF Fr   __main__)r   collectionsr   r   pandasr:   hatchetr   triton.profiler.hookr   r   r   r#   rH   rP   rQ   rd   rX   r_   rS   keysrh   rs   r   r   r   __name__rW   r   r   <module>r      s    " " " " " "          H H H H H H H H  5 5 5  B
 
 
 Zvx&899
:ftPTae&f&fgg Jw1QU(V(VWW Jw1QU(V(VWW 3 3#*//113 3 33 3#*//113 3 3  .  .  .Fb b b*  JF JF JFZ zDFFFFF r   