NPRG058: Advanced Programming in Parallel Environment

Grading

The criteria for obtaining the credit and passing the exam are summarized in the following. Please, read them carefully. In case any rules are not clear, contact the teachers by Mattermost.

Please make sure you complete your assignments and attend the exam in the winter term. There will be no exam terms in summer (and definitely not in September).

Intermediate home assignments

There will be three regular home assignments (CPU-related, GPU-related, and MPI-related). You are obliged to solve all three assignments and push each solution to the prepared git repository before the given deadline. After the deadline, each student will be given read access to a repository of another student and will be required to perform a review of his/her classmate's solution (that includes testing functionality, assessing speedup, and performing code review). Serious problems with functionality or code design will be reported back as Gitlab issues and these issues must be fixed by the repository owner (a.s.a.p.). The whole review process will be supervised by teachers to ensure some quality and fairness.

There are no explicit qualitative constraints for passing (such as minimal exact speedup); however, the solution should be working, sufficiently well written, and exhibit at least decent performance (the definition of which will be clarified in labs).

All three assignments are mandatory as well as performing the reviews. If you fall back and cannot keep up with the outlined deadlines for serious reasons (e.g., illness), contact the teachers immediately to negotiate an alternate plan. Later attempts to solve the assignments will not be allowed.

Final assignment

After three intermediate assignments, there will be one final assignment. In this assignment, the students are allowed to use any technology or framework for parallel and distributed computing (e.g., OpenMP, OpenMPI, Spark, CUDA, OpenCL). The main requirement is to combine at least two different technologies (e.g., CUDA and OpenMPI) to utilize as much hardware as possible. The objective is to achieve maximal speedup, preferably utilizing the entire parlab and gpulab.

The main criterion is whether the solution reaches the expected speedup; however, the actual speedup may be different for different combinations of technologies. The code itself will not be reviewed thoroughly, only to verify that declared parallel technologies were actually used.

Exam

The exam will be oral in small groups. Each student will randomly select a question from three groups (covering all parts of the course). After a short individual preparation, the student will present the answers to the teachers. The grade will be determined mainly from the quality of the answers during the exam; however, the teachers may choose to reflect the quality of the home assignments as a secondary criterion, especially in borderline cases.