Skip to content
版 本

Sort32

产 品 支 持 情 况

产 品

是 否 支 持

Ascend 950PR/Ascend 950DT

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

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

Atlas 200I/500 A2 推 理 产 品

Atlas 推 理 系 列 产 品AI Core

x

Atlas 推 理 系 列 产 品Vector Core

x

Atlas 训 练 系 列 产 品

x

功 能 说 明

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

Sort32接 口 实 现 一 次 迭 代 内 对32个 数 的 降 序 排 列 操 作。

如 下 图 所 示,src0和src1分 别 表 示 待 排 序 的 数 据score和 对 应RP的 索 引index,排 序 完 成 后 以(score, index)的 结 构 存 储 在dst中。

src1固 定 为uint32_t类 型,无 论src0是float还 是half类 型,dst中 的(score, index)结 构 总 是 占 据8B空 间。其 中:

  • 当src0为float类 型 时,dst中 的index存 储 在 高4B,score存 储 在 低4B;
  • 当src0为half类 型 时,dst中index存 储 在 高4B,score存 储 在 低2B,中 间 的2B保 留。

图 1 Sort32排 序 示 意 图

函 数 原 型

C++
template <typename T>
__aicore__ inline void Sort32(const LocalTensor<T>& dst, const LocalTensor<T>& src0, const LocalTensor<uint32_t>& src1, const int32_t repeatTime)

参 数 说 明

表1 模 板 参 数 说 明

参 数 名描 述
T操 作 数 数 据 类 型。

表2 参 数 说 明

参 数 名 称输 入/输 出说 明
dst输 出目 的 操 作 数。
类 型 为LocalTensor,支 持 的TPosition为VECIN/VECCALC/VECOUT
LocalTensor的 起 始 地 址 需 要32字 节 对 齐。
src0输 入源 操 作 数。
类 型 为LocalTensor,支 持 的TPosition为VECIN/VECCALC/VECOUT
LocalTensor的 起 始 地 址 需 要32字 节 对 齐。
src1输 入源 操 作 数。
类 型 为LocalTensor,支 持 的TPosition为VECIN/VECCALC/VECOUT
LocalTensor的 起 始 地 址 需 要32字 节 对 齐。
注:src1的 数 据 类 型 固 定 为uint32_t。
repeatTime输 入重 复 迭 代 次 数。每 次 迭 代 完 成32个 元 素 的 排 序,下 次 迭 代src0跳 过128B空 间,src1跳 过128B空 间,dst跳 过256B空 间。每 次 迭 代 输 入src0要 求128B对 齐,src1要 求128B对 齐,输 出dst要 求256B对 齐。repeatTime∈[0, 255]。
注:repeatTime = 0表 示 不 执 行 排 序,该 接 口 将 被 视 为NOP(空 操 作)。

数 据 类 型

表3 数 据 类 型 组 合 情 况

src0数 据 类 型src1数 据 类 型dst数 据 类 型
halfuint32_thalf
floatuint32_tfloat

约 束 说 明

  • 地 址 对 齐 约 束 参 考通 用 地 址 对 齐 约 束
  • repeatTime = 0表 示 不 执 行 排 序,该 接 口 将 被 视 为NOP(空 操 作)。
  • 如 果 存 在score[i]==score[j]并 且i>j,将 优 先 选 取score[j]排 在 前 面。
  • 每 次 迭 代 内 的 数 据 会 进 行 排 序,不 同 迭 代 间 的 数 据 不 会 进 行 排 序。
  • 每 次 迭 代 输 入src0要 求128B(float)/64B(half)对 齐,src1要 求128B对 齐,输 出dst要 求256B对 齐。

调 用 示 例

完 整 示 例 请 参 考Sort32样 例

C++
AscendC::LocalTensor<float> srcLocal0 = inQueueSrc0.DeQue<float>();
AscendC::LocalTensor<uint32_t> srcLocal1 = inQueueSrc1.DeQue<uint32_t>();
AscendC::LocalTensor<float> dstLocal = outQueueDst.AllocTensor<float>();
// repeatTime = 4, 对128个 数 分 成4组 进 行 排 序,每 次 完 成1组32个 数 的 排 序
AscendC::Sort32<float>(dstLocal, srcLocal0, srcLocal1, 4);
outQueueDst.EnQue<float>(dstLocal);
inQueueSrc0.FreeTensor(srcLocal0);
inQueueSrc1.FreeTensor(srcLocal1);

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