o
    پiE                     @   sh   d dl Z d dlZd dlZd dlmZ d dlZG dd dZ					dded	ed
e	dedef
ddZ
dS )    N)nullcontextc                   @   s   e Zd Zdd Zdd ZdS )suppress_stdout_stderrc                 C   s   t tjd| _t tjd| _tj | _tj	 | _
ttj | _ttj	 | _tj| _tj	| _t| j | j t| j | j
 | jt_| jt_	| S )Nw)openosdevnulloutnull_fileerrnull_filesysstdoutfilenoold_stdout_fileno_undupstderrold_stderr_fileno_undupdupold_stdout_filenoold_stderr_fileno
old_stdout
old_stderrdup2)self r   P/home/ubuntu/.local/lib/python3.10/site-packages/sglang/srt/utils/bench_utils.py	__enter__   s   z suppress_stdout_stderr.__enter__c                 G   s`   | j t_| jt_t| j| j t| j	| j
 t| j t| j	 | j  | j  d S N)r   r
   r   r   r   r   r   r   r   r   r   closer   r	   )r   _r   r   r   __exit__   s   
zsuppress_stdout_stderr.__exit__N)__name__
__module____qualname__r   r   r   r   r   r   r   
   s    r      FT	num_testssuppress_kineto_output
trace_pathflush_l2with_multiple_kernelsc              	      s  t tjdd}t d}|   |r|stnt}	|	 ] |s(tjjdddddnd }
|s8tjj	tjj
jg|
dnt }|, tdD ]}t|D ]}|rWtj|tj dd	  |   qH|sa|  qBW d    n1 slw   Y  W d    n1 s{w   Y  |rdS t|tst|tsJ t|t}| jd
ddd}t|tr|fn|}tdd |D sJ |s|D ] t fdd|D dksJ d  d| dq|d ur|| ddd}g }|D ]N d}d}|D ]>}t |d ur-| d }| d }| D ]"\}}||v r+|t||d| t | 7 }|t |7 } nq
q|||  q|r=t|S |d S )NSGLANG_NSYS_PROFILINGr   g    eA   )waitwarmupactiverepeat)
activitiesschedule   cuda)dtypedevicecuda_time_totald   )sort_bymax_name_column_width
c                 S   s   g | ]}t |tqS r   )
isinstancestr).0namer   r   r   
<listcomp>l   s    z bench_kineto.<locals>.<listcomp>c                    s    g | ]}t t |d uqS r   )intresearch)r:   liner;   r   r   r<   p   s     zErrors of the kernel z  in the profiling table (table: )g     @@g    .A)msus )r=   r   environgetr   r   torchprofilerr.   profileProfilerActivityCUDArangeemptyzero_stepr8   r9   tuplekey_averagestablesplitallsumexport_chrome_tracer>   r?   itemsfloatreplaceappend)fnkernel_namesr"   r#   r$   r%   r&   
using_nsysflush_l2_sizesuppressr.   rK   ir   is_tuple
prof_linesunitskernel_times
total_time	total_numr@   time_strnum_strunitscaler   rA   r   bench_kineto.   s   
	



rn   )r!   FNTF)r   r>   r
   
contextlibr   rJ   r   r=   boolr9   rn   r   r   r   r   <module>   s,    '