Difference between revisions of "Winter 2022 SPO600 Project"

From CDOT Wiki
Jump to: navigation, search
(Changed "Part X" to "Stage X" to reconcile with other pages.)
Line 1: Line 1:
[[Category:Fall 2021 SPO600]]
+
[[Category:Fall 2022 SPO600]]
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 ==
 
== Stage 1: Selection ==

Revision as of 10:55, 25 March 2022

SPO600 is a project-based course. This semester, the project involves adding SVE2 optimizations to an existing open-source software package.

Stage 1: Selection

  1. 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.
  2. Find the SIMD implementations in these packages.
    • Verify that they do not already contain SVE / SVE2 optimizations (unless these can be further extended)
  3. Select the package you want to work with.
  4. 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?
  5. 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

  1. Implement your planned changes.
  2. Verify that your changes build correctly and work properly.
  3. 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

  1. 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


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)