Programming project: Grading aspects
Data structures
- Is your code object-oriented, using some high-level features from the C++ language, without becoming inefficient at a lower level?
- Is memory handled safely in line with recommendations for good programming practice?
- Does the code avoid operations that are very inefficient in memory (and time) such as needlessly copying large amounts of data?
- Do the employed data structures fit the needs of the algorithm and the scenario? Why did you choose these data structures, and not others?
Algorithms/performance
- Why did you choose one particular algorithm and not another? Is it for theoretical reasons, or did you do performance tests for several candidate algorithms, etc.?
- Is the code actually an efficient implementation of the algorithm?
- How does the runtime scale if the problem size is increased? (Could be determined theoretically or by performance measurements.)
Concurrency
- Think about the concurrency inherent in your algorithm: What operations are concurrent, and how could they be parallelized?
- How would you distribute the responsibility for dealing with data over many processes?
- Implement a parallel or distributed version of your code, for example using MPI or ROS.
- Analyse how your solution performs as the number of processes is increased. This can be done in a theoretical way or based on performance measurements.
The concurrency and parallel or distributed programming aspect
can be addressed using methods from parallel scientific computing, e.g. MPI,
or using methods from robotics such as the C++ API for ROS (rclcpp).
Are your data structures and algorithms, and their implementation,
parallelized in a way that will still work well if a large version of the
problem is solved with a large number of parallel processes (MPI ranks, ROS nodes, etc.)?
Observation: It is not strictly required to submit a parallelized code just to pass the module, if you
are not aiming at the best possible grade. Up to 50% of the grade for this aspect are accessible without submitting
a parallelized code, based on a discussion of what you would do and how it would perform, e.g.,
possible parallelized algorithms and data structures.
(And of course you can still pass even with a 0% grade from the "concurrency" aspect.)
Overall grading scheme