Fall 2017 SPO600 Project

From CDOT Wiki
Jump to: navigation, search


The Fall 2017 SPO600 Project consists of:

  • Stage 1: Identifying and Benchmarking a Hash or Checksum Function in an Open Source Software Project
  • Stage 2: Implementing and Benchmarking an Optimization

Stage 1

1. Find an open source software package that includes a checksum or hash function or method that is implemented in a language that compiles to machine code (C, C++, or Assembler). This could be the Murmurhash, SHA family of hashes, or a similar function.

2. Benchmark the performance of the current hash implementation on AArch64 systems (I'll refer to hash and checksums both as hashes from now on, and functions and methods as functions). Be sure to isolate the hash performance from the performance of all other functions. Prove the repeatability of your observations.

3. Identify the strategy you will use in Stage 2 to attempt to optimize the hash function for better performance on AArch64 systems. This might include some combination of:

  • Altered build options
  • Code changes to permit better optimization by the compiler
  • Algorithm improvements
  • In-line assembler

4. Report on your results to this point.

Stage 2

1. Implement your optimizations to the hash function.

2. Prove that the optimized code produces equivalent results to the original code.

3. Benchmark the performance changes to the hash function with your optimizations. If applicable, prove that your changes have not hindered the performance of the software on non-AArch64 platforms.

4. Report on your results.

Reporting on Results

  • Blog about your work frequently as you are performing it: the package you have selected, the quality of the code you've found, benchmarking challenges, and so forth.
  • Write a final blog post for each stage to summarize the results.
  • Write in detail, and include resources (such as test results, links to modified source code, and so forth) so that others can reproduce your results.
  • Be thorough, professional, and convincing in your reported results.
  • Use correct spelling, grammar, and punctuation, and ensure that your blog post contains appropriate links and code/command examples.
  • Include your personal reflections on the process and your learning.


A bonus of 5% of the course mark is available if you do either one of these two additional steps:

  • Report on the total impact of your changes on the application. For example, you may have sped up the hash function by 100%, which will have a total impact of 1.5% on the application when running a particular workload.


  • Get your code changes accepted by the upstream open source community.

Due Dates

  • Stage I is due by 11:59 pm on Saturday, December 16, 2017.
  • Stage II is due by 11:59 on Monday, January 8, 2018.


  • Q: What if I can't improve performance?
    • A: You may have selected your area of focus poorly, or be using the wrong approach to optimization. Try alternate approaches.
  • Q: What if, after trying alternate approaches to optimization, I still can't improve performance?
    • A: You can complete the project by proving that the code and build instructions, as provided by upstream, cannot be further optimized. Note that in most cases this is much harder to do that to optimize some portion of the code.