o
    
ic
                     @   s   d dl Z d dlZ ddlmZmZ d dlmZ e j	d  dd Z
dd Zdd
dZdddZdddZdddZdddZerDe  dS dS )    N   )gemmeinsum)default_timerc                 C   sX   t j||fdd}|t jdd|j7 }t j| |fdd}|t jdd|j7 }||fS )Nfdtypeg      g      ?)numpyzerosrandomuniformshape)nOnI
batch_sizeXW r   B/home/ubuntu/.local/lib/python3.10/site-packages/blis/benchmark.pycreate_data
   s
   r   c                  C   s   t jjd } | d S )N	librariesr   )r	   
__config__blas_opt_info)	blas_libsr   r   r   get_numpy_blas   s   r     c           	      C   sl   |j \}}| j d }d}tj||fdd}t|D ]}tj| ||d || 7 }|d qtd| d S Nr           r   r   outTotal:)r   r	   r
   rangedotsumfillprint	r   r   nr   r   r   totalyir   r   r   
numpy_gemm      

r+   c           	      C   sj   |j \}}| j d }d}tj||fdd}t|D ]}t| ||d || 7 }|d qtd| d S r   )r   r	   r
   r!   r   r#   r$   r%   r&   r   r   r   	blis_gemm#   s   

r-   c           	      C   sn   |j \}}| j d }d}tj||fdd}t|D ]}tjd| ||d || 7 }|d qtd| d S Nr   r   r   r   z	ab,cb->car   r    r   r	   r
   r!   r   r#   r$   r%   r&   r   r   r   numpy_einsum/   s   

r0   c           	      C   sl   |j \}}| j d }d}tj||fdd}t|D ]}td| ||d || 7 }|d qtd| d S r.   r/   r&   r   r   r   blis_einsum;   r,   r1       c                 C   s  t djd	i t  t }t| ||\}}| }| }t d t }t||dd t }	|	| }
t d|
  t d|  t }t|| t }	|	| }t d|  t d t }t	||dd t }	|	| }
t d|
  t d|  t }t
|| t }	|	| }t d|  d S )
NzNSetting up data for gemm. 1000 iters,  nO={nO} nI={nI} batch_size={batch_size}zBlis gemm...r   )r'   z%.2f secondszNumpy (%s) gemm...zBlis einsum ab,cb->cazNumpy (%s) einsum ab,cb->car   )r%   formatlocalsr   r   copytimerr-   r+   r1   r0   )r   r   r   
numpy_blasX1W1X2W2startend	blis_time
numpy_timer   r   r   mainG   sF   

rA   )r   )r2   r2   r3   )r	   numpy.randompyr   r   timeitr   r7   r   seedr   r   r+   r-   r0   r1   rA   __name__r   r   r   r   <module>   s   




#
