o
    )i                  
   @   s  d dl Z d dlZd dlmZ d dlmZmZmZ dZ	e
dZ
eeeddddfeddd	d
fgddgejgdeeedddd
fedddd
fedddd
fedddd
fgdgejgd Zeedgd
gdgejgdZG dd dZG dd deZG dd dZG dd  d eZed!deed"ee	d# ed$ddeed"ee	d% ed&deed"ee	d# ed'ddeed"ee	d% dS )(    N)benchmark_main_helper2	DTYPE2STRproduct_dictg?cudag<@0      i    i   FT)shapescalingdtypeg\@   2   g@i00  g     @i%  gfffffF@))r   r   )r   r   g333333?)batchesD
keep_ratior   c                   @   s4   e Zd ZdededdfddZdddZd	d
 ZdS )ScaledIndexAddBenchmarkr
   bwreturnNc           
      C   s  |\}}}}t ||  t||}	|	 d| d| d| d| d|r&dnd | _d| _d	| _t j|||gd
||d| _t j|||gd
||d| _	|rWt j|gd
||dnd | _
t jdd t| j	jd D t jd
d| _t j|||gd
|d| _t  | _d S )Nz B_src=z, B_out=z, M=z, D=z s=YNscaled_index_addg\(\?r   )devicer   requires_gradc                 S      g | ]}|qS  r   .0ir   r   r/home/app/PaddleOCR-VL-test/.venv_paddleocr/lib/python3.10/site-packages/xformers/benchmarks/benchmark_indexing.py
<listcomp>G       z4ScaledIndexAddBenchmark.__init__.<locals>.<listcomp>r   r   r   )r   r   )torchZmanual_seedr   get	sub_labellabelalpharandninpsrcr
   Ztensorranger	   int64indexgradTensorout)
selfr   r
   r	   r   ZB_srcZB_outMr   	dtype_strr   r   r   __init__3   s*   0z ScaledIndexAddBenchmark.__init__c                 C   s(   t j| j | j| j| j| jd| _d S )N)inputr,   sourcer
   r&   )	xopsr   r(   cloner,   r)   r
   r&   r/   r0   r   r   r   fwL   s   zScaledIndexAddBenchmark.fwc                 C   s8   d | j _d | j_| jd urd | j_| jj| jdd d S NT)Zretain_graph)r(   r-   r)   r
   r/   backwardr8   r   r   r   r   U   s
   
zScaledIndexAddBenchmark.bwr   N__name__
__module____qualname__boolr3   r9   r   r   r   r   r   r   2   s    
	r   c                   @      e Zd ZdddZdS )ScaledIndexAddBenchmarkBaseliner   Nc                 C   sD   | j }| jd ur|| jdd  | jjd|| j| jd| _d S )Nr   )dimr5   r,   r&   )r)   r
   Z	unsqueezer(   Z	index_addr,   r&   r/   )r0   Z
src_scaledr   r   r   r9   ^   s   
z"ScaledIndexAddBenchmarkBaseline.fwr<   r>   r?   r@   r9   r   r   r   r   rC   ]       rC   c                   @   s0   e Zd ZdeddfddZd
ddZdd	 ZdS )IndexSelectBenchmarkr   r   Nc                 C   s   t ||}| d| d| d| | _d| _g }g }|D ]9\}	}
dd t|	D }t|	| |t	j
|t||	  t	jdd t	j|	|
| g|d|d	}|| q||| _| _t	 | _d S )
Nz D=z	 batches=z keep=Zindex_selectc                 S   r   r   r   r   r   r   r   r   s   r    z1IndexSelectBenchmark.__init__.<locals>.<listcomp>r   r!   )r   r   r   )r   r#   r$   r%   r*   randomRandomshuffleappendr"   Zzerosintr+   r'   indicessourcesr.   r/   )r0   r   r   r   r   r   r2   rM   rN   BZseqlenr,   Zsource_ir   r   r   r3   k   s*   zIndexSelectBenchmark.__init__c                 C   s   t | j| j| _d S )N)r6   Zindex_select_catrN   rM   r/   r8   r   r   r   r9      s   zIndexSelectBenchmark.fwc                 C   s(   | j D ]}d |_q| jj| jdd d S r:   )rN   r-   r/   r;   )r0   r)   r   r   r   r      s   
zIndexSelectBenchmark.bwr<   r=   r   r   r   r   rG   j   s    
rG   c                   @   rB   )IndexSelectBenchmarkBaseliner   Nc                 C   s(   t jdd t| j| jD dd| _d S )Nc                 S   s   g | ]
\}}||   qS r   )flatten)r   sr   r   r   r   r      s    z3IndexSelectBenchmarkBaseline.fw.<locals>.<listcomp>r   )rD   )r"   catziprN   rM   r/   r8   r   r   r   r9      s   zIndexSelectBenchmarkBaseline.fwr<   rE   r   r   r   r   rP      rF   rP   Zscaled_index_add_fw)ZxformersZpytorch)r9   	functionscasesmin_run_timeZscaled_index_add_fwbw)r9   r   rU   rV   rW   Zindex_select_fwZindex_select_fwbw)rH   r"   Zxformers.opsopsr6   utilsr   r   r   rW   r   listrL   ZhalfZ
CASES_IADDZCASES_ISELECTr   rC   rG   rP   r   r   r   r   <module>   s   
	
+"
