Skip to content
版 本

TransDataTo5HD

产 品 支 持 情 况

产 品

是 否 支 持

Ascend 950PR/Ascend 950DT

Atlas A3 训 练 系 列 产 品/Atlas A3 推 理 系 列 产 品

Atlas A2 训 练 系 列 产 品/Atlas A2 推 理 系 列 产 品

Atlas 200I/500 A2 推 理 产 品

Atlas 推 理 系 列 产 品AI Core

Atlas 推 理 系 列 产 品Vector Core

x

Atlas 训 练 系 列 产 品

Kirin X90

Kirin 9030

功 能 说 明

头 文 件 路 径 为:"basic_api/kernel_operator_vec_transpose_intf.h"。

TransDataTo5HD接 口 数 据 格 式 转 换,一 般 用 于 将NCHW格 式 转 换 成NC1HWC0格 式。特 别 的,也 可 以 用 于 二 维 矩 阵 数 据 块 的 转 置。完 成 转 置 功 能 时,相 比 于Transpose接 口,Transpose仅 支 持16*16大 小 的 矩 阵 转 置;本 接 口 单 次repeat内 可 处 理512Byte的 数 据(16个DataBlock),根 据 数 据 类 型 不 同,支 持 不 同shape的 矩 阵 转 置,同 时 还 可 以 支 持 多 次repeat操 作。

为 方 便 开 发 者 理 解,真 值 计 算 请 参 考:TransDataTo5HD真 值 计 算

函 数 原 型

  • dstList与srcList类 型 为uint64_t的 数 组,数 组 元 素 对 应LocalTensor的 地 址 值。开 发 者 可 以 通 过LocalTensor的GetPhyAddr接 口 获 取 该 地 址 值。如 果 已 知dstList与srcList的 地 址 值,建 议 使 用 该 接 口。

    C++
    template <typename T>
    __aicore__ inline void TransDataTo5HD(uint64_t dstList[NCHW_CONV_ADDR_LIST_SIZE], uint64_t srcList[NCHW_CONV_ADDR_LIST_SIZE], const TransDataTo5HDParams& nchwconvParams)
    
  • dst与src类 型 为uint64_t的LocalTensor,连 续 存 储 对 应LocalTensor的 地 址 值。开 发 者 可 以 通 过LocalTensor的GetPhyAddr接 口 获 取 该 地 址 值。

    C++
    template <typename T>
    __aicore__ inline void TransDataTo5HD(const LocalTensor<uint64_t>& dst, const LocalTensor<uint64_t>& src, const TransDataTo5HDParams& nchwconvParams)
    
  • dstList与srcList类 型 为LocalTensor的 数 组。

    C++
    template <typename T>
    __aicore__ inline void TransDataTo5HD(const LocalTensor<T> (&dstList)[NCHW_CONV_ADDR_LIST_SIZE], const LocalTensor<T> (&srcList)[NCHW_CONV_ADDR_LIST_SIZE], const TransDataTo5HDParams& nchwconvParams)
    

参 数 说 明

表 1 模 板 参 数 说 明

参 数 名 称含 义
T操 作 数 数 据 类 型。

表 2 参 数 列 表

参 数 名 称输 入/输 出含 义
dstList输 出目 的 操 作 数 地 址 序 列。

NCHW_CONV_ADDR_LIST_SIZE固 定 长 度 为16。
类 型 为LocalTensor或 者LocalTensor的 地 址 值,支 持 的TPosition为VECIN/VECCALC/VECOUT(存 储 位 置 为Unified Buffer)。
LocalTensor的 起 始 地 址 需 要 按 照32字 节 对 齐。
srcList输 入源 操 作 数 地 址 序 列。

NCHW_CONV_ADDR_LIST_SIZE固 定 长 度 为16。
类 型 为LocalTensor或 者LocalTensor的 地 址 值,支 持 的TPosition为VECIN/VECCALC/VECOUT(存 储 位 置 为Unified Buffer)。
LocalTensor的 起 始 地 址 需 要 按 照32字 节 对 齐。
dst输 出目 的 操 作 数。

