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