stdlib icon indicating copy to clipboard operation
stdlib copied to clipboard

[RFC]: Add BLAS bindings and implementations for linear algebra (tracking issue)

Open aman-095 opened this issue 1 year ago • 8 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
    • [x] JavaScript
    • [ ] C/Fortran
  • [ ] SROTMG
    • [ ] JavaScript
    • [ ] C/Fortran
  • [x] SROT
    • [x] JavaScript
    • [x] C/Fortran
  • [x] SROTM
    • [x] JavaScript
    • [x] C/Fortran
  • [x] SSWAP
    • [x] JavaScript
    • [x] C/Fortran
  • [x] SSCAL
    • [x] JavaScript
    • [x] C/Fortran
  • [x] SCOPY
    • [x] JavaScript
    • [x] C/Fortran
  • [x] SAXPY
    • [x] JavaScript
    • [x] C/Fortran
  • [x] SDOT
    • [x] JavaScript
    • [x] C/Fortran
  • [x] SDSDOT
    • [x] JavaScript
    • [x] C/Fortran
  • [x] SNRM2
    • [x] JavaScript
    • [x] C/Fortran
  • [x] SCNRM2
    • [x] JavaScript
    • [x] C/Fortran
  • [x] SASUM
    • [x] JavaScript
    • [x] C/Fortran
  • [x] ISAMAX
    • [x] JavaScript
    • [x] C/Fortran

Double Precision

  • [ ] DROTG
    • [x] JavaScript
    • [ ] C/Fortran
  • [ ] DROTMG
    • [ ] JavaScript
    • [ ] C/Fortran
  • [x] DROT
    • [x] JavaScript
    • [x] C/Fortran
  • [x] DROTM
    • [x] JavaScript
    • [x] C/Fortran
  • [x] DSWAP
    • [x] JavaScript
    • [x] C/Fortran
  • [x] DSCAL
    • [x] JavaScript
    • [x] C/Fortran
  • [x] DCOPY
    • [x] JavaScript
    • [x] C/Fortran
  • [x] DAXPY
    • [x] JavaScript
    • [x] C/Fortran
  • [x] DDOT
    • [x] JavaScript
    • [x] C/Fortran
  • [x] DSDOT
    • [x] JavaScript
    • [x] C/Fortran
  • [x] DNRM2
    • [x] JavaScript
    • [x] C/Fortran
  • [x] DZNRM2
    • [x] JavaScript
    • [x] C/Fortran
  • [x] DASUM
    • [x] JavaScript
    • [x] C/Fortran
  • [x] IDAMAX
    • [x] JavaScript
    • [x] C/Fortran

Complex Single

  • [ ] CROTG
    • [ ] JavaScript
    • [ ] C/Fortran
  • [x] CSROT
    • [x] JavaScript
    • [x] C/Fortran
  • [x] CSWAP
    • [x] JavaScript
    • [x] C/Fortran
  • [x] CSCAL
    • [x] JavaScript
    • [x] C/Fortran
  • [ ] CSSCAL
    • [ ] JavaScript
    • [ ] C/Fortran
  • [x] CCOPY
    • [x] JavaScript
    • [x] C/Fortran
  • [ ] CAXPY
    • [x] JavaScript
    • [ ] C/Fortran
  • [ ] CDOTU
    • [ ] JavaScript
    • [ ] C/Fortran
  • [ ] CDOTC
    • [ ] JavaScript
    • [ ] C/Fortran
  • [x] SCASUM
    • [x] JavaScript
    • [x] C/Fortran
  • [ ] ICAMAX
    • [ ] JavaScript
    • [ ] C/Fortran

Complex Double

  • [ ] ZROTG
    • [ ] JavaScript
    • [ ] C/Fortran
  • [x] ZDROT
    • [x] JavaScript
    • [x] C/Fortran
  • [x] ZSWAP
    • [x] JavaScript
    • [x] C/Fortran
  • [x] ZSCAL
    • [x] JavaScript
    • [x] C/Fortran
  • [ ] ZDSCAL
    • [ ] JavaScript
    • [ ] C/Fortran
  • [x] ZCOPY
    • [x] JavaScript
    • [x] C/Fortran
  • [ ] ZAXPY
    • [x] JavaScript
    • [ ] C/Fortran
  • [ ] ZDOTU
    • [ ] JavaScript
    • [ ] C/Fortran
  • [ ] ZDOTC
    • [ ] JavaScript
    • [ ] C/Fortran
  • [ ] DZASUM
    • [ ] JavaScript
    • [ ] C/Fortran
  • [ ] IZAMAX
    • [ ] JavaScript
    • [ ] C/Fortran

