39.cublas开发指南中文版--cublas中的level-2函数hpr()_扫地的小何尚的博客-爱代码爱编程
2.6.22. cublashpr()
cublasStatus_t cublasChpr(cublasHandle_t handle, cublasFillMode_t uplo,
int n, const float *alpha,
const cuComplex *x, int incx,
cuComplex *AP)
cublasStatus_t cublasZhpr(cublasHandle_t handle, cublasFillMode_t uplo,
int n, const double *alpha,
const cuDoubleComplex *x, int incx,
cuDoubleComplex *AP)
此函数执行打包的 Hermitian rank-1 更新
A = α x x H + A A=\alpha xx^H + A A=αxxH+A
其中 A 是以列优先格式存储的 NxN Hermitian 矩阵,x 是向量, α \alpha α 是标量。
如果 uplo == CUBLAS_FILL_MODE_LOWER
则将Hermitian 矩阵 A(i,j) 下三角部分的元素逐列无间隙地打包在一起,使得元素存储在内存位置 AP[i+((2*n -j+1)*j)/2]
对于 j=1,…,n 和 i>=j 。 因此,打包格式只需要 n(n+1)/2
个元素进行存储。
如果 uplo == CUBLAS_FILL_MODE_UPPER
则将Hermitian 矩阵上三角部分的元素逐列无间隙地打包在一起,使得元素存储在内存位置 AP[i+(j*(j+1))/2 ]
对于 j=1,…,n 和 i<=j 。 因此,打包格式只需要 n(n+1)/2
个元素进行存储。
Param. | Memory | In/out | Meaning |
---|---|---|---|
handle | input | handle to the cuBLAS library context. | |
uplo | input | Indicates if matrix A lower or upper part is stored, the other Hermitian part is not referenced and is inferred from the stored elements. | |
n | input | number of columns of matrix A. | |
alpha | host or device | input | <type> scalar used for multiplication. |
AP | device | input/output | <type> array with A stored in packed format. The imaginary parts of the diagonal elements are assumed and set to zero. |
x | device | input | <type> vector with n elements if transa == CUBLAS_OP_N and m elements otherwise. |
incx | input | stride between consecutive elements of x. |
该函数可能返回的错误值及其含义如下所列。
ErrorValue | Meaning |
---|---|
CUBLAS_STATUS_SUCCESS | 操作成功完成 |
CUBLAS_STATUS_NOT_INITIALIZED | 库未初始化 |
CUBLAS_STATUS_INVALID_VALUE | If n < 0 or if incx == 0 or if uplo != CUBLAS_FILL_MODE_UPPER ,CUBLAS_FILL_MODE_LOWER or if lda < max(1, n) oralpha == NULL |
CUBLAS_STATUS_EXECUTION_FAILED | 该功能无法在 GPU 上启动 |
详细信息, 请参考: