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 C++11 Shift in the labs from C to C++11 (modern C++) // auto type specifier auto addOneMap = skepu2::Map<1>(addOneFunc);
Lab 3: Skeleton programming with SkePU
august.ernstsson@liu.se
TDDD56 Lab 3 August Ernstsson 2018
// ”auto” type specifier auto addOneMap = skepu2::Map<1>(addOneFunc); skepu2::Vector<float> input(size), res(size); input.randomize(0, 9); // Lambda expression auto dur = skepu2::benchmark::measureExecTime([&] { addOneMap(res, input); }); capture by reference
TDDD56 Lab 3 August Ernstsson 2018
TDDD56 Lab 3 August Ernstsson 2018
C++ interface (skeletons, smart containers, …) C++ OpenMP OpenCL CUDA CPU Multi-core CPU Accelerator GPU
P
Portability
TDDD56 Lab 3 August Ernstsson 2018
implemented as C++ template classes
Map
Mult
TDDD56 Lab 3 August Ernstsson 2018
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 2018
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
P
Performance
TDDD56 Lab 3 August Ernstsson 2018
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 2018
template<typename T> T abs(T input) { return input < 0 ? -input : input; } template<typename T> T mvmult(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 2018
TDDD56 Lab 3 August Ernstsson 2018
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 2018
TDDD56 Lab 3 August Ernstsson 2018
TDDD56 Lab 3 August Ernstsson 2018
Original Average Gaussian
TDDD56 Lab 3 August Ernstsson 2018
Original Median
TDDD56 Lab 3 August Ernstsson 2018
1 pixel = 3 bytes!
TDDD56 Lab 3 August Ernstsson 2018
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 2018
messages if used incorrectly!
errors
TDDD56 Lab 3 August Ernstsson 2018