?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)