类 型 为LocalTensor,连 续 存 储 对 应LocalTensor的 地 址 值。LocalTensor支 持 的TPosition为VECIN/VECCALC/VECOUT。LocalTensor的 起 始 地 址 需 要32字 节 对 齐。
src输 入源 操 作 数。

类 型 为LocalTensor,连 续 存 储 对 应LocalTensor的 地 址 值。LocalTensor支 持 的TPosition为VECIN/VECCALC/VECOUT。LocalTensor的 起 始 地 址 需 要32字 节 对 齐。
nchwconvParams输 入用 于 控 制TransdataTo5HD的 数 据 结 构 和 指 令 迭 代 的 相 关 参 数。
nchwconvParams参 数 说 明 请 参 考TransDataTo5HDParams参 数 说 明

表 3 TransDataTo5HDParams参 数 说 明

参 数 名 称类 型说 明
dstHighHalf输 入指 定 每 个dstList地 址 中 的 数 据 存 储 到Datablock的 高 半 部 还 是 低 半 部,该 配 置 只 支 持int8_t、uint8_t的 数 据 类 型。

支 持 的 数 据 类 型 为bool,有 以 下 两 种 取 值:
•true:表 示 存 储 于Datablock的 高 半 部
•false:表 示 存 储 于Datablock的 低 半 部
srcHighHalf输 入指 定 每 个srcList地 址 中 的 数 据 从Datablock的 高 半 部 还 是 低 半 部 读 取,该 配 置 只 支 持int8_t、uint8_t的 数 据 类 型。

支 持 的 数 据 类 型 为bool,有 以 下 两 种 取 值:
•true:表 示 从Datablock的 高 半 部 读 取
•false:表 示 从Datablock的 低 半 部 读 取
repeatTimes输 入重 复 迭 代 次 数,repeatTimes∈[0,255]。

关 于 该 参 数 的 具 体 描 述 请 参 考高 维 切 分

注:
•repeatTimes=0表 示 不 会 执 行 转 换 操 作,不 会 对 目 的 操 作 数 进 行 写 入,该 接 口 将 被 视 为NOP(空 操 作)。
•当repeatTimes为1时,目 的 操 作 数/源 操 作 数 的 有 效 起 始 位 置 为dstList/srcList序 列 输 入 的 起 始 位 置 加 上dstRepStride/srcRepStride;repeatTimes为1,如 果 要 让 目 的 操 作 数/源 操 作 数 的 有 效 起 始 位 置 为dstList/srcList序 列 输 入 的 起 始 位 置,需 要 将dstRepStride/srcRepStride置 为0。
•当repeatTimes大 于1时,第 一 次repeat中 目 的 操 作 数/源 操 作 数 的 有 效 起 始 位 置 为dstList/srcList序 列 输 入 的 起 始 位 置,第 二 次 需 要 加 上dstRepStride/srcRepStride。以 此 类 推。
dstRepStride输 入相 邻 迭 代 间,矢 量 目 的 操 作 数 相 同DataBlock地 址 步 长,单 位 为DataBlock。
srcRepStride输 入相 邻 迭 代 间,矢 量 源 操 作 数 相 同DataBlock地 址 步 长,单 位 为DataBlock。

数 据 类 型

Ascend 950PR/Ascend 950DT,支 持 的 数 据 类 型 为:int8_t、uint8_t、int16_t、uint16_t、half、bfloat16_t、int32_t、uint32_t、float。

Atlas A3 训 练 系 列 产 品/Atlas A3 推 理 系 列 产 品,支 持 的 数 据 类 型 为:int8_t、uint8_t、int16_t、uint16_t、half、int32_t、uint32_t、float。

Atlas A2 训 练 系 列 产 品/Atlas A2 推 理 系 列 产 品,支 持 的 数 据 类 型 为:int8_t、uint8_t、int16_t、uint16_t、half、int32_t、uint32_t、float。

Atlas 200I/500 A2 推 理 产 品,支 持 的 数 据 类 型 为:int8_t、uint8_t、int16_t、uint16_t、half、int32_t、uint32_t、float。

Atlas 推 理 系 列 产 品AI Core,支 持 的 数 据 类 型 为:int8_t、uint8_t、int16_t、uint16_t、half、int32_t、uint32_t、float。

