Material for the UIBK Parallel Programming Lab (2021)

Overview

UIBK PS Parallel Systems (703078, 2021)

This repository contains material required to complete exercises for the Parallel Programming lab in the 2021 summer semester, including assignment sheets and any associated materials. Note that some of this material is based on previous years.

Make sure to read this document carefully, as it contains vital information regarding the grading of exercises.

Topics

Generally, topics discussed here include

  • parallel programming concepts
  • shared memory parallelization using OpenMP
  • performance-oriented programming
  • proper experiment orchestration and benchmarking
  • parallel programming tools

Schedule

This schedule gives you an overview of the topics we will discuss on each date. It will be updated continuously throughout the semester. Note that exercises associated with a given date are to be discussed on that day, i.e., solutions for that assignment have to be handed in via OLAT by 17:00 on the previous day (Mondays).

Date Assignment Topics
2021-03-09 - Administrative matters, introduction to LCC2
2021-03-16 1 Speedup, Amhdal's law, measurements

General Information

All programming exercise solutions you hand in must compile and run on the LCC2 cluster as described in the LCC2 tutorial. One way way of ensuring this is by developing on LCC2 directly, either through a terminal or using an editor/IDE with support for remote development via SSH (such as Visual Studio Code).

Note that the default version of the GCC compiler present on LCC2 is very outdated. You may load a never version by calling module load gcc/8.2.0.

As the tutorial states, use job scripts to run your applications on LCC2 compute nodes, do NOT run applications directly on the LCC2 login node.

Connecting to LCC2 via SSH

NOTE: You have to be inside the University network to be able to connect via SSH. See here for more information.

The hostname of LCC2 is lcc2.uibk.ac.at.

Coding Guidelines

All programming exercises are conducted in C or C++.

Your code should always compile without warnings, when passing the flags -Wall -Wextra -Werror -std=gnu11. Error handling is your discretion, but wherever you do or do not include error handling you need to be able to justify it.

Make sure your code is properly formatted using either your IDE/Text editor of choice, or by using a tool such as clang-format. You can find an example .clang-format file in this repository. Failure to consistently format code may result in lower scores.

Try to write self-documenting code by choosing descriptive variable and function names. While you may want to add comments to certain sections of your code, try to avoid trivial comments such as fopen(...); // open file. The best source code comments are the ones you do NOT need to write. All names and comments should be written in English.

Finally, all submitted code must be accompanied by a GNU Makefile. That is, your solution must be able to be compiled with a single call to make. You can find an example Makefile and more information here.

Kokkos C++ Performance Portability Programming EcoSystem: The Programming Model - Parallel Execution and Memory Abstraction

Kokkos: Core Libraries Kokkos Core implements a programming model in C++ for writing performance portable applications targeting all major HPC platfor

Kokkos 1.1k Aug 10, 2022
A General-purpose Parallel and Heterogeneous Task Programming System

Taskflow Taskflow helps you quickly write parallel and heterogeneous tasks programs in modern C++ Why Taskflow? Taskflow is faster, more expressive, a

Taskflow 7.1k Aug 5, 2022
A General-purpose Parallel and Heterogeneous Task Programming System

Taskflow Taskflow helps you quickly write parallel and heterogeneous task programs in modern C++ Why Taskflow? Taskflow is faster, more expressive, an

Taskflow 7.1k Aug 5, 2022
Cpp-taskflow - Modern C++ Parallel Task Programming Library

Cpp-Taskflow A fast C++ header-only library to help you quickly write parallel programs with complex task dependencies Why Cpp-Taskflow? Cpp-Taskflow

null 4 Mar 30, 2021
ParallelComputingPlayground - Shows different programming techniques for parallel computing on CPU and GPU

ParallelComputingPlayground Shows different programming techniques for parallel computing on CPU and GPU. Purpose The idea here is to compute a Mandel

Morten Nobel-Jørgensen 2 May 16, 2020
Powerful multi-threaded coroutine dispatcher and parallel execution engine

Quantum Library : A scalable C++ coroutine framework Quantum is a full-featured and powerful C++ framework build on top of the Boost coroutine library

Bloomberg 447 Jul 25, 2022
An optimized C library for math, parallel processing and data movement

PAL: The Parallel Architectures Library The Parallel Architectures Library (PAL) is a compact C library with optimized routines for math, synchronizat

Parallella 296 Jul 24, 2022
Shared-Memory Parallel Graph Partitioning for Large K

KaMinPar The graph partitioning software KaMinPar -- Karlsruhe Minimal Graph Partitioning. KaMinPar is a shared-memory parallel tool to heuristically

Karlsruhe High Quality Graph Partitioning 14 Jul 5, 2022
C++-based high-performance parallel environment execution engine for general RL environments.

EnvPool is a highly parallel reinforcement learning environment execution engine which significantly outperforms existing environment executors. With

Sea AI Lab 571 Aug 5, 2022
Parallel algorithms (quick-sort, merge-sort , enumeration-sort) implemented by p-threads and CUDA

程序运行方式 一、编译程序,进入sort-project(cuda-sort-project),输入命令行 make 程序即可自动编译为可以执行文件sort(cudaSort)。 二、运行可执行程序,输入命令行 ./sort 或 ./cudaSort 三、删除程序 make clean 四、指定线程

Fu-Yun Wang 3 May 30, 2022
Partr - Parallel Tasks Runtime

Parallel Tasks Runtime A parallel task execution runtime that uses parallel depth-first (PDF) scheduling [1]. [1] Shimin Chen, Phillip B. Gibbons, Mic

null 32 Jul 17, 2022
Thrust - The C++ parallel algorithms library.

Thrust: Code at the speed of light Thrust is a C++ parallel programming library which resembles the C++ Standard Library. Thrust's high-level interfac

NVIDIA Corporation 4.1k Aug 10, 2022
EnkiTS - A permissively licensed C and C++ Task Scheduler for creating parallel programs. Requires C++11 support.

Support development of enkiTS through Github Sponsors or Patreon enkiTS Master branch Dev branch enki Task Scheduler A permissively licensed C and C++

Doug Binks 1.3k Aug 6, 2022
Parallel-hashmap - A family of header-only, very fast and memory-friendly hashmap and btree containers.

The Parallel Hashmap Overview This repository aims to provide a set of excellent hash map implementations, as well as a btree alternative to std::map

Gregory Popovitch 1.5k Aug 9, 2022
KRATOS Multiphysics ("Kratos") is a framework for building parallel, multi-disciplinary simulation software

KRATOS Multiphysics ("Kratos") is a framework for building parallel, multi-disciplinary simulation software, aiming at modularity, extensibility, and high performance. Kratos is written in C++, and counts with an extensive Python interface.

KratosMultiphysics 709 Aug 10, 2022
Parallel implementation of Dijkstra's shortest path algorithm using MPI

Parallel implementation of Dijkstra's shortest path algorithm using MPI

Alex Diop 1 Jan 21, 2022
Parallel bitonic sorter with limited enclave page cache (default 80MB).

Parallel Oblivious Sorter with SGX Parallel bitonic sorter with limited Intel SGX enclave page cache (default 80MB). Compile and Run Compile make clea

ZHENG Leqian 3 Jul 7, 2022
C++React: A reactive programming library for C++11.

C++React is reactive programming library for C++14. It enables the declarative definition of data dependencies between state and event flows. Based on

Sebastian 953 Aug 2, 2022
:copyright: Concurrent Programming Library (Coroutine) for C11

libconcurrent tiny asymmetric-coroutine library. Description asymmetric-coroutine bidirectional communication by yield_value/resume_value native conte

sharow 350 Aug 4, 2022