Non-contiguous Tensor
Currently, most operator APIs support "non-contiguous tensor" as the input aclTensor, meaning that a tensor can be represented by (shape, strides, offset).
NOTE An aclTensor can be created through "Common APIs > aclCreateTensor" in Operator Library API.
Example 1
For example, a tensor with shape=(6, 5), strides=(10, 1), and offset=22 has the following memory layout:
a0,0 , a0,1 , a0,2 , a0,3 , a0,4 , a0,5 , a0,6 , a0,7 , a0,8 , a0,9 a1,0 , a1,1 , a1,2 , a1,3 , a1,4 , a1,5 , a1,6 , a1,7 , a1,8 , a1,9 a2,0 , a2,1 , a2,2 , a2,3 , a2,4 , a2,5 , a2,6 , a2,7 , a2,8 , a2,9 a3,0 , a3,1 , a3,2 , a3,3 , a3,4 , a3,5 , a3,6 , a3,7 , a3,8 , a3,9 a4,0 , a4,1 , a4,2 , a4,3 , a4,4 , a4,5 , a4,6 , a4,7 , a4,8 , a4,9 a5,0 , a5,1 , a5,2 , a5,3 , a5,4 , a5,5 , a5,6 , a5,7 , a5,8 , a5,9 a6,0 , a6,1 , a6,2 , a6,3 , a6,4 , a6,5 , a6,6 , a6,7 , a6,8 , a6,9 a7,0 , a7,1 , a7,2 , a7,3 , a7,4 , a7,5 , a7,6 , a7,7 , a7,8 , a7,9 a8,0 , a8,1 , a8,2 , a8,3 , a8,4 , a8,5 , a8,6 , a8,7 , a8,8 , a8,9 a9,0 , a9,1 , a9,2 , a9,3 , a9,4 , a9,5 , a9,6 , a9,7 , a9,8 , a9,9
That is, the tensor is laid out as shown in the dark-colored positions above. This complete tensor is non-contiguous in its memory layout. Strides describe the interval between two adjacent elements along a tensor dimension. If the stride along dimension 1 is 1, that dimension is contiguous; if the stride along dimension 0 is 10, then adjacent elements are separated by an interval of 10 elements, meaning the dimension is non-contiguous. Offset indicates the displacement of the first element of this tensor relative to addr.
Example 2
For example, consider a tensor with shape=(4, 3), strides=(20, 2), and offset=22. Its memory layout is as follows:
a0,0 , a0,1 , a0,2 , a0,3 , a0,4 , a0,5 , a0,6 , a0,7 , a0,8 , a0,9 a1,0 , a1,1 , a1,2 , a1,3 , a1,4 , a1,5 , a1,6 , a1,7 , a1,8 , a1,9 a2,0 , a2,1 , a2,2 , a2,3 , a2,4 , a2,5 , a2,6 , a2,7 , a2,8 , a2,9 a3,0 , a3,1 , a3,2 , a3,3 , a3,4 , a3,5 , a3,6 , a3,7 , a3,8 , a3,9 a4,0 , a4,1 , a4,2 , a4,3 , a4,4 , a4,5 , a4,6 , a4,7 , a4,8 , a4,9 a5,0 , a5,1 , a5,2 , a5,3 , a5,4 , a5,5 , a5,6 , a5,7 , a5,8 , a5,9 a6,0 , a6,1 , a6,2 , a6,3 , a6,4 , a6,5 , a6,6 , a6,7 , a6,8 , a6,9 a7,0 , a7,1 , a7,2 , a7,3 , a7,4 , a7,5 , a7,6 , a7,7 , a7,8 , a7,9 a8,0 , a8,1 , a8,2 , a8,3 , a8,4 , a8,5 , a8,6 , a8,7 , a8,8 , a8,9 a9,0 , a9,1 , a9,2 , a9,3 , a9,4 , a9,5 , a9,6 , a9,7 , a9,8 , a9,9
That is, the tensor is laid out as shown in the dark-colored positions above. This complete tensor is non-contiguous in memory layout. Strides describe the spacing between adjacent elements along a tensor dimension. If the stride along dimension 1 is 2, there is one element between adjacent elements along that dimension. If the stride along dimension 0 is 20, adjacent elements are spaced 20 elements apart, meaning the dimension is non-contiguous. The offset indicates the displacement of the first element of this tensor relative to addr.