Learning materials

Homework Instruction

On this page

This programming assignment consists of three integral parts: coding, conducting experiments, and report writing. It’s essential to give each section equal importance to ensure comprehensive understanding and successful completion of the task at hand. Here’s a breakdown of what’s expected for each part:

Coding

1. Code Optimization

  • Begin by analyzing the provided code thoroughly.
  • Identify areas of improvement and potential inefficiencies.
  • Develop an optimized version that enhances performance while maintaining functionality.
  • Do not optimize the code blindly. Focus on code blocks that consume the most time and resources.
  • It is a good practice to make your program focusing on running only a single experiment. Code for automation can be added later as separated script.

2. Documentation & Clarity

  • Ensure every function, class, and module is accompanied by concise and clear comments explaining its purpose and functionality.
  • Any complex logic or algorithms used should have inline comments for better understanding. No need to comment anything that is easy to understand.
  • It’s not just about writing comments but making the code itself self-explanatory through meaningful variable and function names.

3. Makefile

  • Provide a Makefile to streamline the compilation process.
  • The Makefile should support multiple targets as necessary, allowing for flexibility in compilation and testing.
    • When optimizations are from compilation flags, make separate targets for each optimization in your Makefile.
  • Ensure the Makefile is free of errors and can successfully compile the code without issues.

4. Coding Style Consistency

  • Adopt a consistent coding style throughout your work. This includes consistent indentation, naming conventions, and code structure.
  • If you’re following any particular coding guidelines or standards, ensure you adhere to them strictly.
  • Consistency aids in readability and maintainability, making it easier for others (and yourself) to review and understand your code in the future.

Work with data

  1. Data Collection

    • You may write scripts for automation to feed various inputs to your program and collect results.
    • Results can be ideally in CSV (Comma Separated Values) format for easy processing and analysis.
    • Manually input the data into a spreadsheet is also an option, but it’s time-consuming and prone to errors.
  2. Data Processing

  3. Data Presentation

    • Plots are the best way to visualize your data.
    • Types
    • Line plot: show trends of series, focus on trend
    • Bar plot: show comparison of values in series
    • Scatter plot: show the relationship between two variables or the distribution of data in two-dimensional space
    • Histogram: show the distribution of data in one-dimensional space
  • Useful plots in this course
    • Trend of run time: line plot, X: input size, Y: run time, Series: the optimization
    • Strong scaling: line plot, X: number of processes, Y: speedup, Series: input size
    • Weak scaling: line plot, X: number of processes, Y: speedup, Series: input size per process

Report Writing