文档
注册
评分
提单
论坛
小AI

SetDeqScale

功能说明

设置DEQSCALE寄存器的值。

函数原型

  • 用于AddDeqRelu指令与Cast指令的s322f16场景
    1
    __aicore__ inline void SetDeqScale(half scale)
    
  • 用于CastDeq(isVecDeq=false)的场景
    1
    __aicore__ inline void SetDeqScale(float scale, int16_t offset, bool signMode)
    
  • 用于CastDeq(isVecDeq=true)的场景
    1
    2
    template <typename T>
    __aicore__ inline void SetDeqScale(const LocalTensor<T>& vdeqTensor, const VdeqInfo& vdeqInfo)
    

参数说明

表1 参数说明

参数名

输入/输出

描述

scale(half)

输入

half类型,表示一个half类型的数据。

Atlas推理系列产品AI Core:用于AddDeqRelu指令设置DEQSCALE寄存器的值。

Atlas A2训练系列产品/Atlas 800I A2推理产品,用于Cast指令的s322f16场景设置DEQSCALE寄存器的值。

scale(float)

输入

float类型,表示一个float类型的数据。

用于CastDeq(isVecDeq=false)场景设置DEQSCALE寄存器的值。

offset

输入

int16_t类型,表示一个s9类型的offset,入参只有前9位有效。

用于CastDeq(isVecDeq=false)的场景,设置offset。

signMode

输入

bool类型,表示量化结果是否带符号。

用于CastDeq(isVecDeq=false)的场景,设置signMode。

vdeqTensor

输入

类型为LocalTensor,支持的TPosition为VECIN/VECCALC/VECOUT。

表示UB中的一个128 Byte的量化tensor,以32B为单位。

用于CastDeq(isVecDeq=true)的场景,输入量化tensor。

vdeqInfo

输入

存储量化tensor信息的数据结构,结构体内包含量化tensor中的16组量化参数

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
const uint8_t VDEQ_TENSOR_SIZE = 16;

struct VdeqInfo {
    __aicore__ VdeqInfo() {}
    __aicore__ VdeqInfo(const float vdeqScaleIn[VDEQ_TENSOR_SIZE], const int16_t vdeqOffsetIn[VDEQ_TENSOR_SIZE],
        const bool vdeqSignModeIn[VDEQ_TENSOR_SIZE])
    {
        for (int32_t i = 0; i < VDEQ_TENSOR_SIZE; ++i) {
            vdeqScale[i] = vdeqScaleIn[i];
            vdeqOffset[i] = vdeqOffsetIn[i];
            vdeqSignMode[i] = vdeqSignModeIn[i];
        }
    }

    float vdeqScale[VDEQ_TENSOR_SIZE] = { 0 };
    int16_t vdeqOffset[VDEQ_TENSOR_SIZE] = { 0 };
    bool vdeqSignMode[VDEQ_TENSOR_SIZE] = { 0 };
};
  • vdeqScale:float类型的数组,用于存储量化tensor中的scale参数scale0-scale15
  • vdeqOffset:int16_t类型的数组,用于存储量化tensor中的offset参数offset0-offset15
  • vdeqSignMode:bool类型的数组,用于存储量化tensor中的signMode参数signMode0-signMode15

返回值

支持的型号

Atlas推理系列产品AI Core

Atlas A2训练系列产品/Atlas 800I A2推理产品

约束说明

调用示例

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
AscendC::LocalTensor<int8_t> dstLocal;
AscendC::LocalTensor<int16_t> srcLocal;
AscendC::LocalTensor<uint64_t> tmpBuffer;
uint32_t srcSize = 256;
// Cast
AscendC::LocalTensor<half> castDstLocal;
AscendC::LocalTensor<int32_t> castSrcLocal;
half scale = 1.0;
AscendC::SetDeqScale(scale);
AscendC::Cast(castDstLocal, castSrcLocal, AscendC::RoundMode::CAST_NONE, srcSize);
// CastDeq
float scale = 1.0;
int16_t offset = 0;
bool signMode = true;
AscendC::SetDeqScale(scale, offset, signMode);
AscendC::CastDeq<int8_t, int16_t, false, false>(dstLocal, srcLocal, srcSize);
// CastVdeq
float vdeqScale[16] = { 0 };
int16_t vdeqOffset[16] = { 0 };
bool vdeqSignMode[16] = { 0 };
for (int i = 0; i < 16; i++) {
    vdeqScale[i] = 1.0;
    vdeqOffset[i] = 0;
    vdeqSignMode[i] = true;
}
AscendC::VdeqInfo vdeqInfo(vdeqScale, vdeqOffset, vdeqSignMode);
AscendC::SetDeqScale<uint64_t>(tmpBuffer, vdeqInfo);
AscendC::CastDeq<int8_t, int16_t, true, false>(dstLocal, srcLocal, srcSize);
搜索结果
找到“0”个结果

当前产品无相关内容

未找到相关内容,请尝试其他搜索词