Effective Software
| Code | Completion | Credits (ECTS) | Range | Language |
|---|---|---|---|---|
| B4M36ESW | Z,ZK | 6 | 2P+2C | Czech |
- Relations:
- During a review of study plans, the course A4M35OSP can be substituted for the course B4M36ESW.
- It is not possible to register for the course B4M36ESW if the student is concurrently registered for or has already completed the course A4M35OSP (mutually exclusive courses).
- It is not possible to register for the course B4M36ESW if the student is concurrently registered for or has already completed the course BE4M36ESW (mutually exclusive courses).
- It is not possible to register for the course B4M36ESW if the student is concurrently registered for or has previously completed the course BE4M36ESW (mutually exclusive courses).
- The requirement for course B4M36ESW can be fulfilled by substitution with the course BE4M36ESW.
- Course guarantor:
- David Šišlák
- Lecturer:
- Jakub Dupák, David Šišlák
- Tutor:
- Jakub Dupák, Tomáš Hauser, Lukáš Maruniak, David Šišlák
- Supervisor:
- Department of Computer Science
- Synopsis:
-
Students will become familiar with the issues of software and algorithm optimization under limited resources. The course focuses on the efficient use of modern hardware architectures, namely multi-core and multiprocessor shared-memory systems. Students will learn to implement the techniques presented in the lectures in C and Java. The main topics include code optimization, efficient data structures and the use of CPU cache memory, data structures in multithreaded applications, and the implementation of high-performance network servers.
- Requirements:
-
background knowledge in area of Computer architecture, C and Java programming languages
- Syllabus of lectures:
-
1. Introduction, modern computer architecture, C compilers.
2. Bentley's rules, C compiler, profiling.
3. Benchmarking, measurements, metrics, statistics, WCET, timestamping.
4. Scalable synchronization from mutexes to RCU (read-copy-update), transactional memory, scalable API.
5. Memory access efficient programming with caches, dynamic memory allocation (malloc, NUMA, ...)
6. Serialization of data structures JSON, XML, protobufs, AVRO, cap'n'proto, mmap/shared memory.
7. Program run virtual machine, byte-code, Java compiler, JIT compiler, relation to machine code, byte-code analysis, dissasembly of Java byte-code, optimization in compilers, program performance analysis, profiling.
8. Data concurrency in JVM multi-threaded access to data, locks monitoring, atomic operations, lock-less/block-free data structures, non-blocking algorithms (queue, stack, set, dictionary), data races, synchronization.
9. Efficient servers, C10K, non-blocking I/O, efficient networking, threads.
10. JVM Memory analysis (dynamic/static), data structures, collections for performance.
11. JVM Object allocation, bloom filters, references, effective caching.
12. Virtualization (IOMMU, SR-IOV, PCI pass-through, virtio, ).
13. Memory Management in JVM Memory Layout, Garbage Collectors.
- Syllabus of tutorials:
- Study Objective:
- Study materials:
-
[1] MIT: Performance-engineering-of-software-systems
[2] Oaks, S.: Java Performance: 2nd Edition. O'Reilly, USA 2020.
[3] Jones, R., Hosking, A., Moss, E.: The Garbage Collection Handbook - The Art of Automatic Memory Management. CRC Press, USA 2012.
[4] Herlihy, M., Shavit, N.: The Art of Multiprocessor Programming. Morgan Kaufman, 2008.
[5] Fog, A.: The microarchitecture of Intel, AMD and VIA CPU, 2016.
[6] Drepper U.: What every programmer should know about memory, 2007
[7] Jain, R.: The Art of Computer Systems Performance Evaluation. Wiley, New York 1991. (slides, book)
[8] Lilja, D. J.: Measuring Computer Performance: A Practitioner?s Guide. Cambridge University Press, 2000. (book web site, Supplemental Teaching Materials)
- Note:
- Further information:
- https://esw.pages.fel.cvut.cz/
- Time-table for winter semester 2025/2026:
- Time-table is not available yet
- Time-table for summer semester 2025/2026:
-
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 Wed Thu Fri - The course is a part of the following study plans:
-
- Open Informatics - Computer Engineering 2018 (compulsory course of the specialization)
- Open Informatics - Software Engineering 2018 (compulsory course of the specialization)
- Open Informatics - Computer Engineering 2026 (PS)
- Open Informatics - Software Engineering 2026 (PS)