Difference between revisions of "Winter 2022 SPO600 Project"

From CDOT Wiki
Jump to: navigation, search
(Part 1: Selection)
Line 3: Line 3:
 
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.
  
=== Part 1: Selection ===
+
== Part 1: Selection ==
  
 
# Identify some candidates packages for optimization. Recommendations:
 
# Identify some candidates packages for optimization. Recommendations:
Line 19: Line 19:
 
Due: Monday, March 21, 11:59 pm
 
Due: Monday, March 21, 11:59 pm
  
=== Part 2: Implementation ===
+
 
 +
== Part 2: Implementation ==
  
 
# Implement your planned changes.
 
# Implement your planned changes.
Line 27: Line 28:
 
Due: Monday, April 4, 11:59 pm (tentative)
 
Due: Monday, April 4, 11:59 pm (tentative)
  
=== Part 3: Upstreaming ===
+
 
 +
== Part 3: Upstreaming ==
  
 
# Get your changes into the upstream codebase, if applicable.
 
# Get your changes into the upstream codebase, if applicable.
Line 34: Line 36:
 
Due: Friday, April 22, 11:59 pm (firm)
 
Due: Friday, April 22, 11:59 pm (firm)
  
==== Resources ====
 
  
===== Searching Code =====
+
== Resources ==
 +
 
 +
 
 +
=== Searching Code ===
 
* [[https://web.microsoftstream.com/video/ad72567e-047d-4dda-9f24-0c525429c7d1 Video - Tips on Searching Codebases]]
 
* [[https://web.microsoftstream.com/video/ad72567e-047d-4dda-9f24-0c525429c7d1 Video - Tips on Searching Codebases]]
  
===== SVE2 =====
+
 
 +
=== SVE2 ===
 
Basic overview of SVE2 - broadly applicable
 
Basic overview of SVE2 - broadly applicable
 
* [https://developer.arm.com/documentation/102340/0001/Introducing-SVE2 ARM Developer Center - Introduction to SVE2]
 
* [https://developer.arm.com/documentation/102340/0001/Introducing-SVE2 ARM Developer Center - Introduction to SVE2]
Line 46: Line 51:
 
* [https://developer.arm.com/documentation/dai0548/latest ARM - SVE Programming Examples]
 
* [https://developer.arm.com/documentation/dai0548/latest ARM - SVE Programming Examples]
 
* [https://developer.arm.com/documentation/100987/0000/ ARM - Introduction to C Language Extensions for SVE2] - documents the C Compiler Intrinsics for SVE2
 
* [https://developer.arm.com/documentation/100987/0000/ ARM - Introduction to C Language Extensions for SVE2] - documents the C Compiler Intrinsics for SVE2
 +
 +
 +
== Submitting Project Work ==
 +
* Blog about your work <u>as you perform it</u>
 +
* 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)

Revision as of 10:10, 11 March 2022

Important.png
This is a draft only!
It is still under construction and content may change. Do not rely on this information.

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

Part 1: Selection

  1. Identify some candidates 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
  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


Part 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 4, 11:59 pm (tentative)


Part 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)