---
title: MrgSort4
description: "| 产品 | 是否支持 |"
url: https://www.hiascend.com/document/detail/zh/canncommercial/latest/API/ascendcopapi/atlasascendc_api_07_0230.html
sourcePath: /source/zh/canncommercial/900/API/ascendcopapi/atlasascendc_api_07_0230.html
indexId: db5c8ea256ddef82d285ba8c89861545c958b9b665171f7359353da44e8e9bef76
---
# MrgSort4

#### 产品支持情况

| 产品 | 是否支持 |
| --- | --- |
| Atlas 350 加速卡 | x |
| Atlas A3 训练系列产品 / Atlas A3 推理系列产品 | x |
| Atlas A2 训练系列产品 / Atlas A2 推理系列产品 | x |
| Atlas 200I/500 A2 推理产品 | x |
| Atlas 推理系列产品 AI Core | √ |
| Atlas 推理系列产品 Vector Core | x |
| Atlas 训练系列产品 | √ |


#### 功能说明

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


#### 函数原型

```
template <typename T>
__aicore__ inline void MrgSort4(const LocalTensor<T>& dst, const MrgSortSrcList<T>& src, const MrgSort4Info& params)
```


#### 参数说明


**表1 模板参数说明**

| 参数名 | 描述 |
| --- | --- |
| T | 操作数数据类型。 Atlas 训练系列产品 ，支持的数据类型为：half Atlas 推理系列产品 AI Core，支持的数据类型为：half/float |


**表2 接口参数说明**

| 参数名 | 输入/输出 | 含义 |  |  |
| --- | --- | --- | --- | --- |
| dst | 输出 | 目的操作数，存储经过排序后的Region Proposals。 类型为LocalTensor，支持的TPosition为VECIN/VECCALC/VECOUT。 LocalTensor的起始地址需要保证16字节对齐（针对half数据类型），32字节对齐（针对float数据类型）。 |  |  |
| src | 输入 | 源操作数，4个Region Proposals队列，并且每个Region Proposal队列都已经排好序，类型为MrgSortSrcList结构体，具体定义如下： 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 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; // 第一个已经排好序的Region Proposals队列 LocalTensor<T> src2; // 第二个已经排好序的Region Proposals队列 LocalTensor<T> src3; // 第三个已经排好序的Region Proposals队列 LocalTensor<T> src4; // 第四个已经排好序的Region Proposals队列 }; Region Proposal队列的数据类型与目的操作数保持一致。src1、src2、src3、src4类型为LocalTensor，支持的TPosition为VECIN/VECCALC/VECOUT。 LocalTensor的起始地址需要保证16字节对齐（针对half数据类型），32字节对齐（针对float数据类型）。 | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 | 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; // 第一个已经排好序的Region Proposals队列 LocalTensor<T> src2; // 第二个已经排好序的Region Proposals队列 LocalTensor<T> src3; // 第三个已经排好序的Region Proposals队列 LocalTensor<T> src4; // 第四个已经排好序的Region Proposals队列 }; |
| 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 | 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; // 第一个已经排好序的Region Proposals队列 LocalTensor<T> src2; // 第二个已经排好序的Region Proposals队列 LocalTensor<T> src3; // 第三个已经排好序的Region Proposals队列 LocalTensor<T> src4; // 第四个已经排好序的Region Proposals队列 }; |  |  |  |
| params | 输入 | 排序所需参数，类型为MrgSort4Info结构体。 具体定义请参考${INSTALL\_DIR}/include/ascendc/basic\_api/interface/kernel\_struct\_proposal.h，${INSTALL\_DIR}请替换为CANN软件安装后文件存储路径。 参数说明请参考表3。 |  |  |


**表3 MrgSort4Info参数说明**

