[RFC]: Add BLAS bindings and implementations for linear algebra (tracking issue)
aman-095 opened this issue · 13 comments
Description
This RFC proposes adding BLAS routines. The purpose of this issue is to serve as a tracking issue for adding BLAS routines.
Implementation Status for BLAS Routines
Level 1
Single Precision
- SROTG
- JavaScript
- C/Fortran
- SROTMG
- JavaScript
- C/Fortran
- SROT
- JavaScript
- C/Fortran
- SROTM
- JavaScript
- C/Fortran
- SSWAP
- JavaScript
- C/Fortran
- SSCAL
- JavaScript
- C/Fortran
- SCOPY
- JavaScript
- C/Fortran
- SAXPY
- JavaScript
- C/Fortran
- SDOT
- JavaScript
- C/Fortran
- SDSDOT
- JavaScript
- C/Fortran
- SNRM2
- JavaScript
- C/Fortran
- SCNRM2
- JavaScript
- C/Fortran
- SASUM
- JavaScript
- C/Fortran
- ISAMAX
- JavaScript
- C/Fortran
Double Precision
- DROTG
- JavaScript
- C/Fortran
- DROTMG
- JavaScript
- C/Fortran
- DROT
- JavaScript
- C/Fortran
- DROTM
- JavaScript
- C/Fortran
- DSWAP
- JavaScript
- C/Fortran
- DSCAL
- JavaScript
- C/Fortran
- DCOPY
- JavaScript
- C/Fortran
- DAXPY
- JavaScript
- C/Fortran
- DDOT
- JavaScript
- C/Fortran
- DSDOT
- JavaScript
- C/Fortran
- DNRM2
- JavaScript
- C/Fortran
- DZNRM2
- JavaScript
- C/Fortran
- DASUM
- JavaScript
- C/Fortran
- IDAMAX
- JavaScript
- C/Fortran
Complex Single
- CROTG
- JavaScript
- C/Fortran
- CSROT
- JavaScript
- C/Fortran
- CSWAP
- JavaScript
- C/Fortran
- CSCAL
- JavaScript
- C/Fortran
- CSSCAL
- JavaScript
- C/Fortran
- CCOPY
- JavaScript
- C/Fortran
- CAXPY
- JavaScript
- C/Fortran
- CDOTU
- JavaScript
- C/Fortran
- CDOTC
- JavaScript
- C/Fortran
- SCASUM
- JavaScript
- C/Fortran
- ICAMAX
- JavaScript
- C/Fortran
Complex Double
- ZROTG
- JavaScript
- C/Fortran
- ZDROT
- JavaScript
- C/Fortran
- ZSWAP
- JavaScript
- C/Fortran
- ZSCAL
- JavaScript
- C/Fortran
- ZDSCAL
- JavaScript
- C/Fortran
- ZCOPY
- JavaScript
- C/Fortran
- ZAXPY
- JavaScript
- C/Fortran
- ZDOTU
- JavaScript
- C/Fortran
- ZDOTC
- JavaScript
- C/Fortran
- DZASUM
- JavaScript
- C/Fortran
- IZAMAX
- JavaScript
- C/Fortran
Level 2
Single Precision
- SGEMV
- JavaScript
- C/Fortran
- SGBMV
- JavaScript
- C/Fortran
- SSYMV
- JavaScript
- C/Fortran
- SSBMV
- JavaScript
- C/Fortran
- SSPMV
- JavaScript
- C/Fortran
- STRMV
- JavaScript
- C/Fortran
- STBMV
- JavaScript
- C/Fortran
- STPMV
- JavaScript
- C/Fortran
- STRSV
- JavaScript
- C/Fortran
- STBSV
- JavaScript
- C/Fortran
- STPSV
- JavaScript
- C/Fortran
- SGER
- JavaScript
- C/Fortran
- SSYR
- JavaScript
- C/Fortran
- SSPR
- JavaScript
- C/Fortran
- SSYR2
- JavaScript
- C/Fortran
- SSPR2
- JavaScript
- C/Fortran
Double Precision
- DGEMV
- JavaScript
- C/Fortran
- DGBMV
- JavaScript
- C/Fortran
- DSYMV
- JavaScript
- C/Fortran
- DSBMV
- JavaScript
- C/Fortran
- DSPMV
- JavaScript
- C/Fortran
- DTRMV
- JavaScript
- C/Fortran
- DTBMV
- JavaScript
- C/Fortran
- DTPMV
- JavaScript
- C/Fortran
- DTRSV
- JavaScript
- C/Fortran
- DTBSV
- JavaScript
- C/Fortran
- DTPSV
- JavaScript
- C/Fortran
- DGER
- JavaScript
- C/Fortran
- DSYR
- JavaScript
- C/Fortran
- DSPR
- JavaScript
- C/Fortran
- DSYR2
- JavaScript
- C/Fortran
- DSPR2
- JavaScript
- C/Fortran
Complex Single
- CGEMV
- JavaScript
- C/Fortran
- CGBMV
- JavaScript
- C/Fortran
- CHEMV
- JavaScript
- C/Fortran
- CHBMV
- JavaScript
- C/Fortran
- CHPMV
- JavaScript
- C/Fortran
- CTRMV
- JavaScript
- C/Fortran
- CTBMV
- JavaScript
- C/Fortran
- CTPMV
- JavaScript
- C/Fortran
- CTRSV
- JavaScript
- C/Fortran
- CTBSV
- JavaScript
- C/Fortran
- CTPSV
- JavaScript
- C/Fortran
- CGERU
- JavaScript
- C/Fortran
- CGERC
- JavaScript
- C/Fortran
- CHER
- JavaScript
- C/Fortran
- CHPR
- JavaScript
- C/Fortran
- CHER2
- JavaScript
- C/Fortran
- CHPR2
- JavaScript
- C/Fortran
Complex Double
- ZGEMV
- JavaScript
- C/Fortran
- ZGBMV
- JavaScript
- C/Fortran
- ZHEMV
- JavaScript
- C/Fortran
- ZHBMV
- JavaScript
- C/Fortran
- ZHPMV
- JavaScript
- C/Fortran
- ZTRMV
- JavaScript
- C/Fortran
- ZTBMV
- JavaScript
- C/Fortran
- ZTPMV
- JavaScript
- C/Fortran
- ZTRSV
- JavaScript
- C/Fortran
- ZTBSV
- JavaScript
- C/Fortran
- ZTPSV
- JavaScript
- C/Fortran
- ZGERU
- JavaScript
- C/Fortran
- ZGERC
- JavaScript
- C/Fortran
- ZHER
- JavaScript
- C/Fortran
- ZHPR
- JavaScript
- C/Fortran
- ZHER2
- JavaScript
- C/Fortran
- ZHPR2
- JavaScript
- C/Fortran
Level 3
Single Precision
- SGEMM
- JavaScript
- C/Fortran
- SSYMM
- JavaScript
- C/Fortran
- SSYRK
- JavaScript
- C/Fortran
- SSYR2K
- JavaScript
- C/Fortran
- STRMM
- JavaScript
- C/Fortran
- STRSM
- JavaScript
- C/Fortran
Double Precision
- DGEMM
- JavaScript
- C/Fortran
- DSYMM
- JavaScript
- C/Fortran
- DSYRK
- JavaScript
- C/Fortran
- DSYR2K
- JavaScript
- C/Fortran
- DTRMM
- JavaScript
- C/Fortran
- DTRSM
- JavaScript
- C/Fortran
Complex Single
- CGEMM
- JavaScript
- C/Fortran
- CSYMM
- JavaScript
- C/Fortran
- CHEMM
- JavaScript
- C/Fortran
- CSYRK
- JavaScript
- C/Fortran
- CHERK
- JavaScript
- C/Fortran
- CSYR2K
- JavaScript
- C/Fortran
- CHER2K
- JavaScript
- C/Fortran
- CTRMM
- JavaScript
- C/Fortran
- CTRSM
- JavaScript
- C/Fortran
Complex Double
- ZGEMM
- JavaScript
- C/Fortran
- ZSYMM
- JavaScript
- C/Fortran
- ZHEMM
- JavaScript
- C/Fortran
- ZSYRK
- JavaScript
- C/Fortran
- ZHERK
- JavaScript
- C/Fortran
- ZSYR2K
- JavaScript
- C/Fortran
- ZHER2K
- JavaScript
- C/Fortran
- ZTRMM
- JavaScript
- C/Fortran
- ZTRSM
- JavaScript
- C/Fortran
Related Issues
None.
Questions
No.
Other
No.
Checklist
- I have read and understood the Code of Conduct.
- Searched for existing issues and pull requests.
- The issue name begins with
RFC:.
Working on idamax and isamax level 1 routines.
@performant23 That one is already being worked on in #2104.
@performant23 Maybe try dznrm2?
Oh, hey! I think csscal is different right? In cscal we have a complex scalar and in csscal we have a real scalar if I remember correctly.
Ah, you're right. That one should be straightforward.
Hi @kgryte, we would need a generic interface to perform Givens rotation with vectors of other data types like integers, right? If so, I'd like to work on such an interface i.e. grot to get an idea of how generic g* interfaces are sampled from their equivalent d* implementations and also since we have implementations for those available for this package (JS implementation for drot is reviewed), this should be good to go!
Working on Level 1 routine drotm
@performant23 Yes, go for it. The one thing you need to do is ensure accessor array support. See gcopy and gswap for an idea.
For SROTMG do we need to perform the scaling check as done in the Lapack Fortren implementation .
It seems that the SciPy implementation doesn’t include this step.
SROTMG in SciPy only returning the transformation matrix and flag .
I have given a try to create a SROTMG package please do check it!