o
    X۷i                     @  s   d dl mZ d dlZd dlZd dlZd dlmZmZmZm	Z	 d dl
mZmZmZ d dlmZ ejdd ZeG dd	 d	eZdS )
    )annotationsN)Magicsmagics_classline_cell_magicneeds_local_scope)argumentmagic_argumentsparse_argstring)	benchmarkc                  C  s>   t t} i }| j D ]\}}|jt jjkr|j||< q|S )z9Extract default parameter values from benchmark function.)inspect	signaturer
   
parametersitemsdefault	Parameterempty)sigdefaults
param_nameparam r   R/home/ubuntu/vllm_env/lib/python3.10/site-packages/cupyx/profiler/_timeit_magic.py_get_benchmark_defaults   s   

r   c                   @  s   e Zd ZdZeee eddee	 d de	 d  ddedd	ee	 d
 de	 d
  ddede
e	 d de	 d  ddedddddddZdS )GPUTimeitMagicsz7GPU-aware timing magics using cupyx.profiler.benchmark.z-nz
--n-repeatn_repeatzNumber of repeats (default: ))typer   helpz-wz
--n-warmupn_warmupz Number of warmup runs (default: z--max-durationmax_durationz&Maximum duration in seconds (default: code*zCode to benchmark)nargsr   Nc                   sr   t j|}|du rd|j   fdd}nt|  fdd}t||j|j	|j
d}t| dS )aE  Time code with GPU synchronization.

        Works as both line and cell magic.

        Line magic usage:
            %gpu_timeit [-n N_REPEAT] [-w N_WARMUP] [--max-duration SEC] expression

        Cell magic usage:
            %%gpu_timeit [-n N_REPEAT] [-w N_WARMUP] [--max-duration SEC]
            <code>

        Examples:
            %gpu_timeit cp.random.random((1000, 1000)).sum()
            %gpu_timeit -n 100 --max-duration 5 cp.arange(1024**3).sum()

            %%gpu_timeit -n 100
            x = cp.random.random((1000, 1000))
            result = x @ x.T
        N c                     s   t  jjS N)evalshelluser_nsr   r    local_nsselfr   r   runT   s   z'GPUTimeitMagics.gpu_timeit.<locals>.runc                     s   t  jj d S r$   )execr&   r'   r   r(   r   r   r+   Z   s   )r   r   r   )r	   
gpu_timeitjoinr    striptextwrapdedentr
   r   r   r   print)r*   linecellr)   argsr+   resultr   r(   r   r-       s   .
zGPUTimeitMagics.gpu_timeit)NN)__name__
__module____qualname____doc__r   r   r   r   intr   floatr-   r   r   r   r   r      s>    r   )
__future__r   	functoolsr   r0   IPython.core.magicr   r   r   r   IPython.core.magic_argumentsr   r   r	   cupyx.profilerr
   cacher   r   r   r   r   r   <module>   s    

