Skip to content
版 本

MrgSort

产 品 支 持 情 况

产 品

是 否 支 持

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"

将 已 经 排 好 序 的 最 多4条 队 列,合 并 排 列 成1条 队 列,结 果 按 照score域 由 大 到 小 排 序。

MrgSort接 口 通 常 处 理 经 过Sort32接 口 预 处 理 的 数 据,队 列 结 构 参 考Sort32功 能 说 明

函 数 原 型

C++
template <typename T>
__aicore__ inline void MrgSort(const LocalTensor<T>& dst, const MrgSortSrcList<T>& src, const MrgSort4Info& params)

参 数 说 明

表1 模 板 参 数 说 明

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

表2 参 数 说 明

参 数 名 称输 入/输 出说 明
dst输 出目 的 操 作 数。
类 型 为LocalTensor,支 持 的TPosition为VECIN/VECCALC/VECOUT。
LocalTensor的 起 始 地 址 需 要32字 节 对 齐。
src输 入源 操 作 数,4个 已 经 排 序 完 成 的 队 列,类 型 为MrgSortSrcList结 构 体,定 义 如 下:
template <typename T> struct MrgSortSrcList {
__aicore__ MrgSortSrcList() {}
__aicore__ MrgSortSrcList(const LocalTensor<T> src1In, const LocalTensor<T> src2In, const LocalTensor<T> src3In, const LocalTensor<T> src4In)
{
src1 = src1In[0];
src2 = src2In[0];
src3 = src3In[0];
src4 = src4In[0];
}
LocalTensor<T> src1;
LocalTensor<T> src2;
LocalTensor<T> src3;
LocalTensor<T> src4;
};
src1、src2、src3、src4类 型 为LocalTensor,支 持 的TPosition为VECIN/VECCALC/VECOUT。
LocalTensor的 起 始 地 址 需 要8字 节 对 齐。
params输 入排 序 参 数,类 型 为MrgSort4Info结 构 体。
MrgSort4Info参 数 说 明 请 参 考表 MrgSort4Info结 构 体 参 数 定 义

表3 MrgSort4Info结 构 体 参 数 定 义

参 数 名 称含 义
elementLengths长 度 为4的uint16_t数 组,用 于 存 储4个 源 队 列 的 长 度,单 位 为8B。取 值 范 围 为[0, 4095]。
ifExhaustedSuspension某 个 队 列 耗 尽 时,控 制 指 令 是 否 停 止 执 行。类 型 为bool,默 认 值 为false。
• false:某 个 队 列 耗 尽 时,指 令 不 停 止。
• true:某 个 队 列 耗 尽 时,指 令 停 止。
validBit控 制 参 与 计 算 的 队 列,有 效 值 为3、7、15。
• 取 值 为3(0'b0011),表 示 前2个 队 列 有 效。
• 取 值 为7(0'b0111),表 示 前3个 队 列 有 效。
• 取 值 为15(0'b1111),表 示 前4个 队 列 有 效。
repeatTimes重 复 迭 代 次 数。每 次 迭 代 完 成4个 队 列 的 归 并 排 序,源 操 作 数 和 目 的 操 作 数 跳 过4个 队 列 总 长 度。取 值 范 围:repeatTimes∈[0, 255]。
repeatTimes参 数 生 效 需 要 满 足4个 条 件:
• src包 含4个 队 列 并 且 长 度 一 致。
• 4个 队 列 连 续 存 储。
• ifExhaustedSuspension = false。
• validBit = 15。
注:repeatTimes = 0表 示 不 执 行 排 序,该 接 口 将 被 视 为NOP(空 操 作)。

数 据 类 型

操 作 数 支 持 的 数 据 类 型 为:half/float。

约 束 说 明

  • 不 支 持 源 操 作 数 和 目 的 操 作 数 地 址 重 叠。
  • dst的 起 始 地 址 需 要32字 节 对 齐,src中LocalTensor的 起 始 地 址 需 要8字 节 对 齐。
  • 如 果 存 在score[i]==score[j]并 且i>j,将 优 先 选 取score[j]排 在 前 面。
  • 每 次 迭 代 内 的 数 据 会 进 行 排 序,不 同 迭 代 间 的 数 据 不 会 进 行 排 序。

调 用 示 例

完 整 示 例 请 参 考MrgSort样 例

C++
// 对8个 已 排 好 序 的 队 列 进 行 合 并 排 序,repeatTimes = 2,数 据 连 续 存 放
// 每 个 队 列 包 含32个(score,index)的8Bytes结 构
// 最 后 输 出 对score域 的256个 数 完 成 排 序 后 的 结 果
AscendC::MrgSort4Info params;
params.elementLengths[0] = 32;
params.elementLengths[1] = 32;
params.elementLengths[2] = 32;
params.elementLengths[3] = 32;
params.ifExhaustedSuspension = false;
params.validBit = 0b1111;
params.repeatTimes = 2;

AscendC::MrgSortSrcList<float> srcList;
srcList.src1 = workLocal[0];
srcList.src2 = workLocal[64]; // workLocal为float类 型,每 个 队 列 占 据256Bytes空 间
srcList.src3 = workLocal[128];
srcList.src4 = workLocal[192];

AscendC::MrgSort<float>(dstLocal, srcList, params);
outQueueDst.EnQue<float>(dstLocal);
outQueueDst.FreeTensor(dstLocal);

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