Level 2

Single Precision

  • [ ] SGEMV
    • [x] JavaScript
    • [ ] C/Fortran
  • [ ] SGBMV
    • [ ] JavaScript
    • [ ] C/Fortran
  • [ ] SSYMV
    • [x] JavaScript
    • [ ] C/Fortran
  • [ ] SSBMV
    • [ ] JavaScript
    • [ ] C/Fortran
  • [ ] SSPMV
    • [x] JavaScript
    • [ ] C/Fortran
  • [ ] STRMV
    • [x] JavaScript
    • [ ] C/Fortran
  • [ ] STBMV
    • [ ] JavaScript
    • [ ] C/Fortran
  • [ ] STPMV
    • [ ] JavaScript
    • [ ] C/Fortran
  • [ ] STRSV
    • [x] JavaScript
    • [ ] C/Fortran
  • [ ] STBSV
    • [ ] JavaScript
    • [ ] C/Fortran
  • [ ] STPSV
    • [ ] JavaScript
    • [ ] C/Fortran
  • [ ] SGER
    • [ ] JavaScript
    • [ ] C/Fortran
  • [ ] SSYR
    • [x] JavaScript
    • [ ] C/Fortran
  • [ ] SSPR
    • [x] JavaScript
    • [ ] C/Fortran
  • [ ] SSYR2
    • [x] JavaScript
    • [ ] C/Fortran
  • [ ] SSPR2
    • [ ] JavaScript
    • [ ] C/Fortran

Double Precision

  • [ ] DGEMV
    • [x] JavaScript
    • [ ] C/Fortran
  • [ ] DGBMV
    • [ ] JavaScript
    • [ ] C/Fortran
  • [ ] DSYMV
    • [x] JavaScript
    • [ ] C/Fortran
  • [ ] DSBMV
    • [ ] JavaScript
    • [ ] C/Fortran
  • [ ] DSPMV
    • [x] JavaScript
    • [ ] C/Fortran
  • [ ] DTRMV
    • [x] JavaScript
    • [ ] C/Fortran
  • [ ] DTBMV
    • [ ] JavaScript
    • [ ] C/Fortran
  • [ ] DTPMV
    • [ ] JavaScript
    • [ ] C/Fortran
  • [ ] DTRSV
    • [x] JavaScript
    • [ ] C/Fortran
  • [ ] DTBSV
    • [ ] JavaScript
    • [ ] C/Fortran
  • [ ] DTPSV
    • [ ] JavaScript
    • [ ] C/Fortran
  • [ ] DGER
    • [ ] JavaScript
    • [ ] C/Fortran
  • [ ] DSYR
    • [x] JavaScript
    • [ ] C/Fortran
  • [ ] DSPR
    • [x] JavaScript
    • [ ] C/Fortran
  • [ ] DSYR2
    • [x] 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
    • [x] 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
    • [x] 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

  • [X] I have read and understood the Code of Conduct.
  • [X] Searched for existing issues and pull requests.
  • [X] The issue name begins with RFC:.

aman-095 avatar Mar 25 '24 11:03 aman-095

Working on idamax and isamax level 1 routines. 

aman-095 avatar Apr 10 '24 10:04 aman-095

@performant23 That one is already being worked on in https://github.com/stdlib-js/stdlib/pull/2104.

kgryte avatar Apr 12 '24 05:04 kgryte

@performant23 Maybe try dznrm2?

kgryte avatar Apr 12 '24 05:04 kgryte

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.

performant23 avatar Apr 12 '24 05:04 performant23

Ah, you're right. That one should be straightforward.

kgryte avatar Apr 12 '24 05:04 kgryte

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!

performant23 avatar Apr 15 '24 20:04 performant23

Working on Level 1 routine drotm

aman-095 avatar Apr 16 '24 04:04 aman-095

@performant23 Yes, go for it. The one thing you need to do is ensure accessor array support. See gcopy and gswap for an idea.

kgryte avatar Apr 16 '24 05:04 kgryte