?gemm3m
复数矩阵乘以矩阵。
即:
。
op(X)可取值:
,alpha,beta为乘法系数,op(A)为m*k矩阵,op(B)为k*n矩阵,C为m*n矩阵。
接口定义
C interface:
void cblas_cgemm3m(const enum CBLAS_ORDER Order, const enum CBLAS_TRANSPOSE TransA, const enum CBLAS_TRANSPOSE TransB, const BLASINT M, const BLASINT N, const BLASINT K, 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_zgemm3m(const enum CBLAS_ORDER Order, const enum CBLAS_TRANSPOSE TransA, const enum CBLAS_TRANSPOSE TransB, const BLASINT M, const BLASINT N, const BLASINT K, 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 CGEMM3M(TRANSA, TRANSB, M, N, K, ALPHA, A, LDA, B, LDB, BETA, C, LDC)
CALL ZGEMM3M(TRANSA, TRANSB, M, N, K, ALPHA, A, LDA, B, LDB, BETA, C, LDC)
参数
参数名 |
类型 |
描述 |
输入/输出 |
|---|---|---|---|
order |
枚举类型CBLAS_ORDER |
表示矩阵是行主序或列主序。 |
输入 |
TransA |
枚举类型CBLAS_TRANSPOSE |
矩阵A为常规矩阵,转置矩阵或共轭矩阵。
|
输入 |
TransB |
枚举类型CBLAS_TRANSPOSE |
矩阵B为常规矩阵,转置矩阵或共轭矩阵。
|
输入 |
M |
整型数 |
矩阵op(A)和矩阵C的行。 |
输入 |
N |
整型数 |
矩阵op(B)和矩阵C的列。 |
输入 |
K |
整型数 |
矩阵op(A)的列和矩阵op(B)的行。 |
输入 |
alpha |
|
乘法系数。 |
输入 |
A |
|
矩阵A。 |
输入 |
lda |
整型数 |
|
输入 |
B |
|
矩阵B。 |
输入 |
ldb |
整型数 |
|
输入 |
beta |
|
乘法系数。 |
输入 |
C |
|
矩阵C。 |
输入/输出 |
ldc |
整型数 |
矩阵为列存,ldc至少max(1, m),否则至少max(1,n)。 |
输入 |
依赖
#include "kblas.h"
示例
C interface:
int m = 4, k = 3, n = 4, lda = 4, ldb = 3, ldc = 4;
float alpha[2] = {1.0, 2.0}, beta[2] = {2.0, -1.0};
/**
* A:
* 0.340188, -0.105617, -0.222225, 0.053970, 0.135712, 0.217297
* 0.283099, 0.298440, -0.022603, 0.128871, -0.358397, 0.106969
* 0.411647, -0.302449, -0.135216, 0.013401, -0.483699, -0.257113
* -0.164777, 0.268230, 0.452230, 0.416195, -0.362768, 0.304177
* B:
* -0.343321, -0.099056, 0.012932, 0.339112, -0.006417, 0.472775, -0.099771, 0.391529
* -0.370210, -0.391191, 0.112640, -0.203968, -0.207483, 0.271358, -0.216685, -0.147542
* 0.498924, -0.281743, 0.137552, 0.024287, 0.026745, 0.269914, 0.307725, 0.419026
* C:
* -0.430245, 0.449327, -0.435829, -0.479977, -0.233334, 0.039760, -0.062362, 0.431835
* 0.025995, -0.413944, -0.042298, -0.436904, -0.124793, 0.260249, 0.430810, 0.220952
* -0.307786, 0.163227, -0.261720, 0.470634, 0.012535, 0.167724, -0.215707, 0.238534
* 0.390233, -0.151107, 0.402208, 0.350920, 0.031606, -0.460720, 0.139979, -0.145951
*
*/
float a[24] = {0.340188, -0.105617, 0.283099, 0.298440, 0.411647, -0.302449, -0.164777, 0.268230,
-0.222225, 0.053970, -0.022603, 0.128871, -0.135216, 0.013401, 0.452230, 0.416195,
0.135712, 0.217297, -0.358397, 0.109, -0.483699, -0.257113, -0.362768, 0.304177};
float b[24] = {-0.343321, -0.099056, -0.370210, -0.391191, 0.498924, -0.281743,
0.012932, 0.339112, 0.112640, -0.203968, 0.137552, 0.024287,
-0.006417, 0.472775, -0.207483, 0.271358, 0.026745, 0.269914,
-0.099771, 0.529, -0.216685, -0.147542, 0.307725, 0.419026};
float c[32] = {-0.430245, 0.449327, 0.025995, -0.413944, -0.307786, 0.163227, 0.390233, -0.151107,
-0.435829, -0.479977, -0.042298, -0.436904, -0.261720, 0.470634, 0.402208, 0.350920,
-0.233334, 0.039760, -0.124793, 0.260249, 0.012535, 0.167724, 0.031606, -0.460720,
-0.062362, 0.431835, 0.430810, 0.220952, -0.215707, 0.238534, 0.139979, -0.145951};
cblas_cgemm3m(CblasColMajor,CblasNoTrans,CblasNoTrans, m, n, k, alpha, a, lda, b, ldb, beta, c, ldc);
/**
* Output C:
* -0.585492, 1.678710, -1.709228, -0.246373, -0.667621, 0.493688, -0.334783, 1.318867
* -0.490883, -1.181802, -0.897803, -0.957732, -0.212003, 0.226129, 0.806885, -0.646487
* -1.120088, -0.106275, -0.253022, 1.390848, 0.374721, 0.785023, -0.050149, 0.894140
* 0.918170, -0.878755, 1.270267, 0.205796, -0.555751, -1.934741, 0.391359, -1.563382
*/
Fortran interface:
PROGRAM GEMM3M
INTEGER :: M=4, K=3, N=4
INTEGER :: LDA=4, LDB=3, LDC=4
COMPLEX(4) :: ALPHA=(1.0, 2.0), BETA=(2.0, -1.0)
COMPLEX(4) :: A(4, 3), B(3, 4), C(4, 4)
DATA A/(0.340188, -0.105617), (0.283099, 0.298440),
$ (0.411647, -0.302449), (-0.164777, 0.268230),
$ (-0.222225, 0.053970), (-0.022603, 0.128871),
$ (-0.135216, 0.013401), (0.452230, 0.416195),
$ (0.135712, 0.217297), (-0.358397, 0.109),
$ (-0.483699, -0.257113), (-0.362768, 0.304177)/
DATA B/(-0.343321, -0.099056), (-0.370210, -0.391191),
$ (0.498924, -0.281743), (0.012932, 0.339112),
$ (0.112640, -0.203968), (0.137552, 0.024287),
$ (-0.006417, 0.472775), (-0.207483, 0.271358),
$ (0.026745, 0.269914), (-0.099771, 0.529),
$ (-0.216685, -0.147542), (0.307725, 0.419026)/
DATA C/(-0.430245, 0.449327), (0.025995, -0.413944),
$ (-0.307786, 0.163227), (0.390233, -0.151107),
$ (-0.435829, -0.479977), (-0.042298, -0.436904),
$ (-0.261720, 0.470634), (0.402208, 0.350920),
$ (-0.233334, 0.039760), (-0.124793, 0.260249),
$ (0.012535, 0.167724), (0.031606, -0.460720),
$ (-0.062362, 0.431835), (0.430810, 0.220952),
$ (-0.215707, 0.238534), (0.139979, -0.145951)/
EXTERNAL CGEMM3M
CALL CGEMM3M('N', 'N', M, N, K, ALPHA, A, LDA, B, LDB,
$ BETA, C, LDC)
END
* Output C:
* (-0.585492, 1.678710), (-1.709228, -0.246373), (-0.667621, 0.493688), (-0.334783, 1.318867)
* (-0.490883, -1.181802), (-0.897803, -0.957732), (-0.212003, 0.226129), (0.806885, -0.646487)
* (-1.120088, -0.106275), (-0.253022, 1.390848), (0.374721, 0.785023), (-0.050149, 0.894140)
* (0.918170, -0.878755), (1.270267, 0.205796), (-0.555751, -1.934741), (0.391359, -1.563382)