Atlas 训 练 系 列 产 品,支 持 的 数 据 类 型 为:int8_t、uint8_t、int16_t、uint16_t、half。

Kirin X90,支 持 的 数 据 类 型 为:int8_t、uint8_t、int16_t、uint16_t、half、int32_t、uint32_t、float。

Kirin 9030,支 持 的 数 据 类 型 为:int8_t、uint8_t、int16_t、uint16_t、half、int32_t、uint32_t、float。

约 束 说 明

  • 操 作 数 地 址 对 齐 要 求 请 参 见Unified Buffer地 址 对 齐 约 束
  • 操 作 数 地 址 重 叠 约 束 请 参 考Unified Buffer地 址 重 叠 约 束
  • dst与src中 的 地 址 需 要 连 续 存 放。
  • 单 次 和 多 次repeat操 作 实 现 转 置 功 能,都 只 需 要 配 置 一 次srcList和dstList,后 续LocalTensor地 址 通 过nchwconvParams参 数 自 动 偏 移。

返 回 值 说 明

无。

关 键 特 性 说 明

单 次repeat处 理16个DataBlock的 数 据

  • 通 过 该 接 口 做16个DataBlock大 小 的 连 续 矩 阵 转 置 时,地 址 序 列 配 置 规 则 如 下:

    • srcList:数 组 中 相 邻 地 址 的 间 隔 为blockSize个 元 素(blockSize = 32 / sizeof(T)),即 从 连 续 的DataBlock中 读 入 源 数 据;
    • dstList:数 组 中 相 邻 地 址 的 间 隔 为blockSize个 元 素(blockSize = 32 / sizeof(T)),即 目 标 数 据 写 入 连 续 的DataBlock中。
  • 通 过 该 接 口 做16个DataBlock大 小 的 矩 阵 转 置 时,nchwconvParams配 置 规 则 如 下:

    • repeatTimes:循 环 次 数 为1次;
    • srcRepStride:设 置 为0,让 源 操 作 数 的 有 效 起 始 位 置 为srcList序 列 的 起 始 位 置;
    • dstRepStride:设 置 为0,让 目 的 操 作 数 的 有 效 起 始 位 置 为dstList的 起 始 位 置。
    C++
    AscendC::TransDataTo5HDParams transDataParams;
    transDataParams.dstHighHalf = true; // 只 对int8_t、uint8_t的 入 参 有 效,从srcLocalList的 高 半 位 读 取 数 据
    transDataParams.srcHighHalf = true; // 只 对int8_t、uint8_t的 入 参 有 效,写 入dstLocalList的 高 半 位
    transDataParams.repeatTimes = 1;    // 重 复 迭 代 次 数,每 次repeat处 理16个DataBlock
    transDataParams.dstRepStride = 0;
    transDataParams.srcRepStride = 0;
    AscendC::LocalTensor<int8_t> dstLocalList[16];
    int width = 32 / sizeof(int8_t); // 每 个DataBlock存 储 的 元 素 个 数,此 处 为32个
    uint64_t dstLocalList[16];
    for (int i = 0; i < 16; i++) {   // dstLocal为int8_t类 型 的LocalTensor
      dstLocalList[i] = (uint64_t)(dstLocal[width * i].GetPhyAddr());
    }
    uint64_t srcLocalList[16];
    for (int i = 0; i < 16; i++) {   // srcLocal为int8_t类 型 的LocalTensor
      srcLocalList[i] = (uint64_t)(srcLocal[width * i].GetPhyAddr());
    }
    AscendC::TransDataTo5HD<int8_t>(dstLocalList, srcLocalList, transDataParams);
    
  • 当 数 据 类 型 位 宽 为8位 时,每 个DataBlock包 含32个 数,从 指 定 的16个DataBlock中 的 对 应 位 置 取 值,组 成 半 个DataBlock放 入 目 的 地 址 中,读 取 和 存 放 是 在DataBlock的 高 半 部 分 还 是 低 半 部 分 由 参 数srcHighHalf和dstHighHalf决 定。

    图 1 b8类 型 矩 阵 转 置 b8

  • 当 数 据 类 型 位 宽 为16位 时,每 个DataBlock包 含16个 数,从 指 定 的16个DataBlock中 的 对 应 位 置 取 值,组 成1个 新 的DataBlock放 入 目 的 地 址 中。

    图 2 b16类 型 矩 阵 转 置 b16

  • 当 数 据 类 型 位 宽 为32位 时,每 个DataBlock包 含8个 数,从 指 定 的16个DataBlock中 的 对 应 位 置 取 值,组 成2个 新 的DataBlock放 入 目 的 地 址 中。

    图 3 b32类 型 矩 阵 转 置 b32

  • 16个DataBlock数 据 可 以 不 连 续,推 荐 通 过GetPhyAddr获 取LocalTensor的 地 址 值 存 入 地 址 数 组。

    图 4 单 次repeat实 现16个DataBlock数 据 转 置单次repeat实现16个DataBlock数据转置

