aclnnTransQuantParam
支持的产品型号
- Atlas A2训练系列产品/Atlas 800I A2推理产品。
接口原型
aclnnStatus aclnnTransQuantParam(const float *scaleArray, uint64_t scaleSize, const float *offsetArray, uint64_t offsetSize, uint64_t **quantParam, uint64_t *quantParamSize)
功能描述
将输入scale数据从float类型转换为硬件需要的uint64_t类型,并存储到quantParam中。
aclnnTransQuantParam
参数说明:
- scaleArray(const float*, 计算输入):指向存储scale数据的内存,用户需要保证scale数据中不存在nan和inf。
- scaleSize(uint64_t, 计算输入):scale数据的数量,用户需要自行保证scaleSize与scaleArray包含的元素个数相同。
- offsetArray(const float*, 计算输入):指向存储offset数据的内存,用户需要保证offset数据中不存在nan和inf。。
- offsetSize(uint64_t, 计算输入):offset数据的数量,用户需要自行保证offsetSize与offsetArray包含的元素个数相同。
- quantParam(uint64**, 计算输出):指向存储转换得到的quantParam数据的内存的地址。
- quantParamSize(uint64_t*, 计算输出):存储quantParam数据的数量。
返回值:
aclnnStatus:返回状态码,具体参见aclnn返回码。
第一段接口完成入参校验,出现以下场景时报错:
161001(ACLNN_ERR_PARAM_NULLPTR):1. 参数quantParam是空指针。
2. 参数scaleArray是空指针。
3. 参数quantParamSize是空指针。
161002(ACLNN_ERR_PARAM_INVALID):1. 当scaleArray不为空指针时,参数scaleSize < 1。
2. 当offsetArray不为空指针时,参数offsetSize < 1。
3. 当offsetArray为空指针时,参数offsetSize != 0。
561103(ACLNN_ERR_INNER_NULLPTR): 1. *quantParam为空指针
约束与限制
无
调用示例
示例代码如下,仅供参考,具体编译和执行过程请参考编译与运行样例。
#include <iostream>
#include "acl/acl.h"
#include "aclnnop/aclnn_trans_quant_param.h"
#define CHECK_RET(cond, return_expr) \
do { \
if (!(cond)) { \
return_expr; \
} \
} while (0)
#define LOG_PRINT(message, ...) \
do { \
printf(message, ##__VA_ARGS__); \
} while (0)
int main() {
float scaleArray[3] = {1.0, 1.0, 1.0};
uint64_t scaleSize = 3;
float offsetArray[3] = {1.0, 1.0, 1.0};
uint64_t offsetSize = 3;
uint64_t *result = nullptr;
uint64_t resultSize = 0;
auto ret = aclnnTransQuantParam(scaleArray, scaleSize, offsetArray, offsetSize, &result, &resultSize);
CHECK_RET(ret == ACL_SUCCESS, LOG_PRINT("aclnnTransQuantParam failed. ERROR: %d\n", ret); return ret);
for (auto i = 0; i < resultSize; i++) {
LOG_PRINT("result[%ld] is: %ld\n", i, result[i]);
}
free(result);
return 0;
}