Ë
    ›¾jc
  ã                   ó®   — d dl Z d dlZ ddlmZmZ d dlmZ e j                  j                  d «       d„ Z
d„ Zdd„Zdd„Zdd	„Zdd
„Zdd„Zer e«        yy)é    Né   )ÚgemmÚeinsum)Údefault_timerc                 ó&  — t        j                  ||fd¬«      }|t         j                  j                  dd|j                  «      z  }t        j                  | |fd¬«      }|t         j                  j                  dd|j                  «      z  }||fS )NÚf©Údtypeg      ð¿g      ð?)ÚnumpyÚzerosÚrandomÚuniformÚshape)ÚnOÚnIÚ
batch_sizeÚXÚWs        úX/home/spazio/kingdom_calls/work5/transenv/lib/python3.12/site-packages/blis/benchmark.pyÚcreate_datar   
   sv   € Ü�‰�Z Ð$¨CÔ0€AØŒ�‰×	Ñ	˜d C¨¯©Ó	1Ñ1€AÜ�‰�R˜�H CÔ(€AØŒ�‰×	Ñ	˜d C¨¯©Ó	1Ñ1€AØˆaˆ4€Kó    c                  óF   — t         j                  j                  d   } | d   S )NÚ	librariesr   )r   Ú
__config__Úblas_opt_info)Ú	blas_libss    r   Úget_numpy_blasr      s"   € Ü× Ñ ×.Ñ.¨{Ñ;€IØ�Q‰<Ðr   c                 ó&  — |j                   \  }}| j                   d   }d}t        j                  ||fd¬«      }t        |«      D ]>  }t        j                  | ||¬«       ||j                  «       z  }|j                  d«       Œ@ t        d|«       y ©Nr   ç        r   r	   ©ÚoutúTotal:)r   r   r   ÚrangeÚdotÚsumÚfillÚprint©	r   r   Únr   r   r   ÚtotalÚyÚis	            r   Ú
numpy_gemmr.      s€   € Ø�W‰W�F€BˆØ—‘˜‘€JØ€EÜ�‰�Z Ð$¨CÔ0€AÜ�1‹Xò ˆÜ�	‰	�!�Q˜AÕØ�—‘“ÑˆØ	�‰ˆq�	ðô 
ˆ(�EÕr   c                 ó  — |j                   \  }}| j                   d   }d}t        j                  ||fd¬«      }t        |«      D ]4  }t	        | ||¬«       ||j                  «       z  }|j                  d«       Œ6 t        d|«       y r   )r   r   r   r$   r   r&   r'   r(   r)   s	            r   Ú	blis_gemmr0   #   s|   € Ø�W‰W�F€BˆØ—‘˜‘€JØ€EÜ�‰�Z Ð$¨CÔ0€AÜ�1‹Xò ˆÜˆQ��qÕØ�—‘“ÑˆØ	�‰ˆs�ðô 
ˆ(�EÕr   c                 ó(  — |j                   \  }}| j                   d   }d}t        j                  ||fd¬«      }t        |«      D ]?  }t        j                  d| ||¬«       ||j                  «       z  }|j                  d«       ŒA t        d|«       y ©Nr   r    r   r	   z	ab,cb->car!   r#   ©r   r   r   r$   r   r&   r'   r(   r)   s	            r   Únumpy_einsumr4   /   s‚   € Ø�W‰W�F€BˆØ—‘˜‘€JØ€EÜ�‰�R˜Ð$¨CÔ0€AÜ�1‹Xò ˆÜ�‰�[ ! Q¨AÕ.Ø�—‘“ÑˆØ	�‰ˆs�ðô 
ˆ(�EÕr   c                 ó  — |j                   \  }}| j                   d   }d}t        j                  ||fd¬«      }t        |«      D ]5  }t	        d| ||¬«       ||j                  «       z  }|j                  d«       Œ7 t        d|«       y r2   r3   r)   s	            r   Úblis_einsumr6   ;   s~   € Ø�W‰W�F€BˆØ—‘˜‘€JØ€EÜ�‰�R˜Ð$¨CÔ0€AÜ�1‹Xò ˆÜˆ{˜A˜q aÕ(Ø�—‘“ÑˆØ	�‰ˆs�ðô 
ˆ(�EÕr   c                 óÂ  — t         dj                  d	i t        «       ¤Ž«       t        «       }t	        | ||«      \  }}|j                  «       }|j                  «       }t        d«       t        «       }t        ||d¬«       t        «       }	|	|z
  }
t        d|
z  «       t        d|z  «       t        «       }t        ||«       t        «       }	|	|z
  }t        d|z  «       t        d«       t        «       }t        ||d¬«       t        «       }	|	|z
  }
t        d|
z  «       t        d|z  «       t        «       }t        ||«       t        «       }	|	|z
  }t        d|z  «       y )
NzNSetting up data for gemm. 1000 iters,  nO={nO} nI={nI} batch_size={batch_size}zBlis gemm...éè  )r*   z%.2f secondszNumpy (%s) gemm...zBlis einsum ab,cb->cazNumpy (%s) einsum ab,cb->ca© )r(   ÚformatÚlocalsr   r   ÚcopyÚtimerr0   r.   r6   r4   )r   r   r   Ú
numpy_blasÚX1ÚW1ÚX2ÚW2ÚstartÚendÚ	blis_timeÚ
numpy_times               r   ÚmainrG   G   sE  € Ü	ð	9ð 	2ß28±&ñ	EÜ;A»8ñ	Eôô  Ó!€JÜ˜˜R Ó,�F€BˆØ	�‰‹€BØ	�‰‹€BÜ	ˆ.ÔÜ‹G€EÜˆb�"˜ÕÜ
‹'€CØ�e‘€IÜ	ˆ.˜9Ñ
$Ô%Ü	Ð
 Ñ
+Ô,Ü‹G€EÜˆr�2ÔÜ
‹'€CØ�u‘€JÜ	ˆ.˜:Ñ
%Ô&Ü	Ð
!Ô"Ü‹G€EÜ��B˜$ÕÜ
‹'€CØ�e‘€IÜ	ˆ.˜9Ñ
$Ô%Ü	Ð
'¨*Ñ
4Ô5Ü‹G€EÜ��RÔÜ
‹'€CØ�u‘€JÜ	ˆ.˜:Ñ
%Õ&r   )r8   )é€  rH   iÐ  )r   Únumpy.randomÚpyr   r   Útimeitr   r=   r   Úseedr   r   r.   r0   r4   r6   rG   Ú__name__r9   r   r   ú<module>rN      sV   ðã Û ß Ý )à ‡�× Ñ �!Ô òòó
	ó	ó	ó	ó 'ñF Ù…Fð r   