---
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/aclpythondevg_01_0801.html
sourcePath: /source/zh/canncommercial/900/API/ascendgraphapi/aclpythondevg_01_0801.html
indexId: c43e773e282c953916a4b50ebcb767e7f1747fab781a0074a05d3580ae425c0e75
---
# 关于A、B、C矩阵的Shape及内存大小计算公式

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

  - A矩阵：shape = (m, k)；内存大小 = m * k * acl.data_type_size(data_type_a)
  - B矩阵：shape = (k, n)；内存大小 = k * n * acl.data_type_size(data_type_b)
  - C矩阵：shape = (m, n)；内存大小 = m * n * acl.data_type_size(data_type_c)
- A、B、C矩阵是否转置的标记如果设置为ACL_TRANS_NZ，表示采用内部数据格式，矩阵Shape为4维，Shape及内存大小的计算公式如下（假设m,k,n分别为原始轴）：

  - 当矩阵A和矩阵B中数据的类型为aclFloat16，在计算实际内存大小时，m、k、n均按16对齐向上取整计算：

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

    - A矩阵：shape = (⌈k/32⌉, ⌈m/16⌉, 16, 32)；内存大小 = ⌈m/16⌉ * 16 * ⌈k/32⌉ * 32 * acl.data_type_size(data_type_a)
    - B矩阵：shape = (⌈k/32⌉, ⌈n/16⌉, 32, 16)；内存大小 = ⌈k/32⌉ * 32 * ⌈n/16⌉ * 16 * acl.data_type_size(data_type_b)
    - C矩阵：shape = (⌈n/16⌉, ⌈m/16⌉, 16, 16)；内存大小 = ⌈m/16⌉ * 16 * ⌈n/16⌉ * 16 * acl.data_type_size(data_type_c)
⌈ ⌉表示向上对齐。