将NCHW格 式 转 换 成NC1HWC0格 式

  • NCHW格 式 转 换 成NC1HWC0格 式 时,如 果 是 数 据 类 型 的 位 宽 为32位 或 者16位,则C0=16;如 果 数 据 类 型 的 位 宽 为8位,则C0=32。

  • 连 续 数 据 通 过 该 接 口 做 矩 阵 转 置 或 分 形(NCHW->NC1HWC0)时,地 址 序 列 配 置 规 则 如 下:

    • srcList:数 组 中 相 邻 地 址 的 间 隔 为H * W个 元 素,即 每 个HW平 面 的 起 始 位 置;
    • dstList:数 组 中 相 邻 地 址 的 间 隔 为blockSize个 元 素(blockSize = 32 / sizeof(T)),即 目 标 数 据 写 入 连 续 的DataBlock中。
  • 连 续 数 据 通 过 该 接 口 做 矩 阵 转 置 或 分 形(NCHW->NC1HWC0)时,nchwconvParams配 置 规 则 如 下:

    • repeatTimes:循 环 次 数 为H * W / blockSize次(blockSize = 32 / sizeof(T)),即 重 复 迭 代 覆 盖 整 个HW平 面;
    • srcRepStride:设 置 为1,即 相 邻 迭 代 间,矢 量 源 操 作 数 步 长 为1 DataBlock;
    • dstRepStride:设 置 为16,即 相 邻 迭 代 间,矢 量 目 的 操 作 数 步 长 为16 DataBlock。
    C++
    constexpr uint32_t N = 2;
    constexpr uint32_t C = 32;
    constexpr uint32_t H = 16;
    constexpr uint32_t W = 16;
    constexpr uint32_t C0 = 16;
    constexpr uint32_t C1 = C / C0; // 2
    // 总 数 据 量
    constexpr uint32_t totalElements = N * C * H * W; // 16384
    // 外 循 环 次 数
    constexpr uint32_t loopCount = N * C /NCHW_CONV_ADDR_LIST_SIZE; // 4
    // 设 置 转 换 参 数:NCHW → NC1HWC0
    AscendC::TransDataTo5HDParams transParams;
    transParams.repeatTimes = 16;  // hSize * wSize / elems_per_block 处 理 整 个HW平 面 需 要 的repeat次 数
    transParams.dstRepStride = 16; // 循 环 间dstList间 隔NCHW_CONV_ADDR_LIST_SIZE个DataBlock
    transParams.srcRepStride = 1;  // 循 环 间 同 一HW平 面srcList连 续
    // 循 环 处 理 数 据
    for (uint32_t loop = 0; loop < loopCount; loop++) {
      // 设 置 地 址 列 表
      uint64_t srcList[NCHW_CONV_ADDR_LIST_SIZE];
      uint64_t dstList[NCHW_CONV_ADDR_LIST_SIZE];
      for (int i = 0; i < NCHW_CONV_ADDR_LIST_SIZE; i++) {
        srcList[i] = (uint64_t)srcLocal[loop * NCHW_CONV_ADDR_LIST_SIZE * H * W + i * H * W].GetPhyAddr();
        dstList[i] = (uint64_t)dstLocal[loop * NCHW_CONV_ADDR_LIST_SIZE * H * W + i * C0].GetPhyAddr();
      }
      // 执 行 数 据 排 布 转 换
      AscendC::TransDataTo5HD<T>(dstList, srcList, transParams);
    }
    

    nchw2nc1hwc0