| 参数名称 | 输入/输出 | 含义 |
| --- | --- | --- |
| elementLengths | 输入 | 四个源Region Proposals队列的长度（Region Proposal数目），类型为长度为4的uint16\_t数据类型的数组，理论上每个元素取值范围[0, 4095]，但不能超出UB的存储空间。 |
| ifExhaustedSuspension | 输入 | 某条队列耗尽后，指令是否需要停止，类型为bool，默认false。 |
| validBit | 输入 | 有效队列个数，取值如下： 3：前两条队列有效 7：前三条队列有效 15：四条队列全部有效 |
| repeatTimes | 输入 | 迭代次数，每一次源操作数和目的操作数跳过四个队列总长度。取值范围：repeatTimes∈[1,255]。 repeatTimes参数生效是有条件的，需要同时满足以下四个条件： 四个源Region Proposals队列的长度一致 四个源Region Proposals队列连续存储 ifExhaustedSuspension = False validBit=15 |


#### 约束说明

- 当存在proposal[i]与proposal[j]的score值相同时，如果i>j，则proposal[j]将首先被选出来，排在前面。
- 操作数地址对齐要求请参见  通用地址对齐约束
。

- 不支持源操作数与目的操作数之间存在地址重叠。


#### 调用示例

接口使用样例```
// Region Proposals的创建如下所示
// AscendC::ProposalConcat(vconcatWorkLocal[0], srcLocal[0], repeat, mode);
// AscendC::RpSort16(vconcatWorkLocal[0], vconcatWorkLocal[0], repeat);

// vconcatWorkLocal为已经创建并且完成排序的4个Region Proposals，每个Region Proposal数目是16个
// 输入数据先经过ProposalConcat将连续元素合入Region Proposal内对应位置，然后经过RpSort16对Region Proposals中的score域对其进行排序才是各个vconcatWorkLocal。

struct MrgSortSrcList<half> srcList(vconcatWorkLocal[0], vconcatWorkLocal[1], vconcatWorkLocal[2], vconcatWorkLocal[3]);
// 四个源Region Proposals队列的长度都是16
uint16_t elementLengths[4] = {16, 16, 16, 16};
// false表示某条队列耗尽后，指令不需要停止。15表示四条队列都是有效队列。repeat=1，1次迭代
struct MrgSort4Info srcInfo(elementLengths, false, 15, 1);
AscendC::MrgSort4(dstLocal, srcList, srcInfo);
```


