非连续的Tensor
目前大部分算子API的输入Tensor支持“非连续的Tensor”,即一个Tensor可以通过(shape, strides, offset)表示。
示例1
例如现有一个shape=(6, 5)、strides=(10, 1)、offset=22的Tensor,其内存排布如下:
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
即该Tensor排布如上图的深色位置。这个完整的Tensor在内存排布上是不连续的,strides描述Tensor维度上相邻两个元素的间隔,如果在维度1上的stride为1, 该维度是连续的;如果在维度0上的stride为10,那么相邻的元素间隔10个元素,即非连续。offset表示这个Tensor的首元素相对addr的偏移。
示例2
例如现有一个shape=(4, 3)、strides=(20, 2)、offset=22的Tensor,其内存排布如下:
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
即该Tensor排布如上图的深色位置。这个完整的Tensor在内存排布上是不连续的,strides描述Tensor维度上相邻两个元素的间隔,如果在维度1上的stride为2, 该维度上间隔1个元素;如果在维度0上的stride为20,那么相邻的元素间隔20个元素,即非连续。offset表示这个Tensor的首元素相对addr的偏移。
父主题: 基本概念