?hemm
计算矩阵A为埃尔米特矩阵乘法。
或
ALPHA, BETA为乘法系数, A为埃尔米特矩阵,B和C为m*n一般矩阵。
接口定义
C interface:
void cblas_chemm(const enum CBLAS_ORDER Order, const enum CBLAS_SIDE Side, const enum CBLAS_UPLO Uplo, const BLASINT M, const BLASINT N, const void *alpha, const void *A, const BLASINT lda, const void *B, const BLASINT ldb, const void *beta, void *C, const BLASINT ldc);
void cblas_zhemm(const enum CBLAS_ORDER Order, const enum CBLAS_SIDE Side, const enum CBLAS_UPLO Uplo, const BLASINT M, const BLASINT N, const void *alpha, const void *A, const BLASINT lda, const void *B, const BLASINT ldb, const void *beta, void *C, const BLASINT ldc);
Fortran interface:
CALL CHEMM(SIDE, UPLO, M, N, ALPHA, A, LDA, B, LDB, BETA, C, LDC)
CALL ZHEMM(SIDE, UPLO, M, N, ALPHA, A, LDA, B, LDB, BETA, C, LDC)
参数
参数名 |
类型 |
描述 |
输入/输出 |
---|---|---|---|
order |
枚举类型CBLAS_ORDER |
表示矩阵是行主序或列主序。 |
输入 |
Side |
枚举类型CBLAS_SIDE |
埃尔米特矩阵A在矩阵B的左边还是右边。 |
输入 |
Uplo |
枚举类型CBLAS_UPLO |
表示使用矩阵A的上三角或下三角。
|
输入 |
M |
整型数 |
矩阵C的行。
|
输入 |
N |
整型数 |
矩阵C的列。
|
输入 |
alpha |
|
乘法系数。 |
输入 |
A |
|
埃尔米特矩阵A(lda, ka)。 如果Side = CblasLeft, ka = m,否则ka = n。 |
输入 |
lda |
整型数 |
如果Side = CblasLeft, lda至少max(1, m),否则至少max(1, n)。 |
输入 |
B |
|
矩阵B(ldb, n)。 |
输入 |
ldb |
整型数 |
|
输入 |
beta |
|
乘法系数。 |
输入 |
C |
|
矩阵C(ldc, n)。 |
输入/输出 |
ldc |
整型数 |
|
输入 |
依赖
#include "kblas.h"
示例
C interface:
int m = 2, n = 3, lda = 4, ldb =3, ldc = 5; float alpha[2] = {2.0, 3.0}, beta[2] = {1.0, 6.0}; /** * * | (2.0, . ) . . | * A = | (13.0, -2.0) (2.0, . ) . | * | (-2.0, -6.0) (2.0, 14.0) (2.0, . ) | * | . . . | * * | (2.0, 2.0) (-13.0, 12.0) (3.0, 3.0) | * B = | (2.0, 6.0) (4.0, -5.0) (-11.0, -4.0) | * | . . . | * * | (3.0, 6.0) (-1.0, 6.0) (1.0, 7.0) | * | (-11.0, 8.0) (1.0, 1.0) (-14.0, 2.0) | * C = | . . . | * | . . . | * | . . . | * */ float a[24] = {2.0, 0, 13.0, -2.0, -2.0, -6.0, 0, 0, 0, 0, 2.0, 0, 2.0, 14.0, 0, 0, 0, 0, 0, 0,2.0, 0, 0, 0}; float b[18] = {2.0, 2.0, 2.0, 6.0, 0, 0, -13.0, 12.0, 4.0, -5.0, 0, 0, 3.0, 3.0, -11.0, -4.0, 0, 0}; float c[30] = {3.0,6.0,-11.0,8.0,0,0,0,0,0,0, -1.0,6.0,1.0,1.0,0,0,0,0,0,0, 1.0,7.0,-14.0,2.0,0,0,0,0,0,0}; cblas_chemm(CblasColMajor,CblasRight,CblasLower, m, n, alpha, a, lda, b, ldb, beta, c, ldc); /** * Ouput C * | (-777.0, -39.0) (-423.0, 84.0) (-437.0, 849.0) | * | (-10.0, 100.0) (337.0, -5.0) (-52.0, -602.0) | * C = | . . . | * | . . . | * | . . . | * */
Fortran interface:
INTEGER :: M=2, N=3 INTEGER :: LDA=4, LDB=3, LDC=5 COMPLEX(4) :: ALPHA=(2.0, 3.0), BETA=(1.0, 6.0) COMPLEX(4) :: A(4, 3), B(3, 3), C(5, 3) DATA A/(2.0, 0), (13.0, -2.0), (-2.0, -6.0), (0, 0), $ (0, 0), (2.0, 0), (2.0, 14.0), (0, 0), $ (0, 0), (0, 0), (2.0, 0), (0, 0)/ DATA B/(2.0, 2.0), (2.0, 6.0), (0, 0), $ (-13.0, 12.0), (4.0, -5.0), (0, 0), $ (3.0, 3.0), (-11.0, -4.0), (0, 0)/ DATA C/(3.0, 6.0), (-11.0, 8.0), (0, 0), (0, 0), (0, 0), $ (-1.0, 6.0), (1.0, 1.0), (0, 0), (0, 0), (0, 0), $ (1.0, 7.0), (-14.0, 2.0), (0, 0), (0, 0), (0, 0)/ EXTERNAL CHEMM CALL CHEMM('R', 'L', M, N, ALPHA, A, LDA, B, LDB, BETA, C, LDC) * Ouput C * | (-777.0, -39.0) (-423.0, 84.0) (-437.0, 849.0) | * | (-10.0, 100.0) (337.0, -5.0) (-52.0, -602.0) | * C = | . . . | * | . . . | * | . . . |