```
示例结果
输入数据(src_gm):
[-38.1    82.7   -40.75  -54.62   21.67  -58.53   25.94  -79.5   -61.44
26.7   -27.45   48.78   86.75  -18.1   -58.8    62.38   46.38  -78.94
-87.7   -13.81  -13.25   46.94  -47.8   -50.44   34.16   20.3    80.1
-94.1    52.4   -42.75   83.4    80.44  -66.8   -82.7   -91.44  -95.6
66.2   -30.97  -36.53   61.66   24.92  -45.1    38.97  -34.62  -69.8
59.1    34.22   11.695 -33.47   52.1    -4.832  46.88   56.78   71.4
13.29  -35.78   52.44  -46.03   83.8    83.56   71.3    -9.086 -65.06
46.25 ]
// 输入数据先经过ProposalConcat将连续元素合入Region Proposal内对应位置，然后经过RpSort16对Region Proposals中的score域对其进行排序后变成4个vconcatWorkLocal，4个合并后是输出。
输出数据(dst_gm):
[
0.0       0.0       0.0       0.0       86.75     0.0       0.0       0.0
0.0       0.0       0.0       83.8      0.0       0.0       0.0       0.0
0.0       0.0       83.56     0.0       0.0       0.0       0.0       0.0
0.0       83.4      0.0       0.0       0.0       0.0       0.0       0.0
82.7      0.0       0.0       0.0       0.0       0.0       0.0       80.44
0.0       0.0       0.0       0.0       0.0       0.0       0.0       80.1
0.0       0.0       0.0       0.0       0.0       0.0       71.4      0.0
0.0       0.0       0.0       0.0       0.0       71.3      0.0       0.0
0.0       0.0       0.0       0.0       66.2      0.0       0.0       0.0
0.0       0.0       0.0       62.38     0.0       0.0       0.0       0.0
0.0       0.0       61.66     0.0       0.0       0.0       0.0       0.0
0.0       59.1      0.0       0.0       0.0       0.0       0.0       0.0
56.78     0.0       0.0       0.0       0.0       0.0       0.0       52.44
0.0       0.0       0.0       0.0       0.0       0.0       52.4      0.0
0.0       0.0       0.0       0.0       0.0       52.1      0.0       0.0
0.0       0.0       0.0       0.0       0.0       48.78     0.0       0.0
0.0       0.0       0.0       0.0       46.94     0.0       0.0       0.0
0.0       0.0       0.0       46.88     0.0       0.0       0.0       0.0
0.0       0.0       46.38     0.0       0.0       0.0       0.0       0.0
0.0       46.25     0.0       0.0       0.0       0.0       0.0       0.0
38.97     0.0       0.0       0.0       0.0       0.0       0.0       34.22
0.0       0.0       0.0       0.0       0.0       0.0       34.16     0.0
0.0       0.0       0.0       0.0       0.0       26.7      0.0       0.0
0.0       0.0       0.0       0.0       25.94     0.0       0.0       0.0
0.0       0.0       0.0       24.92     0.0       0.0       0.0       0.0
0.0       0.0       21.67     0.0       0.0       0.0       0.0       0.0
0.0       20.3      0.0       0.0       0.0       0.0       0.0       0.0
0.0       13.29     0.0       0.0       0.0       0.0       0.0       0.0
11.695    0.0       0.0       0.0       0.0       0.0       0.0       -4.832
0.0       0.0       0.0       0.0       0.0       0.0       -9.086    0.0
0.0       0.0       0.0       0.0       0.0       -13.25    0.0       0.0
0.0       0.0       0.0       0.0       -13.81    0.0       0.0       0.0
0.0       0.0       0.0       -18.1     0.0       0.0       0.0       0.0
0.0       0.0       0.0       -27.45    0.0       0.0       0.0       0.0
0.0       0.0       -30.97    0.0       0.0       0.0       0.0       0.0
0.0       -33.47    0.0       0.0       0.0       0.0       0.0       0.0
-34.62    0.0       0.0       0.0       0.0       0.0       0.0       -35.78
0.0       0.0       0.0       0.0       0.0       0.0       -36.53    0.0
0.0       0.0       0.0       0.0       0.0       -38.1     0.0       0.0
0.0       0.0       0.0       0.0       -40.75    0.0       0.0       0.0
0.0       0.0       0.0       -42.75    0.0       0.0       0.0       0.0
0.0       0.0       -45.1     0.0       0.0       0.0       0.0       0.0
0.0       -46.03    0.0       0.0       0.0       0.0       0.0       0.0
-47.8     0.0       0.0       0.0       0.0       0.0       0.0       0.0
-50.44    0.0       0.0       0.0       0.0       0.0       0.0       -54.62
0.0       0.0       0.0       0.0       0.0       0.0       -58.53    0.0
0.0       0.0       0.0       0.0       0.0       -58.8     0.0       0.0
0.0       0.0       0.0       0.0       -61.44    0.0       0.0       0.0
0.0       0.0       0.0       -65.06    0.0       0.0       0.0       0.0
0.0       0.0       -66.8     0.0       0.0       0.0       0.0       0.0
0.0       -69.8     0.0       0.0       0.0       0.0       0.0       0.0
-78.94    0.0       0.0       0.0       0.0       0.0       0.0       -79.5
0.0       0.0       0.0       0.0       0.0       0.0       -82.7     0.0
0.0       0.0       0.0       0.0       0.0       -87.7     0.0       0.0
0.0       0.0       0.0       0.0       -91.44    0.0       0.0       0.0
0.0       0.0       0.0       -94.1     0.0       0.0       0.0       0.0
0.0       0.0       0.0       -95.6     0.0       0.0       0.0       0.0
]
```
