TDDD56
Lab 3: Skeleton programming with SkePU
August Ernstsson
august.ernstsson@liu.se
TDDD56 Lab 3: Skeleton programming with SkePU August Ernstsson - - PowerPoint PPT Presentation
TDDD56 Lab 3: Skeleton programming with SkePU August Ernstsson august.ernstsson@liu.se Labs schedule WebReg Week Lab 1 v46 Load Balancing Responsible: August Lab 2 v47 CPU Non-blocking Data Structures Lesson 2 Lab 3 v48 High-level
Lab 3: Skeleton programming with SkePU
august.ernstsson@liu.se
TDDD56 Lab 3 August Ernstsson 2020
CPU Lab 1 v46 Load Balancing Lab 2 v47 Non-blocking Data Structures Lab 3 v48 High-level Parallel Programming GPU Lab 4 v49 CUDA 1 Lab 5 v50 CUDA 2 Lab 6 v51 OpenCL
Responsible: August Responsible: Ingemar Lesson 2 Week WebReg
TDDD56 Lab 3 August Ernstsson 2020
// ”auto” type specifier auto addOneMap = skepu::Map<1>(addOneFunc); skepu::Vector<float> input(size), res(size); input.randomize(0, 9); // Lambda expression auto dur = skepu::benchmark::measureExecTime([&] { addOneMap(res, input); }); capture by reference
TDDD56 Lab 3 August Ernstsson 2020
TDDD56 Lab 3 August Ernstsson 2020
C++ interface (skeletons, smart containers, …) C++ OpenMP OpenCL CUDA StarPU + MPI CPU Multi-core CPU Accelerator GPU Cluster
TDDD56 Lab 3 August Ernstsson 2020
Map
Mult
TDDD56 Lab 3 August Ernstsson 2020
1 2 3 4 5 6 7 8 2 2 2 2 2 2 2 2
Map Mult Mult
4 2 8 6 12 10 16 14
Mult Mult Mult Mult Mult Mult Mult
Sequential algorithm
TDDD56 Lab 3 August Ernstsson 2020
1 2 3 4 5 6 7 8 2 2 2 2 2 2 2 2
Map Mult Mult
4 2 8 6 12 10 16 14
Mult Mult Mult Mult Mult Mult Mult
Parallel algorithm
TDDD56 Lab 3 August Ernstsson 2020
int add(int a, int b, int m) { return (a + b) % m; } vec_sum(result, v1, v2, 5);
Map add
auto vec_sum = Map<2>(add);
add
Mult Mult Mult Mult Mult Mult Mult MultTDDD56 Lab 3 August Ernstsson 2020
template<typename T> T abs(T input) { return input < 0 ? -input : input; } template<typename T> T userfunc(Index1D row, const Mat<T> m, const Vec<T> v) { T res = 0; for (size_t i = 0; i < v.size; ++i) res += m[row.i * m.cols + i] * v[i]; return abs(res); }
TDDD56 Lab 3 August Ernstsson 2020
TDDD56 Lab 3 August Ernstsson 2020
Executable Source-to-source compiler Backend compiler (e.g., GCC) Program sources SkePU runtime library Backend sources (C++, OpenCL, etc.)
Handled by lab Makefiles
TDDD56 Lab 3 August Ernstsson 2020
TDDD56 Lab 3 August Ernstsson 2020
TDDD56 Lab 3 August Ernstsson 2020
Original Average Gaussian
TDDD56 Lab 3 August Ernstsson 2020
Original Median
TDDD56 Lab 3 August Ernstsson 2020
1 pixel = 3 bytes!
TDDD56 Lab 3 August Ernstsson 2020
TDDD56 Lab 3 August Ernstsson 2020
Build lab program: > make bin/addone Run lab program: > bin/addone 100 CPU
CPU: Use sequential backend OpenMP: Use multithreaded backend OpenCL: Use GPU backend
TDDD56 Lab 3 August Ernstsson 2020
messages if used incorrectly!
errors
TDDD56 Lab 3 August Ernstsson 2020