cuBLAS Level-1 Function

cuBLAS Level-1 Function

Level-1 BLAS函數(shù)進行的是標(biāo)量,向量的基本操作。僅為學(xué)習(xí)記錄,具體內(nèi)容請以nvidia官方文檔為準(zhǔn):
https://docs.nvidia.com/cuda/cublas/index.html#cublas-level-1-function-reference

函數(shù)命名中的一些字符的含義:


Screen Shot 2018-11-10 at 9.17.36 AM.png
  • cublasI<t>amax()
cublasStatus_t cublasIsamax(cublasHandle_t handle, int n,
                            const float *x, int incx, int *result)
cublasStatus_t cublasIdamax(cublasHandle_t handle, int n,
                            const double *x, int incx, int *result)
cublasStatus_t cublasIcamax(cublasHandle_t handle, int n,
                            const cuComplex *x, int incx, int *result)
cublasStatus_t cublasIzamax(cublasHandle_t handle, int n,
                            const cuDoubleComplex *x, int incx, int *result)

這些函數(shù)尋找最大長度元素的最小索引值。也就是說找到i使得|Im(x[j])| + |Re(x[j])|最大, 其中i\in [1,...,n], j=1+(i-1) * incx
參數(shù)以及返回值如下圖:

參數(shù)以及返回值

  • cublasI<t>amin()
cublasStatus_t cublasIsamin(cublasHandle_t handle, int n,
                            const float *x, int incx, int *result)
cublasStatus_t cublasIdamin(cublasHandle_t handle, int n,
                            const double *x, int incx, int *result)
cublasStatus_t cublasIcamin(cublasHandle_t handle, int n,
                            const cuComplex *x, int incx, int *result)
cublasStatus_t cublasIzamin(cublasHandle_t handle, int n,
                            const cuDoubleComplex *x, int incx, int *result)

該函數(shù)找到擁有最小長度的元素的最小索引值。也就是說找到i使得|Im(x[j])| + |Re(x[j])|最小, 其中i\in [1,...,n], j=1+(i-1) * incx

參數(shù)以及返回值如下圖:


參數(shù)以及返回值
  • cublas<t>asum()
cublasStatus_t  cublasSasum(cublasHandle_t handle, int n,
                            const float           *x, int incx, float  *result)
cublasStatus_t  cublasDasum(cublasHandle_t handle, int n,
                            const double          *x, int incx, double *result)
cublasStatus_t cublasScasum(cublasHandle_t handle, int n,
                            const cuComplex       *x, int incx, float  *result)
cublasStatus_t cublasDzasum(cublasHandle_t handle, int n,
                            const cuDoubleComplex *x, int incx, double *result)

該函數(shù)計算向量x的元素的絕對值的和。也就是說,計算結(jié)果為\sum_{i=1}^n |Im(x[j])|+Re|(x[j])||,其中j=1+(i-1)*incx

參數(shù)以及返回值


參數(shù)以及返回值
  • cublas<t>axpy()
cublasStatus_t cublasSaxpy(cublasHandle_t handle, int n,
                           const float           *alpha,
                           const float           *x, int incx,
                           float                 *y, int incy)
cublasStatus_t cublasDaxpy(cublasHandle_t handle, int n,
                           const double          *alpha,
                           const double          *x, int incx,
                           double                *y, int incy)
cublasStatus_t cublasCaxpy(cublasHandle_t handle, int n,
                           const cuComplex       *alpha,
                           const cuComplex       *x, int incx,
                           cuComplex             *y, int incy)
cublasStatus_t cublasZaxpy(cublasHandle_t handle, int n,
                           const cuDoubleComplex *alpha,
                           const cuDoubleComplex *x, int incx,
                           cuDoubleComplex       *y, int incy)

該函數(shù)計算向量x和標(biāo)量\alpha的積,并將結(jié)果加到y上,得到的結(jié)果覆蓋最后一個向量值。y[j]=\alpha * x[k]+y[j],其中i \in [1,...,n], k=1+(i-1)*incx, j=1+(i-1)*incy

參數(shù)及返回值


參數(shù)以及返回值
  • cublas<t>copy()
cublasStatus_t cublasScopy(cublasHandle_t handle, int n,
                           const float           *x, int incx,
                           float                 *y, int incy)
cublasStatus_t cublasDcopy(cublasHandle_t handle, int n,
                           const double          *x, int incx,
                           double                *y, int incy)
cublasStatus_t cublasCcopy(cublasHandle_t handle, int n,
                           const cuComplex       *x, int incx,
                           cuComplex             *y, int incy)
cublasStatus_t cublasZcopy(cublasHandle_t handle, int n,
                           const cuDoubleComplex *x, int incx,
                           cuDoubleComplex       *y, int incy)

將向量x復(fù)制到y中,y[j]=x[k]其中i\in[1,...n], k=1+(i-1)*incx,j=1+(i-1)*incy。

  • cublas<t>dot()
cublasStatus_t cublasSdot (cublasHandle_t handle, int n,
                           const float           *x, int incx,
                           const float           *y, int incy,
                           float           *result)
cublasStatus_t cublasDdot (cublasHandle_t handle, int n,
                           const double          *x, int incx,
                           const double          *y, int incy,
                           double          *result)
cublasStatus_t cublasCdotu(cublasHandle_t handle, int n,
                           const cuComplex       *x, int incx,
                           const cuComplex       *y, int incy,
                           cuComplex       *result)
cublasStatus_t cublasCdotc(cublasHandle_t handle, int n,
                           const cuComplex       *x, int incx,
                           const cuComplex       *y, int incy,
                           cuComplex       *result)
cublasStatus_t cublasZdotu(cublasHandle_t handle, int n,
                           const cuDoubleComplex *x, int incx,
                           const cuDoubleComplex *y, int incy,
                           cuDoubleComplex *result)
cublasStatus_t cublasZdotc(cublasHandle_t handle, int n,
                           const cuDoubleComplex *x, int incx,
                           const cuDoubleComplex *y, int incy,
                           cuDoubleComplex       *result)

計算兩個向量的點積。\sum_{i=1}^n(x[h]*y[j]),其中k=1+(i-1)*incx,j=1+(i-1)*incy

Screen Shot 2018-11-10 at 9.29.13 AM.png

  • cublas<t>nrm2()
cublasStatus_t  cublasSnrm2(cublasHandle_t handle, int n,
                            const float           *x, int incx, float  *result)
cublasStatus_t  cublasDnrm2(cublasHandle_t handle, int n,
                            const double          *x, int incx, double *result)
cublasStatus_t cublasScnrm2(cublasHandle_t handle, int n,
                            const cuComplex       *x, int incx, float  *result)
cublasStatus_t cublasDznrm2(cublasHandle_t handle, int n,
                            const cuDoubleComplex *x, int incx, double *result)

計算向量x的歐式長度,\sum_{i=1}^n (x[j]*x[j]) ,其中j=1+(i-1)*incx

Screen Shot 2018-11-10 at 9.32.21 AM.png

  • cublas<t>rot()
cublasStatus_t  cublasSrot(cublasHandle_t handle, int n,
                           float           *x, int incx,
                           float           *y, int incy,
                           const float  *c, const float           *s)
cublasStatus_t  cublasDrot(cublasHandle_t handle, int n,
                           double          *x, int incx,
                           double          *y, int incy,
                           const double *c, const double          *s)
cublasStatus_t  cublasCrot(cublasHandle_t handle, int n,
                           cuComplex       *x, int incx,
                           cuComplex       *y, int incy,
                           const float  *c, const cuComplex       *s)
cublasStatus_t cublasCsrot(cublasHandle_t handle, int n,
                           cuComplex       *x, int incx,
                           cuComplex       *y, int incy,
                           const float  *c, const float           *s)
cublasStatus_t  cublasZrot(cublasHandle_t handle, int n,
                           cuDoubleComplex *x, int incx,
                           cuDoubleComplex *y, int incy,
                           const double *c, const cuDoubleComplex *s)
cublasStatus_t cublasZdrot(cublasHandle_t handle, int n,
                           cuDoubleComplex *x, int incx,
                           cuDoubleComplex *y, int incy,
                           const double *c, const double          *s)

