This interface implements the loading of 2D format data with transpose from L1 Buffer to L0B Buffer.
The following examples explain the interface function and key parameters: An N-shape or Z-shape in the following figures represents one fractal.
- For the uint8_t/int8_t data type, each repeat processes 32 × 32 × 1B of data and can process 2 fractals (one fractal is 512B). In each repeat, 2 consecutive 16 × 32 fractals in the source operand are merged into one 32 × 32 square matrix. The transpose is performed on the square matrix. After transposition, the matrix is split into 2 16 × 32 fractals. Different arrangements can be achieved based on parameters such as the destination operand fractal gap.
As shown in the following example:
- A total of 3072B of data is processed. Each repeat processes 32 × 32 × 1B of data, requiring 3 repeats to complete. repeat_time = 3.
- src_stride = 1, indicating that the interval between the start addresses of the previous square matrix and the next square matrix in the source operand between adjacent repeats is 1 (unit: 32 × 32 × 1B). This unit is actually the size of the merged square matrix.
- dst_gap = 1, indicating that the interval between the end address of the first fractal of the previous repeat and the start address of the first fractal of the next repeat in the destination operand between adjacent repeats is 1 (unit: 512B).
- dst_frac_gap = 0, indicating that the interval between the end address of the previous fractal and the start address of the next fractal within each repeat in the destination operand is 0 (unit: 512B).
As shown in the following example:
The explanations of repeat_time and src_stride are the same as the previous example.
dst_gap = 0, indicating that there is no interval between the end address of the first fractal of the previous repeat and the start address of the first fractal of the next repeat in the destination operand between adjacent repeats.
dst_frac_gap = 2, indicating that the interval between the end address of the previous fractal and the start address of the next fractal within each repeat in the destination operand is 2 (unit: 512B).
For the half/bfloat16_t data type, each repeat processes 16 × 16 × 2B of data and can process 1 fractal (one fractal is 512B). In each repeat, 1 16 × 16 fractal in the source operand is transposed.
- Because each repeat processes 16 × 16 × 2B of data, 3 repeats are required to complete. repeat_time = 3.
- src_stride = 1, indicating that the interval between the start addresses of the previous square matrix and the next square matrix in the source operand between adjacent repeats is 1 (unit: 16 × 16 × 2B).
- dst_gap = 0, indicating that there is no interval between the end address of the first fractal of the previous repeat and the start address of the first fractal of the next repeat in the destination operand between adjacent repeats.
- In this scenario, because the fractal is the square matrix and each repeat processes one fractal, there is no intra-repeat fractal gap, and this parameter is invalid.
For the float/int32_t/uint32_t data type, each repeat processes 16 × 16 × 4B of data and can process 2 fractals (one fractal is 512B). In each repeat, 2 consecutive 16 × 8 fractals in the source operand are merged into one 16 × 16 square matrix. The transpose is performed on the square matrix. After transposition, the matrix is split into 2 16 × 8 fractals. Different arrangements can be achieved based on parameters such as the destination operand fractal gap. As shown in the following example:
- Because each repeat processes 16 × 16 × 4B of data, 3 repeats are required to complete. repeat_time = 3.
- src_stride = 1, indicating that the interval between the start addresses of the previous square matrix and the next square matrix in the source operand between adjacent repeats is 1 (unit: 16 × 16 × 4B). This unit is actually the size of the merged square matrix.
- dst_gap = 1, indicating that the interval between the end address of the first fractal of the previous repeat and the start address of the first fractal of the next repeat in the destination operand between adjacent repeats is 1 (unit: 512B).
- dst_frac_gap = 0, indicating that the interval between the end address of the previous fractal and the start address of the next fractal within each repeat in the destination operand is 0 (unit: 512B).
As shown in the following example:
- The explanations of repeat_time and src_stride are the same as the previous example.
- dst_gap = 0, indicating that there is no interval between the end address of the first fractal of the previous repeat and the start address of the first fractal of the next repeat in the destination operand between adjacent repeats.
- dst_frac_gap = 2, indicating that the interval between the end address of the previous fractal and the start address of the next fractal within each repeat in the destination operand is 2 (unit: 512B).
- High-dimensional tiling movement
- Synchronous high-dimensional tiling movement
None
PIPE_MTE1
- repeat=0 means the movement operation is not executed.
- The developer must ensure that the transposed fractals of the destination operand do not overlap.