EN
注册
我要评分
文档获取效率
文档正确性
内容完整性
文档易理解
在线提单
论坛求助

?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的操作。

  • 如果trans=CblasNoTrans,则
  • 如果trans=CblasTrans,则
  • 如果trans=CblasConjTrans,则

对于Fortran接口另有:

  • 如果TransA = R,则:

  • 如果TransA = S,则:

  • 如果TransA = D,则:

输入

m

整型数

表示矩阵A的行数,要求m大于或等于零。

输入

n

整型数

表示矩阵A的列数,要求n大于或等于零。

输入

alpha

  • 在sgemv中是单精度浮点类型。
  • 在dgemv中是双精度浮点类型。
  • 在cgemv中是单精度复数类型。
  • 在zgemv中是双精度复数类型。

表示乘法系数。

输入

a

  • 在sgemv中是单精度浮点类型。
  • 在dgemv中是双精度浮点类型。
  • 在cgemv中是单精度复数类型。
  • 在zgemv中是双精度复数类型。

矩阵,矩阵规模是lda*n。

输入

lda

整型数

矩阵A中主维度长度,如果矩阵A为列存,要求lda大于或等于max(1, m),否则要求大于或等于max(1, n)。

输入

x

  • 在sgemv中是单精度浮点类型。
  • 在dgemv中是双精度浮点类型。
  • 在cgemv中是单精度复数类型。
  • 在zgemv中是双精度复数类型。

向量x。

如果trans=CblasNoTrans,则向量规模至少是(1+(n-1)*abs(incx))。

否则,向量规模至少是(1+(m-1)*abs(incy))。

输入

incx

整型数

表示x中向量增长步长,不能为零。

输入

beta

  • 在sgemv中是单精度浮点类型。
  • 在dgemv中是双精度浮点类型。
  • 在cgemv中是单精度复数类型。
  • 在zgemv中是双精度复数类型。

乘法系数。

输入

y

  • 在sgemv中是单精度浮点类型。
  • 在dgemv中是双精度浮点类型。
  • 在cgemv中是单精度复数类型。
  • 在zgemv中是双精度复数类型。

向量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