Efficient Implementation of Algorithms
Code  Completion  Credits  Range  Language 

BIEEIA  Z,ZK  5  2P+1C 
 Lecturer:
 Ivan Šimeček (guarantor)
 Tutor:
 Ivan Šimeček (guarantor)
 Supervisor:
 Department of Theoretical Computer Science
 Synopsis:

Students learn to combine their programming skills (ability to design efficient algorithms) and HW knowledge (utilization of all available features of a particular processor and memory architecture). Students learn the basics of code tuning and optimization.
 Requirements:

Subject BIEFA. Knowledge of C or C++ programming, active knowledge of assembly language. Good knowledge of processor and memory architecture concepts.
 Syllabus of lectures:

1. Recap of basic computer architecture concepts (pipeline, vector instructions, cache memory, TLB).
2. New architecture features of modern CPUs.
3. Multicore architectures.
4. Multicore programming in OpenMP API.
5. Efficient algorithms, asymptotic complexity.
6. Efficient data structures and their combinations.
7. Basic routines for numerical linear algebra (dense matrices).
8. Basic routines for numerical linear algebra (sparse matrices).
9. Source code transformations I.
10. Source code transformations II.
11. Compilers and optimizations.
12. Models of cache behavior.
13. Models of cache behavior in multicore environments.
 Syllabus of tutorials:

1. Introduction, laboratory equipment
2. Performance metrics.
3. Algorithms for searching elements.
4. Algorithms for searching patterns in text, evaluation of logical expressions
5. Event counters based profiling, assignment No. 1.
6. Experiments with compiler's settings
7. Sorting of arrays and linked lists.
8. Sorting on external memories, checking the assignment No. 1
9. FFT algorithm, modelling of multielement interaction, assignment No. 2
10. Graph algorithms, assignment No. 3.
11. Encryption, data compression, checking the assignment No. 2
12. Available math libraries.
13. Checking the assignment No. 3.
 Study Objective:

The aim of the module is to develop an ability to write efficient and practically usable programs by linking knowledge of HW and SW, which is often taught separately. The module teaches how to combine knowledge of both fields to create an efficient program for a given machine (for instance, in asymptotic complexity analysis, multiplicative constants are disregarded as uninteresting, while in real world they are relevant). The students learn how to get maximum performance from a computer and how to recognize that the maximum has been reached.
 Study materials:

1. Wolfe, M. ''HighPerformance Compilers for Parallel Computing''. Addison Wesley, 1995. ISBN 0805327304.
2. Wadleigh, K. R., Crawford, I. L. ''Software Optimization for High Performance Computing: Creating Faster Applications''. Prentice Hall PTR, 2000. ISBN 0130170089.
 Note:
 Timetable for winter semester 2018/2019:

06:00–08:0008:00–10:0010:00–12:0012:00–14:0014:00–16:0016:00–18:0018:00–20:0020:00–22:0022:00–24:00
Mon Tue Fri Thu Fri  Timetable for summer semester 2018/2019:
 Timetable is not available yet
 The course is a part of the following study plans: