-
Notifications
You must be signed in to change notification settings - Fork 7
Description
As I understand it, right now the specification:
- allows changing vector lengths (to a value smaller than the maximum)
- allows different / unrelated lengths for different types
- allows unbounded lengths for vector types
I'd suggest potentially changing all three to prohibit these :)
1 seems problematic in terms of lowering to AVX2, and also seems challenging to specify and implement in general as the length setup can be conditional. In the limit, efficient compilation with set_length might require dynamic recompilation.
2 seems problematic in terms of programming model (if an implementation exposes a different length for i32 vs f32 vectors, it's going to be difficult to use)
3 seems problematic in terms of memory allocation, as it means one can't allocate temporary memory on stack easily short of using the vector type as storage
So I would suggest requiring all implementations to have one consistent bit-length of all vectors (and all other lengths can be computed by taking that bit-length and dividing by element width), not having a way to change that at runtime, and providing some bound on that length, e.g. [128, 2048] (which AFAIK matches ARM SVE limits).