文档
注册

LocalTensor

功能说明

用于存放AI Core中Local Memory(内部存储)的数据,支持QuePosition为VECIN、VECOUT、A1A2B1B2CO1CO2。

定义原型

template <typename T> class LocalTensor {
    T GetValue(const uint32_t offset) const;
    template <typename T1> void SetValue(const uint32_t offset, const T1 value) const;
    LocalTensor operator[](const uint32_t offset) const;
    uint32_t GetSize() const;
    void SetUserTag(const TTagType tag);
    TTagType GetUserTag( ) const;
}

函数说明

类型T支持所有数据类型,但需要遵循使用此LocalTensor的指令的数据类型支持情况。

表1 函数说明

函数名称

入参说明

含义

GetValue

offset:偏移量,单位为 element

获取 LocalTensor 中的某个值,返回 T 类型的立即数。

SetValue

offset:偏移值,单位为 element

value:设置值,单位为任意类型

设置 LocalTensor 中的某个值。

operator[]

offset:偏移量

获取距原LocalTensor起始地址偏移量为offset的新LocalTensor,注意offset不能超过原有LocalTensor的size大小。

GetSize

获取当前LocalTensor size大小。

SetUserTag

tag:设置的Tag信息,类型TTagType对应为int32_t。

为Tensor添加用户自定义信息,用户可以根据需要设置对应的Tag。后续可通过GetUserTag获取指定Tensor的Tag信息,并根据Tag信息对Tensor进行相应操作。

GetUserTag

-

获取指定Tensor块的Tag信息,用户可以根据Tag信息对Tensor进行不同操作。

注意事项

不要大量使用SetValue对LocalTensor进行赋值,会使性能下降,若需要大批量赋值,请使用指令接口。

调用示例

// srcLen = 256, num = 100, M=50
// 示例1
for (int32_t i = 0; i < srcLen; ++i) {
     input_local.SetValue(i, num); // 对input_local中第i个位置进行赋值为num
}
// 示例1结果如下:
// 数据(input_local): [100 100 100  ... 100]

// 示例2
for (int32_t i = 0; i < srcLen; ++i) {
     auto element = input_local.GetValue(i); // 获取input_local中第i个位置的数值
}
// 示例2结果如下:
// element 为100

// 示例3
auto size = input_local.GetSize(); // 获取input_local的长度,size大小为input_local有多少个element
// 示例3结果如下:
// size大小为srcLen,256。

// 示例4
Add(output_local[M], input_local[M], input_local2[M], M); // operator[]使用方法,output_local[M]为从起始地址开始偏移量为M的新tensor
// 示例4结果如下:
// 输入数据(input_local): [100 100 100 ... 100]
// 输入数据(input_local2): [1 2 3 ... 50]
// 输出数据(output_local): [101 102 103 ... 150]

// 示例5 
TTagType tag = 10;
input_local.SetUserTag(tag); // 对LocalTensor设置tag信息。
 
// 示例6
LocalTensor<half> tensor1 = que1.DeQue<half>();
TTagType tag1 = tensor1.GetUserTag();
LocalTensor<half> tensor2 = que2.DeQue<half>();
TTagType tag2 = tensor2.GetUserTag();
LocalTensor<half> tensor3 = que3.AllocTensor<half>();
/* 使用Tag控制条件语句执行*/
if((tag1 <= 10) && (tag2 >=9)) {
   Add(tensor3, tensor1, tensor1, TILE_LENGTH); // 当tag1小于等于10,tag2大于等于9的时候,才能进行相加操作。
}
搜索结果
找到“0”个结果

当前产品无相关内容

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