This is probably quite obvious for folks who regularly work with MLIR, so please bear with me
How does MLIR define the “rank” of a tensor? How about vectors and matrices?
The rank of a tensor is independent of the number of dimensions of the underlying space
The TF docs further clarify this for vectors:
- Rank: Number of tensor axes. A scalar has rank 0, a vector has rank 1, a matrix is rank 2.
As far as MLIR is concerned, it’s very hard to find a definitive answer as there is no relevant documentation, but perhaps I missed something? This is my mental model based on the links above:
Abe a tensor, e.g.
tensor<10 x 10 x 10 x i32>. It’s a rank-3 tensor.
vbe a vector, e.g.
vector<3 x i32>, it’s a rank-1 tensor in a 3-D space (or e.g. 3-D vector).
Is this correct?
Here’s the tricky part - what should be the nomenclature for the so-called multi-dimensional vectors from the vector dialect? Currently,
vector<4x8x128xf32> is referred to as a 3-D vector, which would suggest that
vector<3 x i32> is not a 3-D vector . What about the rank? I’m probably just confusing myself
I should also mention that this came up when reviewing ⚙ D127875 [mlir][vector] Add vector.scalable.insert/extract ops. CC @dcaballe @javiersetoain
Thanks for taking a look!
Some other references
(…) a rank-1 tensor (i.e., a vector in N-dimensional space can be represented by N numbers (…)
The rank of a tensor is the number of indices required to uniquely select each element of the tensor.