U C^c @sddlZddlZddlmZmZddlmZej dddZ ddZ dd d Z dd d Z dddZdddZdddZeredS)N)gemmeinsum) default_timercCsXtj||fdd}|tjdd|j7}tj||fdd}|tjdd|j7}||fS)NfZdtypegg?)numpyzerosrandomuniformshape)nOnI batch_sizeXWr0/tmp/pip-install-6_kvzl1k/blis/blis/benchmark.py create_data s rcCstjjd}|dS)N librariesr)rZ __config__Z blas_opt_info)Z blas_libsrrrget_numpy_blass rc Csl|j\}}|jd}d}tj||fdd}t|D]*}tj|||d||7}|dq2td|dSNrrroutTotal:)r rr rangedotsumfillprint rrnr rrtotalyirrr numpy_gemms     r'c Csj|j\}}|jd}d}tj||fdd}t|D](}t|||d||7}|dq2td|dSr)r rr rrrr r!r"rrr blis_gemm#s     r(c Csn|j\}}|jd}d}tj||fdd}t|D],}tjd|||d||7}|dq2td|dSNrrrrz ab,cb->carrr rr rrrr r!r"rrr numpy_einsum/s     r+c Csl|j\}}|jd}d}tj||fdd}t|D]*}td|||d||7}|dq2td|dSr)r*r"rrr blis_einsum;s     r,c Cstdjftt}t|||\}}|}|}tdt}t||ddt} | |} td| td|t}t||t} | |} td| tdt}t ||ddt} | |} td| td|t}t ||t} | |} td| dS) NzNSetting up data for gemm. 1000 iters, nO={nO} nI={nI} batch_size={batch_size}z Blis gemm...r)r#z %.2f secondszNumpy (%s) gemm...zBlis einsum ab,cb->cazNumpy (%s) einsum ab,cb->ca) r!formatlocalsrrcopytimerr(r'r,r+) rr rZ numpy_blasZX1ZW1ZX2ZW2startendZ blis_timeZ numpy_timerrrmainGsB       r5)r)r)r)r)r-r-r.)rZ numpy.randompyrrZtimeitrr2r seedrrr'r(r+r,r5__name__rrrrs   #