Tensor 는 layered: Storage + view metadata
tensor 는 두 가지: Storage (typed memory 의 contiguous 1-D blob) 와 그 storage 위 view (shape, stride, offset). slice 하거나 transpose 하면 storage 는 보통 안 바뀌어 — view 만 바뀌어. 그래서 slicing 이 O(1) 이고 .transpose() 가 '무료' 지만 contiguity 깨는 거.
stride 가 실제로 의미하는 것
t.stride() 는 dimension 당 하나의 integer tuple 반환, PyTorch 에게 그 dim 의 index 를 하나 advance 할 때 storage 에서 몇 element step 할지 알려줘. contiguous (3, 4) float tensor 의 stride 는 (4, 1): row 따라 내려가기 4 element 점프, column 따라 가기 1 element 점프.
Transpose 는 storage 손 안 대고 stride 만 swap: (3, 4) tensor with stride (4, 1) 이 (4, 3) tensor with stride (1, 4) 가 됨. 그래서 transpose 후 .is_contiguous() 가 False — memory 순서로 element 걷기가 dim 순서로 걷기와 더 이상 일치 안 함.
왜 중요해
- op 가 할당할지 metadata 만 다시 쓸지 예측 가능.
- 일부 'trivial' transform (예: image batch 의 NHWC → NCHW) 가 실제로 시간과 메모리 비용 들이는 이유 추론 가능.
- '왜 training 이 예상보다 30% 더 메모리 쓰지' 디버깅 가능 — 보통 우연한 copy 하나.