需要结合valid shape和aligned shape来看,看的顺序建议采用从后往前看的顺序。
以output[0]为例,相关信息如下:
valid shape: [1, 64, 64, 89]
aligned shape: [1, 64, 64, 96]
tensor type: S16
stride: [196608, 6144, 192, 2]
上面的意思是指数据类型为S16,因此从内存上看,每个元素占用的内存空间为2字节,对应stride的最后一个维度stride[3]为2,表示在shape层面最后一维中的89,相邻元素的内存地址间隔为2;
同理,shape层面的倒数第二维是64,考虑到内存对齐的原因,将valid shape的89填充为96,则倒数第二维64中相邻元素的地址间隔维2x96=192,对应stride[2];
以此类推,stride[1]=stride[2]*aligned_shape[2]=192x64=12288;
stride[0]=stride[1]*aligned_shape[1]=12288x64=786432
总结:stride[3]=size_of(tensor_type);
stride[n]=stride[n-1]*aligned_shape[n-1];
即stride是表示对应维度上相邻元素的内存地址偏差。