---
title: 关于A、B、C矩阵的Shape及内存大小计算公式
description: "- A、B、C矩阵是否转置的标记如果设置为ACL_TRANS_N或ACL_TRANS_T，则用户在申请内存存放A、B、C矩阵数据时，实际申请的内存要和实际数据大小匹配，Shape及内存大小的计算公式如下："
url: https://www.hiascend.com/document/detail/zh/canncommercial/latest/API/ascendgraphapi/aclcppdevg_03_0266.html
sourcePath: /source/zh/canncommercial/900/API/ascendgraphapi/aclcppdevg_03_0266.html
indexId: b468b7d4f34cd05dbebdd42fd6c2de31aca81f61afd1cd67ad830758a46a014572
---
# 关于A、B、C矩阵的Shape及内存大小计算公式

- A、B、C矩阵是否转置的标记如果设置为ACL_TRANS_N或ACL_TRANS_T，则用户在申请内存存放A、B、C矩阵数据时，实际申请的内存要和实际数据大小匹配，Shape及内存大小的计算公式如下：

  - A矩阵：shape = (m, k)；内存大小 = m*k*sizeof(dataTypeA)
  - B矩阵：shape = (k, n)；内存大小 = k*n*sizeof(dataTypeB)
  - C矩阵：shape = (m, n)；内存大小 = m*n*sizeof(dataTypeC)
- A、B、C矩阵是否转置的标记如果设置为ACL_TRANS_NZ，表示采用内部数据格式，矩阵Shape为4维，Shape及内存大小的计算公式如下（假设m,k,n分别为原始轴，⌈ ⌉表示向上对齐）：

  - 当矩阵A和矩阵B中数据的类型为
aclFloat16(https://www.hiascend.comdocument/detail/zh/canncommercial/900/API/runtimeapi/aclcppdevg_03_1347.html)，在计算实际内存大小时，m、k、n均按16对齐向上取整计算：

    - A矩阵：shape = (⌈k/16⌉, ⌈m/16⌉, 16, 16)；内存大小 = ⌈m/16⌉*16*⌈k/16⌉*16*sizeof(dataTypeA)
    - B矩阵：shape = (⌈n/16⌉, ⌈k/16⌉, 16, 16)；内存大小 = ⌈k/16⌉*16*⌈n/16⌉*16*sizeof(dataTypeB)
    - C矩阵：shape = (⌈n/16⌉, ⌈m/16⌉, 16, 16)；内存大小 = ⌈m/16⌉*16*⌈n/16⌉*16*sizeof(dataTypeC)
  - 当矩阵A和矩阵B中数据的类型为int8_t，在计算实际内存大小时，reduce轴按32对齐向上取整计算，非reduce轴按16对齐向上取整计算：

    - A矩阵：shape = (⌈k/32⌉, ⌈m/16⌉, 16, 32)；内存大小 = ⌈m/16⌉*16*⌈k/32⌉*32*sizeof(dataTypeA)
    - B矩阵：shape = (⌈k/32⌉, ⌈n/16⌉, 32, 16)；内存大小 = ⌈k/32⌉*32*⌈n/16⌉*16*sizeof(dataTypeB)
    - C矩阵：shape = (⌈n/16⌉, ⌈m/16⌉, 16, 16)；内存大小 = ⌈m/16⌉*16*⌈n/16⌉*16*sizeof(dataTypeC)
