EnQue

Function Usage

Pushes a tensor to a queue.

Prototype

  • The source and destination locations do not need to be specified.
    template <typename T>
    __aicore__ inline bool EnQue(const LocalTensor<T>& tensor)
  • The source and destination locations need to be specified.

    Bind VECIN and VECOUT by using TQueBind to implement VECIN and VECOUT buffer reuse. The following API is used to implement buffer reuse for vector computation. The source and destination locations need to be specified during enqueuing. In the scenario where vector computation is not involved, call bool EnQue(LocalTensor<T>& tensor).

    1
    2
    template <TPosition srcUserPos, TPosition dstUserPos>
    __aicore__ inline bool EnQue(TBufHandle buf)
    

Parameters

Table 1 Parameters in bool EnQue(LocalTensor<T>& tensor) prototype definition

Parameter

Input/Output

Meaning

tensor

Input

Specified tensor

Table 2 Parameters in template <TPosition srcUserPos, TPosition dstUserPos> bool EnQue(LocalTensor<T>& tensor) prototype definition

Parameter

Input/Output

Meaning

srcUserPos

Input

Template parameter, which is the src position of the queue specified by the user. Supported channels: GM->VECIN/VECOUT->GM

dstUserPos

Input

Template parameter, which is the dst position of the queue specified by the user. Supported channels: GM->VECIN/VECOUT->GM

tensor

Input

Specified tensor

Figure 1 Moving the LocalTensor into the queue of A1/B1 through EnQue

Availability

Atlas Training Series Product

Precautions

None

Returns

  • true: The tensor is successfully added to the queue.
  • false: The queue is full and the addition fails.

Example

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
// API: EnQue Tensor
AscendC::TPipe pipe;
AscendC::TQue<AscendC::TPosition::VECOUT, 4> que;
int num = 4;
int len = 1024;
pipe.InitBuffer(que, num, len);
AscendC::LocalTensor<half> tensor1 = que.AllocTensor<half>();
que.EnQue(tensor1);// Add the tensor to the queue of VECOUT.
// API: EnQue specifies a specific src/dst position to join the corresponding queue.
// template <TPosition srcUserPos, TPosition dstUserPos> bool EnQue(LocalTensor<T>& tensor)
AscendC::TPipe pipe;
AscendC::TQueBind<AscendC::QuePosition::VECIN, AscendC::QuePosition::VECOUT, 1> que;
int num = 4;
int len = 1024;
pipe.InitBuffer(que, num, len);
AscendC::LocalTensor<half> tensor1 = que.AllocTensor<half>();
que.EnQue<AscendC::QuePosition::GM, AscendC::QuePosition::VECIN, half>(tensor1);// Add tensors to the VECIN queue to implement buffer reuse.