MrgSort
产 品 支 持 情 况
功 能 说 明
头 文 件 路 径 为:"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 {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);