aclnnGaussianSort
产品支持情况
| 产品 | 是否支持 |
|---|---|
| Ascend 950PR/Ascend 950DT | × |
| Atlas A3 训练系列产品/Atlas A3 推理系列产品 | √ |
| Atlas A2 训练系列产品/Atlas A2 推理系列产品 | √ |
| Atlas 200I/500 A2 推理产品 | × |
| Atlas 推理系列产品 | × |
| Atlas 训练系列产品 | × |
功能说明
- 接口功能:
gaussian_sort对高斯球进行深度排序,根据tile分区和深度值对高斯球ID进行排序,用于渲染时的alpha blending计算。 - 计算公式:
根据深度值对高斯球进行排序,输出排序后的高斯球ID序列:
sorted_gs_ids=SortByDepth(gs_ids,depths)sorted\_gs\_ids = \text{SortByDepth}(gs\_ids, depths)
排序顺序为从近到远(深度值从小到大),以保证正确的alpha blending顺序。
函数原型
每个算子分为两段式接口,必须先调用"aclnnGaussianSortGetWorkspaceSize"接口获取计算所需workspace大小以及包含了算子计算流程的执行器,再调用"aclnnGaussianSort"接口执行计算。
aclnnStatus aclnnGaussianSortGetWorkspaceSize(
const aclTensor *lbSched,
const aclTensor *gaussianCnt,
const aclTensor *gsIds,
const aclTensor *depths,
const aclTensor *sortedOffset,
int64_t maxTileGauss,
const aclTensor *sortedGsIds,
uint64_t *workspaceSize,
aclOpExecutor **executor)
aclnnStatus aclnnGaussianSort(
void *workspace,
uint64_t workspaceSize,
aclOpExecutor *executor,
const aclrtStream stream)
aclnnGaussianSortGetWorkspaceSize
-
参数说明:
参数名 输入/输出 描述 使用说明 数据类型 数据格式 维度(shape) 非连续Tensor lbSched 输入 负载均衡调度信息。 不支持空tensor。 INT64 ND (batch_size, camera_num, schedule_num) √ gaussianCnt 输入 每个tile中的高斯球计数。 不支持空tensor。 INT32 ND (batch_size, camera_num, tile_num, 1) √ gsIds 输入 高斯球ID列表。 不支持空tensor。 FLOAT ND (batch_size, camera_num, tile_num, gaussian_num) √ depths 输入 高斯球深度值。 不支持空tensor。 FLOAT ND (batch_size, camera_num, tile_num, gaussian_num) √ sortedOffset 输入 排序后的偏移量。 不支持空tensor。 INT64 ND (batch_size * camera_num) √ maxTileGauss 输入 每个tile中最大高斯球数量。 正整数,用于确定workspace大小。 INT64 - - - sortedGsIds 输出 排序后的高斯球ID输出。 不支持空tensor。 INT32 ND (totalGauss) √ workspaceSize 输出 返回需要在Device侧申请的workspace大小。 - - - - - executor 输出 返回op执行器,包含了算子计算流程。 - - - - - -
返回值:
aclnnStatus:返回状态码,具体参见aclnn返回码。
第一段接口会完成入参校验,出现以下场景时报错:
返回值 错误码 描述 ACLNN_ERR_PARAM_NULLPTR 161001 如果传入参数是必选输入,输出或者必选属性,且是空指针,则返回161001。 ACLNN_ERR_PARAM_INVALID 161002 输入输出tensor的数据类型和数据格式不在支持的范围内,或maxTileGauss不合法。
aclnnGaussianSort
-
参数说明:
参数名 输入/输出 描述 workspace 输入 在Device侧申请的workspace内存地址。 workspaceSize 输入 在Device侧申请的workspace大小,由第一段接口aclnnGaussianSortGetWorkspaceSize获取。 executor 输入 op执行器,包含了算子计算流程。 stream 输入 指定执行任务的Stream。 -
返回值:
aclnnStatus:返回状态码,具体参见aclnn返回码。
约束说明
- lbSched和sortedOffset的数据类型为INT64。
- gaussianCnt和sortedGsIds的数据类型为INT32。
- gsIds和depths的数据类型为FLOAT。
- maxTileGauss决定了workspace的大小,需要根据实际高斯球数量合理设置。
维度变量说明:
- batch_size:批次大小,表示一次处理的数据批次数量。
- camera_num:相机数量,表示参与计算的相机个数。
- tile_num:tile分区数量,表示图像划分的tile区块个数。
- gaussian_num:高斯球数量,表示每个tile中的高斯球个数。
- schedule_num:调度数量,表示负载均衡调度的调度次数。
调用示例
见tests/kernel_tests/test_gaussian_sort.cpp