Difference between revisions of "Winter 2022 SPO600 Project"
Chris Tyler (talk | contribs) |
Chris Tyler (talk | contribs) (Changed "Part X" to "Stage X" to reconcile with other pages.) |
||
Line 2: | Line 2: | ||
SPO600 is a project-based course. This semester, the project involves adding SVE2 optimizations to an existing open-source software package. | 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: | # Identify some candidate open-source packages for optimization. Recommendations: | ||
Line 21: | Line 21: | ||
'''Due: Monday, March 28, 11:59 pm''' (revised) | '''Due: Monday, March 28, 11:59 pm''' (revised) | ||
− | == | + | == Stage 2: Implementation == |
# Implement your planned changes. | # Implement your planned changes. | ||
Line 30: | Line 30: | ||
− | == | + | == Stage 3: Upstreaming == |
# Get your changes into the upstream codebase, if applicable. | # Get your changes into the upstream codebase, if applicable. |
Revision as of 09:58, 25 March 2022
SPO600 is a project-based course. This semester, the project involves adding SVE2 optimizations to an existing open-source software package.
Contents
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)
Resources
Searching Code
SVE2
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)