DeQue

Function Usage

Extracts tensors from the queue for subsequent processing.

Prototype

  • The source and destination locations do not need to be specified.
    1
    2
    template <typename T>
    __aicore__ inline LocalTensor<T> DeQue()
    
  • 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 dequeuing. In the scenario where vector computation is not involved, call LocalTensor<T> DeQue().

    1
    2
    template <TPosition srcUserPos, TPosition dstUserPos, typename T>
    __aicore__ inline LocalTensor<T> DeQue()
    
Figure 1 Using EnQue and DeQue to move LocalTensor into and out from the A1/B1 queue

Parameters

None

Availability

Atlas Training Series Product

Precautions

None

Returns

LocalTensor obtained from the queue.

Example

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
// API: DeQue 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);
AscendC::LocalTensor<half> tensor2 = que.DeQue<half>(); // Move a tensor out of the VECOUT queue.
// API: DeQue Tensor, specifying a specific src/dst position
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);
// Move a tensor out of the VECIN queue.
AscendC::LocalTensor<half> tensor2 = que.DeQue<AscendC::QuePosition::GM, AscendC::QuePosition::VECIN, half>();