调 用 示 例

本 样 例 中 只 展 示Compute流 程 中 的 部 分 代 码。如 果 您 需 要 运 行 样 例 代 码,请 将 该 代 码 段 拷 贝 并 替 换Transpose类 样 例场 景 三 完 整 样 例 模 板 中Compute函 数 的 部 分 代 码 即 可。

  • 入 参 类 型 是LocalTensor的 调 用 方 式:

    C++
    AscendC::TransDataTo5HDParams transDataParams;
    transDataParams.dstHighHalf = true; // 只 对int8_t/uint8_t的 入 参 有 效,从srcLocalList的 高 半 位 读 取 数 据
    transDataParams.srcHighHalf = true; // 只 对int8_t/uint8_t的 入 参 有 效,写 入dstLocalList的 高 半 位
    transDataParams.repeatTimes = 1; // 重 复 迭 代 次 数,每 次repeat处 理16个DataBlock
    transDataParams.dstRepStride = 0;
    transDataParams.srcRepStride = 0;
    AscendC::LocalTensor<int8_t> dstLocalList[16];
    int width = 32 / sizeof(int8_t); // 每 个DataBlock存 储 的 元 素 个 数,此 处 为32个
    for (int i = 0; i < 16; i++) { // dstLocal为int8_t类 型 的LocalTensor
        dstLocalList[i] = dstLocal[width * i];
    }
    AscendC::LocalTensor<int8_t> srcLocalList[16];
    for (int i = 0; i < 16; i++) { // srcLocal为int8_t类 型 的LocalTensor
        srcLocalList[i] = srcLocal[width * i];
    }
    AscendC::TransDataTo5HD<int8_t>(dstLocalList, srcLocalList, transDataParams);
    
  • 入 参 类 型 是LocalTensor地 址 值 的 调 用 方 式,推 荐 使 用:

    C++
    AscendC::TransDataTo5HDParams transDataParams;
    transDataParams.dstHighHalf = true; // 只 对int8_t/uint8_t的 入 参 有 效,从srcLocalList的 高 半 位 读 取 数 据
    transDataParams.srcHighHalf = true; // 只 对int8_t/uint8_t的 入 参 有 效,写 入dstLocalList的 高 半 位
    transDataParams.repeatTimes = 1; // 重 复 迭 代 次 数,每 次repeat处 理16个DataBlock
    transDataParams.dstRepStride = 0;
    transDataParams.srcRepStride = 0;
    AscendC::LocalTensor<int8_t> dstLocalList[16];
    int width = 32 / sizeof(int8_t); // 每 个DataBlock存 储 的 元 素 个 数,此 处 为32个
    uint64_t dstLocalList[16];
    for (int i = 0; i < 16; i++) { // dstLocal为int8_t类 型 的LocalTensor
        dstLocalList[i] = (uint64_t)(dstLocal[width * i].GetPhyAddr());
    }
    uint64_t srcLocalList[16];
    for (int i = 0; i < 16; i++) { // srcLocal为int8_t类 型 的LocalTensor
        srcLocalList[i] = (uint64_t)(srcLocal[width * i].GetPhyAddr());
    }
    AscendC::TransDataTo5HD<int8_t>(dstLocalList, srcLocalList, transDataParams);
    
  • 入 参 类 型 是 地 址LocalTensor的 调 用 方 式:

    C++
    AscendC::TransDataTo5HDParams transDataParams;
    transDataParams.dstHighHalf = true; // 只 对int8_t/uint8_t的 入 参 有 效,从srcLocalList的 高 半 位 读 取 数 据
    transDataParams.srcHighHalf = true; // 只 对int8_t/uint8_t的 入 参 有 效,写 入dstLocalList的 高 半 位
    transDataParams.repeatTimes = 1; // 重 复 迭 代 次 数,每 次repeat处 理16个DataBlock
    transDataParams.dstRepStride = 0;
    transDataParams.srcRepStride = 0;
    AscendC::LocalTensor<int8_t> dstLocalList[16];
    int width = 32 / sizeof(int8_t); // 每 个DataBlock存 储 的 元 素 个 数,此 处 为32个
    // 使 用TQue分 配uint64_t的 地 址LocalTensor,用 于 存 储dstLocal与srcLocal的 地 址
    AscendC::LocalTensor<uint64_t> dst = workQueueSrc1.AllocTensor<uint64_t>();
    for (int i = 0; i < 16; i++) { // dstLocal为int8_t类 型 的LocalTensor
        dst.SetValue(i, (uint64_t)(dstLocal[width * i].GetPhyAddr()));
    }
    AscendC::LocalTensor<uint64_t> src = workQueueSrc2.AllocTensor<uint64_t>();
    for (int i = 0; i < 16; i++) { // srcLocal为int8_t类 型 的LocalTensor
        src.SetValue(i, (uint64_t)(srcLocal[width * i].GetPhyAddr()));
    }
    AscendC::TransDataTo5HD<int8_t>(dst, src, transDataParams);
    // 释 放 地 址LocalTensor
    workQueueSrc1.FreeTensor(dst);
    workQueueSrc2.FreeTensor(src);
    

    当 输 入 输 出 为int8_t类 型 时,结 果 示 例 如 下:

    输 入 数 据(src):
    [[  0   1   2   3   4   5   6   7   8   9  10  11  12  13  14  15  16  17
       18  19  20  21  22  23  24  25  26  27  28  29  30  31]
     [ 32  33  34  35  36  37  38  39  40  41  42  43  44  45  46  47  48  49
       50  51  52  53  54  55  56  57  58  59  60  61  62  63]
     [ 64  65  66  67  68  69  70  71  72  73  74  75  76  77  78  79  80  81
       82  83  84  85  86  87  88  89  90  91  92  93  94  95]
     [ 96  97  98  99 100 101 102 103 104 105 106 107 108 109 110 111 112 113
      114 115 116 117 118 119 120 121 122 123 124 125 126 127]
     [  0   1   2   3   4   5   6   7   8   9  10  11  12  13  14  15  16  17
       18  19  20  21  22  23  24  25  26  27  28  29  30  31]
     [ 32  33  34  35  36  37  38  39  40  41  42  43  44  45  46  47  48  49
       50  51  52  53  54  55  56  57  58  59  60  61  62  63]
     [ 64  65  66  67  68  69  70  71  72  73  74  75  76  77  78  79  80  81
       82  83  84  85  86  87  88  89  90  91  92  93  94  95]
     [ 96  97  98  99 100 101 102 103 104 105 106 107 108 109 110 111 112 113
      114 115 116 117 118 119 120 121 122 123 124 125 126 127]
     [  0   1   2   3   4   5   6   7   8   9  10  11  12  13  14  15  16  17
       18  19  20  21  22  23  24  25  26  27  28  29  30  31]
     [ 32  33  34  35  36  37  38  39  40  41  42  43  44  45  46  47  48  49
       50  51  52  53  54  55  56  57  58  59  60  61  62  63]
     [ 64  65  66  67  68  69  70  71  72  73  74  75  76  77  78  79  80  81
       82  83  84  85  86  87  88  89  90  91  92  93  94  95]
     [ 96  97  98  99 100 101 102 103 104 105 106 107 108 109 110 111 112 113
      114 115 116 117 118 119 120 121 122 123 124 125 126 127]
     [  0   1   2   3   4   5   6   7   8   9  10  11  12  13  14  15  16  17
       18  19  20  21  22  23  24  25  26  27  28  29  30  31]
     [ 32  33  34  35  36  37  38  39  40  41  42  43  44  45  46  47  48  49
       50  51  52  53  54  55  56  57  58  59  60  61  62  63]
     [ 64  65  66  67  68  69  70  71  72  73  74  75  76  77  78  79  80  81
       82  83  84  85  86  87  88  89  90  91  92  93  94  95]
     [ 96  97  98  99 100 101 102 103 104 105 106 107 108 109 110 111 112 113
      114 115 116 117 118 119 120 121 122 123 124 125 126 127]]
    输 出 数 据(dstGm):
    // 从 输 入 数 据 的 高 半 位 读 取 数 据,写 入 输 出 数 据 的 高 半 位
    [[0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 16 48 80 112 16 48 80 112 16 48 80 112 16 48 80 112 ]
    [0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 17 49 81 113 17 49 81 113 17 49 81 113 17 49 81 113 ]
    [0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 18 50 82 114 18 50 82 114 18 50 82 114 18 50 82 114 ]
    [0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 19 51 83 115 19 51 83 115 19 51 83 115 19 51 83 115 ]
    [0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 20 52 84 116 20 52 84 116 20 52 84 116 20 52 84 116 ]
    [0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 21 53 85 117 21 53 85 117 21 53 85 117 21 53 85 117 ]
    [0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 22 54 86 118 22 54 86 118 22 54 86 118 22 54 86 118 ]
    [0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 23 55 87 119 23 55 87 119 23 55 87 119 23 55 87 119 ]
    [0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 24 56 88 120 24 56 88 120 24 56 88 120 24 56 88 120 ]
    [0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 25 57 89 121 25 57 89 121 25 57 89 121 25 57 89 121 ]
    [0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 26 58 90 122 26 58 90 122 26 58 90 122 26 58 90 122 ]
    [0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 27 59 91 123 27 59 91 123 27 59 91 123 27 59 91 123 ]
    [0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 28 60 92 124 28 60 92 124 28 60 92 124 28 60 92 124 ]
    [0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 29 61 93 125 29 61 93 125 29 61 93 125 29 61 93 125 ]
    [0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 30 62 94 126 30 62 94 126 30 62 94 126 30 62 94 126 ]
    [0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 31 63 95 127 31 63 95 127 31 63 95 127 31 63 95 127 ]]
    

    当 输 入 输 出 为half类 型 时,结 果 示 例 如 下:

    输 入 数 据(src):
    [[  0.   1.   2.   3.   4.   5.   6.   7.   8.   9.  10.  11.  12.  13.
       14.  15.]
     [ 16.  17.  18.  19.  20.  21.  22.  23.  24.  25.  26.  27.  28.  29.
       30.  31.]
     [ 32.  33.  34.  35.  36.  37.  38.  39.  40.  41.  42.  43.  44.  45.
       46.  47.]
     [ 48.  49.  50.  51.  52.  53.  54.  55.  56.  57.  58.  59.  60.  61.
       62.  63.]
     [ 64.  65.  66.  67.  68.  69.  70.  71.  72.  73.  74.  75.  76.  77.
       78.  79.]
     [ 80.  81.  82.  83.  84.  85.  86.  87.  88.  89.  90.  91.  92.  93.
       94.  95.]
     [ 96.  97.  98.  99. 100. 101. 102. 103. 104. 105. 106. 107. 108. 109.
      110. 111.]
     [112. 113. 114. 115. 116. 117. 118. 119. 120. 121. 122. 123. 124. 125.
      126. 127.]
     [128. 129. 130. 131. 132. 133. 134. 135. 136. 137. 138. 139. 140. 141.
      142. 143.]
     [144. 145. 146. 147. 148. 149. 150. 151. 152. 153. 154. 155. 156. 157.
      158. 159.]
     [160. 161. 162. 163. 164. 165. 166. 167. 168. 169. 170. 171. 172. 173.
      174. 175.]
     [176. 177. 178. 179. 180. 181. 182. 183. 184. 185. 186. 187. 188. 189.
      190. 191.]
     [192. 193. 194. 195. 196. 197. 198. 199. 200. 201. 202. 203. 204. 205.
      206. 207.]
     [208. 209. 210. 211. 212. 213. 214. 215. 216. 217. 218. 219. 220. 221.
      222. 223.]
     [224. 225. 226. 227. 228. 229. 230. 231. 232. 233. 234. 235. 236. 237.
      238. 239.]
     [240. 241. 242. 243. 244. 245. 246. 247. 248. 249. 250. 251. 252. 253.
      254. 255.]]
    
    输 出 数 据(dstGm):
    [[  0.  16.  32.  48.  64.  80.  96. 112. 128. 144. 160. 176. 192. 208.
      224. 240.]
     [  1.  17.  33.  49.  65.  81.  97. 113. 129. 145. 161. 177. 193. 209.
      225. 241.]
     [  2.  18.  34.  50.  66.  82.  98. 114. 130. 146. 162. 178. 194. 210.
      226. 242.]
     [  3.  19.  35.  51.  67.  83.  99. 115. 131. 147. 163. 179. 195. 211.
      227. 243.]
     [  4.  20.  36.  52.  68.  84. 100. 116. 132. 148. 164. 180. 196. 212.
      228. 244.]
     [  5.  21.  37.  53.  69.  85. 101. 117. 133. 149. 165. 181. 197. 213.
      229. 245.]
     [  6.  22.  38.  54.  70.  86. 102. 118. 134. 150. 166. 182. 198. 214.
      230. 246.]
     [  7.  23.  39.  55.  71.  87. 103. 119. 135. 151. 167. 183. 199. 215.
      231. 247.]
     [  8.  24.  40.  56.  72.  88. 104. 120. 136. 152. 168. 184. 200. 216.
      232. 248.]
     [  9.  25.  41.  57.  73.  89. 105. 121. 137. 153. 169. 185. 201. 217.
      233. 249.]
     [ 10.  26.  42.  58.  74.  90. 106. 122. 138. 154. 170. 186. 202. 218.
      234. 250.]
     [ 11.  27.  43.  59.  75.  91. 107. 123. 139. 155. 171. 187. 203. 219.
      235. 251.]
     [ 12.  28.  44.  60.  76.  92. 108. 124. 140. 156. 172. 188. 204. 220.
      236. 252.]
     [ 13.  29.  45.  61.  77.  93. 109. 125. 141. 157. 173. 189. 205. 221.
      237. 253.]
     [ 14.  30.  46.  62.  78.  94. 110. 126. 142. 158. 174. 190. 206. 222.
      238. 254.]
     [ 15.  31.  47.  63.  79.  95. 111. 127. 143. 159. 175. 191. 207. 223.
      239. 255.]]
    

    当 输 入 输 出 为int32_t类 型 时,结 果 示 例 如 下:

    输 入 数 据(src):
    [[  0   1   2   3   4   5   6   7  ]
     [  8   9  10  11  12  13  14  15  ]
     [ 16  17  18  19  20  21  22  23  ]
     [ 24  25  26  27  28  29  30  31  ]
     [ 32  33  34  35  36  37  38  39  ]
     [ 40  41  42  43  44  45  46  47  ]
     [ 48  49  50  51  52  53  54  55  ]
     [ 56  57  58  59  60  61  62  63  ]
     [ 64  65  66  67  68  69  70  71  ]
     [ 72  73  74  75  76  77  78  79  ]
     [ 80  81  82  83  84  85  86  87  ]
     [ 88  89  90  91  92  93  94  95  ]
     [ 96  97  98  99  100 101 102 103 ]
     [ 104 105 106 107 108 109 110 111 ]
     [ 112 113 114 115 116 117 118 119 ]
     [ 120 121 122 123 124 125  126 127]]
    输 出 数 据(dstGm):
    [[ 0 8 16 24 32 40 48 56 64 72 80 88 96 104 112 120   ]
     [ 1 9 17 25 33 41 49 57 65 73 81 89 97 105 113 121   ] 
     [ 2 10 18 26 34 42 50 58 66 74 82 90 98 106 114 122  ]
     [ 3 11 19 27 35 43 51 59 67 75 83 91 99 107 115 123  ]
     [ 4 12 20 28 36 44 52 60 68 76 84 92 100 108 116 124 ] 
     [ 5 13 21 29 37 45 53 61 69 77 85 93 101 109 117 125 ]
     [ 6 14 22 30 38 46 54 62 70 78 86 94 102 110 118 126 ]
     [ 7 15 23 31 39 47 55 63 71 79 87 95 103 111 119 127 ]]
    

免 责 声 明:本 站 内 容 由 asc-devkit 仓 master 分 支 自 动 编 译 生 成,属 于 持 续 开 发 版 本,可 能 存 在 缺 陷,仅 供 预 览 与 参 考。如 需 稳 定 及 商 用 资 料,请 查 阅 官 方 昇 腾 社 区