NPRG042 Programming in Parallel Environment

Assignments

  1. C# .NET Core Tasks Asynchronous DNS resolver (deadline 18.3. 23:59 CET, results)
  2. TBB K-means clustering (deadline 1.4. 23:59 CEST)
  3. OpenMP (TBA)
  4. Spark (TBA)
  5. GPGPU (TBA)

Each assignment objective is to implement a parallel solution for a described problem. Let us emphasize, that the solution must use a specified technology and must not use any other technology for parallelization (code optimizations are allowed). Please, read the assignment specification carefully and observe all details regarding the file naming conventions, framework utilization, compilation, and APIs.

The parallel solution must return the exact same results as the serial solution unless specified otherwise. A solution that fails to do so will not be accepted (i.e., no points will be granted). Furthermore, a solution is forbidden to produce any output to both stdout and stderr which is not required or allowed in the problem description. Debugging outputs may interfere with our testing framework so such a solution will be treated as if it does not provide a correct output.

Assignment submission and evaluation

The solutions should be submitted to ReCodEx unless specified otherwise. It will provide the first level of checking -- i.e. it evaluates that your solution is producing correct results and exhibits at least some minimal speedup. Please note, that the correct results are provided by the serial solution which is given to you for each problem.

After the deadline, the last solution (from each student) that passed all tests (got 100% correctness) in ReCodEx will be taken for the second level of evaluation (speedup). We will run performance tests on your solutions on parlab/gpulab and compute their speedups (which is the basis for our grading). The speedup is computed as the ratio of the measured wall time of the serial solution and your parallel solution. When multiple datasets are provided, the speedup is determined for each dataset separately, and the final speedup is computed as a harmonic mean of the individual speedups.

Unlike ReCodEx, the environment for performance tests does not use any sandbox or other means to prevent the submitted solutions from performing malicious tasks since we need to measure the performance without any interference. Please, take extra care to ensure that your solution is not performing any tasks that may violate the security of parlab. Any attempt for intentional breach will result in severe disciplinary (and possibly legal) actions against the participants.

Infrastructure

The details regarding the testing infrastructure and the assignment submission can be found on KSI cluster page. The best way how to invoke make and your compiled solutions is via srun command. For example:

$> srun -p mpi-homo-short -A nprg042s ./my-executable my-args

The -A nprg042s specifies the user account and it is quite important (as it defines permissions for job queues). You will be assigned this account just before the first labs based on the data from SIS. If you are not enrolled for NPRG042 in SIS when the assignment will occur, you will need to contact us to fix your account affiliation.

Please note that the parlab uses Rocky Linux, which has a rather old version of g++ compiler by default. We have installed newer versions of g++ on all workers to let you fully appreciate the newest features of C++. The new g++ compiler will be also used for testing your submits. It will be invoked with the following flags CXXFLAGS=-Wall -O3 -std=c++20, unless specified otherwise.

Provided materials are located at /home/_teaching. The subdirectory para holds the data related to the assignments (data, frameworks, ...) and the subdirectory examples contain the examples that will be presented during the lectures.