Winter 2022 SPO600 Project
SPO600 is a project-based course. This semester, the project involves adding SVE2 optimizations to an existing open-source software package.
Stage 1: Selection
- Identify some candidate open-source packages for optimization. Recommendations:
- Focus on library-level packages - these optimizations are often best applied at the library level rather than the application level
- Look for packages that do processing on large data sets - multimedia (graphics, video, sound), cryptography, data analysis, and statistics are examples
- Watch for packages that have existing SIMD implementations for other architectures, and/or NEON and "Advanced SIMD" implementations for Arm - the fact that these packages have SIMD implementations mean that they benefit from this type of optimization
- Check that the packages are licensed as open source.
- Find the SIMD implementations in these packages.
- Verify that they do not already contain SVE / SVE2 optimizations (unless these can be further extended)
- Select the package you want to work with.
- Create a strategy for your changes.
- What portion(s) of the code will you optimize for SVE2? (Choose something small to start!)
- Will you use autovectorization, inline assembler, or intrinsicts? Is this approach compatible with what the community is already using for other SIMD implementations?
- Note how the community accepts contributions and engage with the community to discuss your proposed work.
Due: Monday, March 21, 11:59 pm
Due: Monday, March 28, 11:59 pm (revised)
Stage 2: Implementation
- Implement your planned changes.
- Verify that your changes build correctly and work properly.
- Verify that your changes do not cause a regression on other platforms (for example, that operation on other platforms is not broken or slowed down by your changes).
Due: Monday, April 11, 11:59 pm
Stage 3: Upstreaming
- Get your changes into the upstream codebase, if applicable.
- If this is not practical, prepare recommendations on future work with the package and SVE2
Due: Friday, April 22, 11:59 pm (firm)
Basic overview of SVE2 - broadly applicable
More detailed documentation - optional/may be useful
- ARM - SVE Programming Examples
- ARM - Introduction to C Language Extensions for SVE2 - documents the C Compiler Intrinsics for SVE2
Submitting Project Work
- Blog about your work as you perform it
- Add a summary post at the end of each project stage
- Clearly illustrate your work
- Include code snippets
- Link to your repository with your work-in-progesss
- Link to interactions with the community (e.g. email archive links, issue-tracker links)