o
    )i                     @   s   d dl Z d dlZd dlmZ d dlmZ d dlmZmZ dZ	dd Z
dd	 Zg d
ZeeedZg dZg dZee eeZg dZg dZee eeZg Zejjr]ed dS ed eee7 Zed eee7 Zed eee7 ZdS )    N)	benchmark)_csr_to_coo)_create_random_sparsitySparseCSg?c                 C   sT   | dkrt jjj}|S | dkrt jjj}|S | dkr dd }|S | dkr(dd }|S )Ncsr_gecsr_sputnikcoo_gec                 S   s4   t | jd |jd ||\}}tjj| ||||S N)r   shapetorchopsxformersZ	coo_sddmmabrow_indicesrow_offsetscolumn_indicesZrow_coo_ r   o/home/app/PaddleOCR-VL-test/.venv_paddleocr/lib/python3.10/site-packages/xformers/benchmarks/benchmark_sddmm.pyfn   s   
z_get_fn.<locals>.fn
csr_to_cooc                 S   s"   t | jd |jd ||\}}|S r	   )r   r   r   r   r   r   r   "   s   )r   r   r   Z	csr_sddmmZsddmm_sputnik)backendr   r   r   r   _get_fn   s   

r   c                 C   s
  t }td}g }| D ]n\\}}}}tj||||d}tj||||d}	ttjd||tjd|dd}
|}|	}t|
|}
|
j}|
j	}|
j
}dD ]1}d}t|}|tj||||
||||d	d
d|dd|dd|dd|d|dj|d qGqt|}|  |S )Ncuda)device   )Zdtype   )Zdivisible_by)r   r   r   r   z2fn(a, b, row_indices, row_offsets, column_indices))r   r   maskr   r   r   r   ZsddmmzB=z>4dz, M=z, K=z>3dz, prob=z0.4f)stmtglobalslabelZ	sub_labeldescription)min_run_time)MIN_RUN_TIMEr   r   Zrandr   Zonesboolr   r   r   r   r   appendr   TimerZblocked_autorangeCompareprint)Zconfigsr%   r   resultsBMKZprobr   r   r    ZaaZbbr   r   r   r   Zfn_strr   comparer   r   r   bench_sddmm+   sP   

	"
r1   ))`   i@      )   i  r3   )     r3   )i   1   r3   )g9m4?g      ?g      ?g        ))r3      r3   )r3   r8      )      r3   )r:   r;   r9   )?(\?ffffff?
ףp=
?g\(\?gGz?gףp=
?g+?))r4     @   )r4      rA   )r5   r@   rA   )r5   rB   rA   )gffffff?g?g333333?r<   r=   r>   r?   z)This benchmark could not be done on ROCM!zSwin TransformerZViTzBasic cases)	itertoolsr   Ztorch.utilsr   Z-xformers.components.attention._sputnik_sparser   Z"xformers.components.attention.corer   r   r&   r   r1   ZSWIN_T_SIZESlistzipZswin_t_configZBASIC_SIZESZ
SPARSITIESproductZbasic_configZ	vit_sizesZ
vit_configr,   versionZhipr+   r   r   r   r   <module>   s2   1