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)SparseCS_create_random_sparsityg?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xformers	coo_sddmmabrow_indicesrow_offsetscolumn_indicesrow_coo_ r   W/home/ubuntu/.local/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   	csr_sddmm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   )dtype   )divisible_by)r   r   r   r   z2fn(a, b, row_indices, row_offsets, column_indices))r   r   maskr   r   r   r   sddmmzB=z>4dz, M=z, K=z>3dz, prob=z0.4f)stmtglobalslabel	sub_labeldescription)min_run_time)MIN_RUN_TIMEr   r!   randr   onesboolr   r   r   r   r   appendr   Timerblocked_autorangeCompareprint)configsr-   r!   resultsBMKprobr   r   r&   aabbr   r   r   r   fn_strr   comparer   r   r   bench_sddmm+   sP   

	"
rA   ))`   i@      )   i  rC   )     rC   )i   1   rC   )g9m4?g      ?g      ?g        ))rC      rC   )rC   rH      )      rC   )rJ   rK   rI   )?(\?ffffff?
ףp=
?g\(\?gGz?gףp=
?g+?))rD     @   )rD      rQ   )rE   rP   rQ   )rE   rR   rQ   )gffffff?g?g333333?rL   rM   rN   rO   z)This benchmark could not be done on ROCM!zSwin TransformerViTzBasic cases)	itertoolsr   torch.utilsr   -xformers.components.attention._sputnik_sparser   "xformers.components.attention.corer   r   r.   r   rA   SWIN_T_SIZESlistzipswin_t_configBASIC_SIZES
SPARSITIESproductbasic_config	vit_sizes
vit_configr8   versionhipr6   r   r   r   r   <module>   s2   1