該函數(shù)對向量進行旋轉(zhuǎn)變換,在向量x,y所處的平面內(nèi),逆時針旋轉(zhuǎn)\alpha,其中cos(\alpha)=c,sin(\alpha)=s。
結(jié)果為x[k]=c*x[k]+s*y[j],y[j]=-s*x[k]+c*y[j]其中k = 1 + ( i - 1 ) * incx,j = 1 + ( i - 1 ) * incy

Screen Shot 2018-11-10 at 9.36.37 AM.png

  • cublas<t>rotg()
cublasStatus_t cublasSrotg(cublasHandle_t handle,
                           float           *a, float           *b,
                           float  *c, float           *s)
cublasStatus_t cublasDrotg(cublasHandle_t handle,
                           double          *a, double          *b,
                           double *c, double          *s)
cublasStatus_t cublasCrotg(cublasHandle_t handle,
                           cuComplex       *a, cuComplex       *b,
                           float  *c, cuComplex       *s)
cublasStatus_t cublasZrotg(cublasHandle_t handle,
                           cuDoubleComplex *a, cuDoubleComplex *b,
                           double *c, cuDoubleComplex *s)

該函數(shù)構(gòu)建旋轉(zhuǎn)矩陣:G = \left\{ \begin{matrix} c & s \\ -s & c \end{matrix} \right\} \tag{2}
然后令向量(a,b)^T第二個元素為0,也就是:

Screen Shot 2018-11-10 at 9.44.32 AM.png

  • cublas<t>rotm()
cublasStatus_t cublasSrotm(cublasHandle_t handle, int n, float  *x, int incx,
                           float  *y, int incy, const float*  param)
cublasStatus_t cublasDrotm(cublasHandle_t handle, int n, double *x, int incx,
                           double *y, int incy, const double* param)
Screen Shot 2018-11-10 at 9.46.01 AM.png
  • cublas<t>scal()
cublasStatus_t  cublasSscal(cublasHandle_t handle, int n,
                            const float           *alpha,
                            float           *x, int incx)
cublasStatus_t  cublasDscal(cublasHandle_t handle, int n,
                            const double          *alpha,
                            double          *x, int incx)
cublasStatus_t  cublasCscal(cublasHandle_t handle, int n,
                            const cuComplex       *alpha,
                            cuComplex       *x, int incx)
cublasStatus_t cublasCsscal(cublasHandle_t handle, int n,
                            const float           *alpha,
                            cuComplex       *x, int incx)
cublasStatus_t  cublasZscal(cublasHandle_t handle, int n,
                            const cuDoubleComplex *alpha,
                            cuDoubleComplex *x, int incx)
cublasStatus_t cublasZdscal(cublasHandle_t handle, int n,
                            const double          *alpha,
                            cuDoubleComplex *x, int incx)

標(biāo)量與向量相乘

  • cublas<t>swap()
cublasStatus_t cublasSswap(cublasHandle_t handle, int n, float           *x,
                           int incx, float           *y, int incy)
cublasStatus_t cublasDswap(cublasHandle_t handle, int n, double          *x,
                           int incx, double          *y, int incy)
cublasStatus_t cublasCswap(cublasHandle_t handle, int n, cuComplex       *x,
                           int incx, cuComplex       *y, int incy)
cublasStatus_t cublasZswap(cublasHandle_t handle, int n, cuDoubleComplex *x,
                           int incx, cuDoubleComplex *y, int incy)

交換兩向量元素

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • Lua 5.1 參考手冊 by Roberto Ierusalimschy, Luiz Henrique de F...
    蘇黎九歌閱讀 14,257評論 0 38
  • ??!今天在家吃火鍋可真豐盛!有新鮮的牛肉和羊肉,有海帶和金針菇……還有我最愛吃的午餐肉和蒜味腸,看見這美味佳肴,我...
    王星皓閱讀 322評論 0 2
  • 6護士節(jié),為你唱首最美的歌 文/杜彩霞 當(dāng)五月的鮮花又一次開遍四野 當(dāng)金色的陽光又一次灑滿大地 我們又一次迎來了“...
    一切隨緣DCX閱讀 1,713評論 0 2
  • 念過很多次,細想的次數(shù)卻很少,般若到底是什么?波羅蜜多又是什么? 就像一加一為什么等于二一樣,極少被問到。能仔細想...
    TrueFar閱讀 204評論 0 0

友情鏈接更多精彩內(nèi)容