CT_00_013 - Autovectorization -- Improvements (GCC)
About
Basic functionality is complete and we have moved focus performance evaluation/improvement of the vectorizer and identifying gaps.
- Given the generic vectorizer implementation and V extension capabilities, are we vectorizing the loops we should?
- Are we avoiding vectorizing loops we should not due to profitability concerns?
- Are we exploiting vector length agnostic approaches or falling back to static vector lenghts?
- When we vectorize, do we do so efficiently?
Vector implementations of key library routines such as mem*, str*, vector math (sqrt, sin, cos, etc) are primarily an issue for core libraries such as glibc. But coordination is needed between glibc and GCC to utilize libmvec (for example).
Stakeholders/Partners
RISE:
Ventana: Robin Dapp (full time) + Jeff Law for oversight/review
Rivos: Palmer Dabbelt for oversight/review
Joern Renneke (Embecosm contractor for Rivos): Some initial vector math library implementations, compiler expansion of memcpy
SiFive: Kito Cheng for oversight/Review role
External:
RiVAI: Much of the initial work was done by Juzhe. This has included the basic design/implementation, ABI work, etc. Juzhe continues to play a major role in design/implementation going forward.
SuSE/ARM/Linaro: Some of the work in this space has touched on generic parts of GCC. Various engineers from Suse, IBM, ARM & Linaro have been involved on an as-needed basis. Richard Sandiford, Richard Biener and others.
Dependencies
The most pressing upstream dependencies are:
- PSABI specification for vector argument passing and return values
- Kernel support to enable discovery of the V extension – starting to see initial downstream uses of these capabilities
- glibc support for libmvec to enable vector API for key math library functions such as sin, cos, sqrt, etc
Status
Updates
- Moved to trashbin given we had broken down the various sub-tasks on a per spec workload basis.
- Improvement to vectorization spun out as new project