---
title: ?gemm3m
description: "复数矩阵乘以矩阵。"
url: https://www.hikunpeng.com/document/detail/zh/kunpengboostkithistory/2200/accel/kunpengaccel_kml_16_0066.html
sourcePath: /source/zh/kunpengboostkithistory/2200/accel/kunpengaccel_kml_16_0066.html
indexId: afd56642ff8b67faaf535076d826e5396b6fd962c9855a61f024c451f7d2005874
---
# ?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为常规矩阵，转置矩阵或共轭矩阵。 如果TransA = CblasNoTrans，。 如果TransA = CblasTrans，。 如果TransA = CblasConjTrans，。 | 输入 |
| TransB | 枚举类型CBLAS\_TRANSPOSE | 矩阵B为常规矩阵，转置矩阵或共轭矩阵。 如果TransB = CblasNoTrans，。 如果TransB = CblasTrans，。 如果TransB = CblasConjTrans，。 | 输入 |
| M | 整型数 | 矩阵op(A)和矩阵C的行。 | 输入 |
| N | 整型数 | 矩阵op(B)和矩阵C的列。 | 输入 |
| K | 整型数 | 矩阵op(A)的列和矩阵op(B)的行。 | 输入 |
| alpha | 在cgemm3m中，alpha为单精度复数类型。 在zgemm3m中，alpha为双精度复数类型。 | 乘法系数。 | 输入 |
| A | 在cgemm3m中，A为单精度复数类型。 在zgemm3m中，A为双精度复数类型。 | 矩阵A。 | 输入 |
| lda | 整型数 | 矩阵为列存，TransA = CblasNoTrans，lda至少max(1, m)，否则max(1, k)。 矩阵A为行存，TransA = CblasNoTrans，lda至少max(1, k)，否则max(1, m)。 | 输入 |
| B | 在cgemm3m中，B为单精度复数类型。 在zgemm3m中，B为双精度复数类型。 | 矩阵B。 | 输入 |
| ldb | 整型数 | 矩阵为列存，TransA = CblasNoTrans，ldb至少max(1, k)，否则max(1, n)。 矩阵A为行存，TransA = CblasNoTrans，lda至少max(1, n)，否则max(1, k)。 | 输入 |
| beta | 在cgemm3m中，beta为单精度复数类型。 在zgemm3m中，beta为双精度复数类型。 | 乘法系数。 | 输入 |
| C | 在cgemm3m中，C为单精度复数类型。 在zgemm3m中，C为双精度复数类型。 | 矩阵C。 | 输入/输出 |
| ldc | 整型数 | 矩阵为列存，ldc至少max(1, m)，否则至少max(1, n)。 | 输入 |


#### 依赖

#include "kblas.h"


#### 示例

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