?gemv
向量与矩阵乘积。
即:或或
对于Fortran接口另有:或或
alpha和beta是乘法系数,x和y是向量,A是m*n的一般矩阵。
接口定义
C interface:
void cblas_sgemv(const enum CBLAS_ORDER order, const enum CBLAS_TRANSPOSE trans, const BLASINT m, const BLASINT n, const float alpha, const float *a, const BLASINT lda, const float *x, const BLASINT incx, const float beta, float *y, const BLASINT incy);
void cblas_dgemv(const enum CBLAS_ORDER order, const enum CBLAS_TRANSPOSE trans, const BLASINT m, const BLASINT n, const double alpha, const double *a, const BLASINT lda, const double *x, const BLASINT incx, const double beta, double *y, const BLASINT incy);
void cblas_cgemv(const enum CBLAS_ORDER order, const enum CBLAS_TRANSPOSE trans, const BLASINT m, const BLASINT n, const void *alpha, const void *a, const BLASINT lda, const void *x, const BLASINT incx, const void *beta, void *y, const BLASINT incy);
void cblas_zgemv(const enum CBLAS_ORDER order, const enum CBLAS_TRANSPOSE trans, const BLASINT m, const BLASINT n, const void *alpha, const void *a, const BLASINT lda, const void *x, const BLASINT incx, const void *beta, void *y, const BLASINT incy);
Fortran interface:
CALL SGEMV(TRANS, M, N, ALPHA, A, LDA, X, INCX, BETA, Y, INCY)
CALL DGEMV(TRANS, M, N, ALPHA, A, LDA, X, INCX, BETA, Y, INCY)
CALL CGEMV(TRANS, M, N, ALPHA, A, LDA, X, INCX, BETA, Y, INCY)
CALL ZGEMV(TRANS, M, N, ALPHA, A, LDA, X, INCX, BETA, Y, INCY)
参数
参数名 |
类型 |
描述 |
输入/输出 |
---|---|---|---|
order |
枚举类型CBLAS_ORDER |
表示矩阵是行主序或列主序。 |
输入 |
trans |
枚举类型CBLAS_TRANSPOSE |
表示矩阵A的操作。
对于Fortran接口另有: |
输入 |
m |
整型数 |
表示矩阵A的行数,要求m大于或等于零。 |
输入 |
n |
整型数 |
表示矩阵A的列数,要求n大于或等于零。 |
输入 |
alpha |
|
表示乘法系数。 |
输入 |
a |
|
矩阵,矩阵规模是lda*n。 |
输入 |
lda |
整型数 |
矩阵A中主维度长度,如果矩阵A为列存,要求lda大于或等于max(1, m),否则要求大于或等于max(1, n)。 |
输入 |
x |
|
向量x。 如果trans=CblasNoTrans,则向量规模至少是(1+(n-1)*abs(incx))。 否则,向量规模至少是(1+(m-1)*abs(incy))。 |
输入 |
incx |
整型数 |
表示x中向量增长步长,不能为零。 |
输入 |
beta |
|
乘法系数。 |
输入 |
y |
|
向量y。 如果trans=CblasNoTrans,则向量规模至少是(1+(m-1)*abs(incy))。 否则,向量规模至少是(1+(n-1)*abs(incy))。 |
输入/输出 |
incy |
整型数 |
表示y中向量增长步长,不能为零。 |
输入 |
依赖
#include "kblas.h"
示例
C interface:
int m = 3, n = 3, lda = 3, incx = 1, incy = 1; float alpha = 1.0, beta = 2.0; /** * A: * 0.340188, 0.298440, -0.164777 * -0.105617, 0.411647, 0.268230 * 0.283099, -0.302449, -0.222225 * X: * 0.053970, -0.022603, 0.128871 * Y: * -0.135216, 0.013401, 0.452230 */ float a[9] = {0.340188, 0.298440, -0.164777, -0.105617, 0.411647, 0.268230, 0.283099, -0.302449, -0.222225}; float x[3] = {0.053970, -0.022603, 0.128871}; float y[3] = {-0.135216, 0.013401, 0.452230}; cblas_sgemv(CblasColMajor,CblasNoTrans, m, n, alpha, a, lda, x, incx, beta, y, incy); /** * Output Y: -0.213202, -0.005373, 0.860866 * */
Fortran interface:
INTEGER :: M=3 INTEGER :: N=3 INTEGER :: LDA=3 INTEGER :: INCX=1 INTEGER :: INCY=1 REAL(4) :: ALPHA=1.0 REAL(4) :: BETA=2.0 REAL(4) :: A(3, 3) DATA A/0.340188, 0.298440, -0.164777, $ -0.105617, 0.411647, 0.268230, $ 0.283099, -0.302449, -0.222225/ REAL(4) :: X(3) DATA X/0.053970, -0.022603, 0.128871/ REAL(4) :: Y(3) DATA Y/-0.135216, 0.013401, 0.452230/ EXTERNAL SGEMV CALL SGEMV('N', M, N, ALPHA, A, LDA, X, INCX, BETA, Y, INCY) * Output Y: -0.213201538, -5.37255174E-03, 0.860865831