Class Project

The class project consists of several parts, each of which has its own submission deadline listed below. It is particularly important that you provide code for peer review on time, so that your peer reviewer is able to provide thoughtful and helpful feedback in time for it to improve your code for the latter parts of the project. The project grade will be based on:

Project Components

  • Project Proposal (5 points)

  • Checkpoint 1: Serial version of code (10 points)

  • Checkpoint 2: Multi-core version of code (10 points)

  • Peer code reviews (5 points)

  • Distributed-memory/GPU/Cloud version of code (10 points)

  • Final Submission (5 points)

  • Project Presentation (5 points)

Instructions & Grading Rubrics for each step

Project Proposal (due Sept 6)

Use the link provided via course announcement or Canvas to create your repository for the project proposal.

Rubric

  • Statement of the project goal (0 points, but required so the rest makes sense)

  • Description of the inputs. Be sure to specify what parameters (e.g., dataset size, resolution of grid, number of samples, etc.) will be used to explore how performance scales (1 point)

  • Description of the outputs (1 point)

  • Detailed plan for how the code will be tested (1 point)

  • Discussion of the relevant range of problem sizes (1 point)

  • Complete list of what computer architectures, programming languages, and libraries you will use, as well as an justification of your choices (1 point)

Serial version of code (due Oct 2)

At this point the code does not need to be optimized. If possible, try to include the results of benchmarking and/or profiling in the README, to help both you and the reviewer identify which sections are ammenable to optimization.

Rubric

  • Code performs proposed tasks (1 point)

  • Comprehensive set of unit tests, at least one integration or regression test (1 point)

  • Code passes tests (1 point)

  • Student code uses a version control system effectively (1 point)

  • Repository includes many regular, small commits (1 point)

  • Documentation for functions' purpose and design (1 point)

  • Comprehensive set of assertions (1 point)

  • Variable/function names consistent, distinctive & meaningful (1 point)

  • Useful & consistent code formatting & style (1 point)

  • Code is modular, rather than having chunks of same code copied and pasted (1 point)

Peer Code Reviews (due Oct 9)

Instructions

For more information, see instructions for code review.

Rubric

  • Constructive suggestions for improving programming practices (1 point)

  • Specific, constructive suggestions for improving code readability/documentation (1 point)

  • Specific, constructive suggestions for improving tests and/or assertions (1 point)

  • Specific, constructive suggestions for improving code modularity/organization/maintainability (1 point)

  • Specific, constructive suggestions for improving code efficiency (1 point)

  • Finding any bugs (if code author confirms) (bonus points?)

First parallel version of code (due Oct 30)

Typically, the first parallel version runs on multiple cores using a shared memory system.

Rubric

  • Choice of portion of code to parallelize (1 point)

  • Choice of approach for parallelizing code (1 point)

  • Code performs proposed tasks (2 point)

  • Unit/regression tests comparing serial & parallel versions (1 point)

  • Code passes tests (1 point)

  • General code efficiency (1 point)

  • Implementation/optimization of multi-core parallelization (2 points)

  • Significant performance improvement (1 point)

Submit second parallel version of code (due Nov 13)

Typically, the second parallel version of the code is parallelized using one of: multiple cores with distributed-memory or a GPU. Other alternatives include using Intel Phis, TPUs, or a cloud environment like AWS, JuliaHub or Open Science Grid.

Rubric

  • Choice of portion of code to parallelize (1 point)

  • Choice of approach for parallelizing code (1 point)

  • Code performs proposed tasks (2 point)

  • Unit/regression tests comparing serial & parallel versions (1 point)

  • Code passes tests (1 point)

  • General code efficiency (1 point)

  • Implementation/optimization of second type of parallelism (2 points)

  • Significant performance improvement (1 point)

Completed Project (due Nov 29)

Completed project code with documetation, benchmarking results and summary of lessons learned.

Rubric

  • Results of benchmarking code (typically included in project README, but more comprehensive benchmarking could be in a separate document, notebook or directory)

    • Performance versus problem size for fixed number of workers (1 point)

    • Performance versus number of workers for fixed problem size (1 point)

  • Documentation:

    • README: (1 point)

      • Project overview

      • Instructions on how to install and run code

      • CI testing or detailed instructions on how to rerun tests

      • Results of benchmarking and/or pointer to where results can be found

      • Overview of code/package structure (if project is larger than one notebook)

    • Docstrings: Coverage, clarity and quality (1 point)

  • Summary of lessons learned (1 point)

Project Presentation (due Nov 27 - Dec 6)

Schedule of Student Presentations

Rubric

  • Motivation/Introduction/Overview of project, so class can understand broader goals (1 point)

  • Explanation of specific calculation being performed, so class can understand what follows (1 point)

  • Description of optimization and parallelziation approaches attempted (1 point)

  • Analysis/explanation

    • Identify most time consuming part(s) of calculations and specify what is being benchmarked (0 points)

    • Benchmarks of how performance of each version scales with problem size for fixed number of workers (1/2 point)

    • Benchmarks of how performance of parallel versions scales with nubmer of workers for given problem size (1/2 point)

  • Description/analysis/discussion of what lessons you learned from the class project (1 point)