SAUCE
Home
Events
Listing
Future
Previous
Accelerated Computing with GPUs 2020
Data Mining - Winter 20/21
High Performance Computing 2019
Einführung in die Bioinformatik WS19/20
Computational Logic
Parallel Algorithms and Architectures 2019
DSEA Praktikum 2018/19
Deep Learning 2018
High Performance Computing 2018
Parallel Algorithms and Architectures 2018
Datenstrukturen und effiziente Algorithmen Ws 18/19
EiP SoSe 18
bio-st-18
EiP WS 2017/18
High Performance Computing 2017
Datenstrukturen und effiziente Algorithmen WiSe 17/18
PS SS 2017
Einfuehrung in die Programmierung SS17
Parallel Algorithms and Architectures 2017
High Performance Computing 2016
DSEA 2016/17
EiP WS2016/17
Parallel Algorithms and Architectures 2016
PS SS 2016
Krypto SS 2016
EiP SS 2016
DSEA Praktikum WS 2015/16
DSEA WS 2015/16
News
Documentation
About
Changelog
Roadmap
Deutsche Dokumentation
Tips and Tricks
Test configuration
Language information
Contact
Login
High Performance Computing 2018
Sheet 7 (Sorting, Riemann Zeta)
Pair Programming
Sheet 2 (AVX Shuffles, Instruction Parallelism)
Sheet 3 (Stochastic PI, Shallow Deep Learning)
Sheet 4 (Max-Pooling, Asynchronous 2D Jacobi Partitioning)
Sheet 5 (std::async, block-cyclic distribution)
Sheet 6 (Atomics, Knapsack)
Sheet 7 (Sorting, Riemann Zeta)
Sheet 8 (Data Dependencies, Task Parallelism)
Sheet 9 (Reverse-Engineering MPI, SUMMA)
Sheet 11 (Position Based Dynamics)
Sheet 12: Lockfree Hashmaps
Task 1 (Sorting using OpenMP)
Task 1 (Sorting using OpenMP)
Task 2 (Riemann Zeta)
Task 1 (Sorting using OpenMP)
Assignment
Scaffold Head
#include <algorithm> #include <iostream> #include <random> #include <chrono> #include <omp.h> void init(std::vector<unsigned int>& X) { std::mt19937 engine (42); std::uniform_int_distribution<> distribution(0, X.size()); for (auto& x : X) x = distribution(engine); } void sequential_sort(std::vector<unsigned int>& X) { unsigned int i, j, count, N = X.size(); std::vector<unsigned int > tmp(N); for (i = 0; i < N; i++) { count = 0; for (j = 0; j < N; j++) if (X[j] < X[i] || X[j] == X[i] && j < i) count++; tmp[count] = X[i]; } std::copy(tmp.begin(), tmp.end(), X.begin()); }
Scaffold Foot
bool check (const std::vector<unsigned int>& X) { return std::is_sorted(X.begin(), X.end()); } int main () { std::vector<unsigned int> X(50000); init(X); std::chrono::time_point<std::chrono::system_clock> start, end; start = std::chrono::system_clock::now(); sequential_sort(X); end = std::chrono::system_clock::now(); std::chrono::duration<double> elapsed_seconds = end-start; std::cout << "# elapsed time (sequential): " << elapsed_seconds.count() << "s" << std::endl; std::cout << (check(X) ? "passed" : "failed") << std::endl; init(X); start = std::chrono::system_clock::now(); parallel_sort(X); end = std::chrono::system_clock::now(); elapsed_seconds = end-start; std::cout << "# elapsed time (parallel): " << elapsed_seconds.count() << "s" << std::endl; std::cout << (check(X) ? "passed" : "failed") << std::endl; }
Start time:
Mo 22 Okt 2018 10:51:00
End time:
Fr 01 Mär 2019 12:00:00
General test timeout:
10.0 seconds
Tests
Comment prefix
#
Given input
Expected output
passed passed