Sort

产品支持情况

产品 是否支持
Ascend 950PR/Ascend 950DT
Atlas A3 训练系列产品/Atlas A3 推理系列产品
Atlas A2 训练系列产品/Atlas A2 推理系列产品
Atlas 200I/500 A2 推理产品 ×
Atlas 推理系列产品
Atlas 训练系列产品

功能说明

将输入tensor中的元素根据指定维度进行升序/降序, 并且返回对应的index值。输入tensor self总共是N维 [0, N-1],根据dim指定的维度进行排序。

函数原型

每个算子分为两段式接口,必须先调用“aclnnSortGetWorkspaceSize”接口获取计算所需workspace大小以及包含了算子计算流程的执行器,再调用“aclnnSort”接口执行计算。

aclnnStatus aclnnSortGetWorkspaceSize(
  const aclTensor *self, 
  bool             stable, 
  int64_t          dim, 
  bool             descending, 
  aclTensor       *valuesOut, 
  aclTensor       *indicesOut, 
  uint64_t        *workspaceSize, 
  aclOpExecutor  **executor)
aclnnStatus aclnnSort(
  void             *workspace, 
  uint64_t          workspaceSize, 
  aclOpExecutor    *executor, 
  const aclrtStream stream)

aclnnSortGetWorkspaceSize

  • 参数说明:

    参数名 输入/输出 描述 使用说明 数据类型 数据格式 维度(shape) 非连续Tensor
    self 输入 输入Tensor。 - BFLOAT16、FLOAT16、FLOAT32、INT8、INT16、INT32、INT64、UINT8、UINT16、UINT32、UINT64、BOOL ND 1-8
    stable 输入 是否稳定排序, True为稳定排序,False为非稳定排序。 - BOOL - - -
    dim 输入 用来作为排序标准的维度。 范围为 [-self.dim(), self.dim()-1],self.dim()为输入tensor的维度。 INT64 - - -
    descending 输入 控制排序顺序,True为降序,False为升序。 - BOOL - - -
    valuesOut 输出 表示tensor在指定维度上排序的结果。 - BFLOAT16、FLOAT16、FLOAT32、DOUBLE、INT8、INT16、INT32、INT64、UINT8、BOOL、UINT16、UINT32、UINT64 ND 与self一致
    indicesOut 输出 表示排序后每个元素在原tensor中的索引。 - INT64 ND 与self一致
    • Atlas A2 训练系列产品/Atlas A2 推理系列产品、Atlas A3 训练系列产品/Atlas A3 推理系列产品:
      • self数据类型不支持UINT16、UINT32、UINT64。
      • 当self的数据类型为BFLOAT16时,参数dim指定的轴不能等于1。
      • valuesOut数据类型不支持UINT16、UINT32、UINT64。
    • Ascend 950PR/Ascend 950DT:valuesOut数据类型不支持DOUBLE、BOOL。
  • 返回值

    aclnnStatus:返回状态码,具体参见aclnn返回码

    第一段接口完成入参校验,出现以下场景时报错:

    返回码 错误码 描述
    ACLNN_ERR_PARAM_NULLPTR 161001 传入的self、valuesOut或indicesOut是空指针。
    ACLNN_ERR_PARAM_INVALID 161002 self、valuesOut或indicesOut的数据类型不在支持的范围之内, 或shape不相互匹配。
    dim的取值不在输入tensor self的维度范围中。

aclnnSort

  • 参数说明

    参数名 输入/输出 描述
    workspace 输入 在Device侧申请的workspace内存地址。
    workspaceSize 输入 在Device侧申请的workspace大小,由第一段接口aclnnSortGetWorkspaceSize获取。
    executor 输入 op执行器,包含了算子计算流程。
    stream 输入 指定执行任务的Stream。
  • 返回值

    aclnnStatus:返回状态码,具体参见aclnn返回码

约束说明

  • 确定性计算:

    • aclnnSort默认确定性实现。
  • self的数据类型不为FLOAT、FLOAT16、BFLOAT16时,tensor size过大可能会导致算子执行超时(aicpu error类型报错,报错 reason=[aicpu timeout]),具体类型最大size(与机器具体剩余内存强相关)限制如下:

    • INT64 类型:150000000
    • UINT8、INT8、INT16、INT32 类型:725000000