programming cuda and opencl a case study using modern c++ ...magne/inf328s17-info/inf328... ·...

13
Programming Cuda and OpenCL A Case Study Using Modern C++ Libraries

Upload: others

Post on 27-Jun-2020

20 views

Category:

Documents


0 download

TRANSCRIPT

Page 1: Programming Cuda and OpenCL A Case Study Using Modern C++ ...magne/inf328s17-info/inf328... · Programming Cuda and OpenCL A Case Study Using Modern C++ Libraries . Frameworks Cuda

Programming Cuda and OpenCL A Case Study Using Modern C++

Libraries

Page 2: Programming Cuda and OpenCL A Case Study Using Modern C++ ...magne/inf328s17-info/inf328... · Programming Cuda and OpenCL A Case Study Using Modern C++ Libraries . Frameworks Cuda

Frameworks

• Cuda

• NVIDIA

• Large set of libraries

• Compute kernels compiled to PTX (low level)

• OpenCL

• Cross platform

• API - Boilerplate code

• Compute kernels compiled to C-like sources (higher level)

Page 3: Programming Cuda and OpenCL A Case Study Using Modern C++ ...magne/inf328s17-info/inf328... · Programming Cuda and OpenCL A Case Study Using Modern C++ Libraries . Frameworks Cuda

Libraries

• (C)MTL4 (The Matrix Template Library)

• Linear algebra library

• DSL embedded in c++

• High level, compile time transformations

• Cuda

• VexCL (Vector Expression Template Library)

• Convenient vector and matrix

• OpenCL

• Reduce boilerplate code

• ViennaCL (The Vienna Computing Library)

• Linear Algebra

• Cuda and OpenCL (only OpenCL in article)

• Thrust

• Resembles c++ STL

• Reference point

Page 4: Programming Cuda and OpenCL A Case Study Using Modern C++ ...magne/inf328s17-info/inf328... · Programming Cuda and OpenCL A Case Study Using Modern C++ Libraries . Frameworks Cuda

Ordinary differential equation

• Derivatives with respect to only one variable

• With PDE, surface change over time, ODE particle moving through time

• Eulers method:

Page 5: Programming Cuda and OpenCL A Case Study Using Modern C++ ...magne/inf328s17-info/inf328... · Programming Cuda and OpenCL A Case Study Using Modern C++ Libraries . Frameworks Cuda

Odeint

• C++ library for solving ODE’s numerically

• Use odeint solving cababilities with gpgpu libraries

• State type, algebra, operation.

Page 6: Programming Cuda and OpenCL A Case Study Using Modern C++ ...magne/inf328s17-info/inf328... · Programming Cuda and OpenCL A Case Study Using Modern C++ Libraries . Frameworks Cuda

Odeint – Stepper (runge-kutta)

Page 7: Programming Cuda and OpenCL A Case Study Using Modern C++ ...magne/inf328s17-info/inf328... · Programming Cuda and OpenCL A Case Study Using Modern C++ Libraries . Frameworks Cuda

Odeint - integrate

Page 8: Programming Cuda and OpenCL A Case Study Using Modern C++ ...magne/inf328s17-info/inf328... · Programming Cuda and OpenCL A Case Study Using Modern C++ Libraries . Frameworks Cuda

Lorenz system

Page 9: Programming Cuda and OpenCL A Case Study Using Modern C++ ...magne/inf328s17-info/inf328... · Programming Cuda and OpenCL A Case Study Using Modern C++ Libraries . Frameworks Cuda

Lorenz - Thrust

Page 10: Programming Cuda and OpenCL A Case Study Using Modern C++ ...magne/inf328s17-info/inf328... · Programming Cuda and OpenCL A Case Study Using Modern C++ Libraries . Frameworks Cuda

Lorenz - CMTL4

150 % overhead with a 3-component vector with 4K entries compared to one vector of size 12K

Page 11: Programming Cuda and OpenCL A Case Study Using Modern C++ ...magne/inf328s17-info/inf328... · Programming Cuda and OpenCL A Case Study Using Modern C++ Libraries . Frameworks Cuda

Lorenz - VexCL

1 Kernel call instead of 3 -> 25% performance gain

(Large systems)

Page 12: Programming Cuda and OpenCL A Case Study Using Modern C++ ...magne/inf328s17-info/inf328... · Programming Cuda and OpenCL A Case Study Using Modern C++ Libraries . Frameworks Cuda

ViennaCL

Kernel is created once and buffered

Page 13: Programming Cuda and OpenCL A Case Study Using Modern C++ ...magne/inf328s17-info/inf328... · Programming Cuda and OpenCL A Case Study Using Modern C++ Libraries . Frameworks Cuda

Results