# Computer programming and parallel computing

- Unit Coordinator: Dirk Praetorius, Rudolf Frühwirth, Sascha Hunold, Jesper Larsson Träff
- Programme: Erasmus Mundus
- ECTS Credits: 8
- Semester: 2
- Year: 1
- Campus: Vienna University of Technology
- Language: English
- Aims:
- Scientific programming in mathematics:

formulate (certain) mathematical problems in algorithmic form,

implement these elementary algorithms in C and C++,

explain the difference between imperative and object-oriented programming,

present and explain own solutions, and

constructively discuss and analyze own solutions as well as those of other students.

- Programming with MATLAB:

design, debug and test programs in the MATLAB language

solve easy to moderately difficult problems in statistics and applied mathematics using MATLAB

- Basics of Parallel Computing:

Understand and express asymptotic running time and work of parallel algorithms

Understand parallel algorithm using the PRAM model with respect to running time and work

Understand and appreciate characteristics of thread models for parallel computing

Read and write programs in OpenMP

Read and write programs in MPI

Understand and appreciate task parallel models for parallel computing

- Content:
- Scientific programming in mathematics:

Object oriented design and programming in C++: Representation of integer and floating point numbers. Conditioning of given problems. Computational cost of algorithms. Variables and standard data types. Pointers. Functions and recursion. Call by value vs. call by reference. Loops, Objects and classes (resp. structures), Operator overloading, Inheritance and virtual.

- Programming with MATLAB:

MATLAB syntax (command- and object-oriented), graphical representations, problems in linear algebra, optimization and statistics, solution of ordinary differential equations by functions in the various toolboxes.

- Basics of Parallel Computing:

Motivation and goals of parallel computing, parallel computer architectures, programming models, performance measurement and analysis, introduction to programming paradigms such as MPI (Message Passing Interface), Pthreads, and OpenMP. Other aspects and languages for programming multi-core processors.

- Pre-requisites:
- Programming with MATLAB:

Basic knowledge of higher mathematics (functions, linear algebra, ordinary differential equations)

- Basics of Parallel Computing:

Knowledge of programming languages, computer architectures, operating systems. Basic Algorithms and Datastructures (asymptotic worst-case analysis). Programming skills in C, C++, Fortran or Java.

- Reading list:
- Scientific programming in mathematics:

lecture notes

- Programming with MATLAB:

Otto and Denier, An Introduction to Programming and Numerical Methods in MATLAB

Brian Hahn, Essential MATLAB for Engineers and Scientists

Stormy Attaway, Matlab: A Practical Introduction to Programming and Problem Solving

- Basics of Parallel Computing:

Rauber, Rünger: Parallel programming. Second Edition, Springer 2013.

Schmidt, Gonzalez-Dominguez, Hundt, Schlarb: Parallel Programming. Concepts and Practice. Morgan Kaufmann 2018.