Subject description - B4M36ESW

Summary of Study | Summary of Branches | All Subject Groups | All Subjects | List of Roles | Explanatory Notes               Instructions
B4M36ESW Effective Software
Roles:PO Extent of teaching:2P+2C
Department:13136 Language of teaching:CS
Guarantors:Šišlák D. Completion:Z,ZK
Lecturers:Sojka M., Šišlák D. Credits:6
Tutors:Cuchý M., Matějka J., Sojka M., Šišlák D. Semester:L


Within the course of Efficient software you will get familiar with the area of software and algorithm optimization under limited resources. The course is focused on the efficient usage of modern hardware architectures - multi-core and multi-processor systems with shared memory. Students will practically implmenet and use presented techniques in C and Java. Main topics are: code optimization, effective data structures and processor cache usage, data structures in multi-threaded applications and implementation of efficient network servers.

Course outlines:

1. Introduction, modern computer architecture, compiler, profiling
2. Virtual machine, byte-code, (de-)compilers, disassembler, profiling
3. Benchmarking, measurements, statistics
4. Scalable synchronization
5. Data races, synchronization, atomic operations, non-blocking algorithms
6. Non-blocking I/O, C10K, efficient networking
7. Data structure serialization
8. Memory, caches, allocators
9. JVM - Memory analysis, data structures, collections for performance
10. JVM - Object allocation, bloom filters, references, effective caching
11. Memory Management in JVM - Memory Layout, Garbage Collectors
12. Virtualization (IOMMU, SR-IOV, PCI pass-through, virtio, .)
13. C program compilation and execution

Exercises outline:


[1] MIT: Performance-engineering-of-software-systems
[2] Oaks, S.: Java Performance: The Definitive Guide. O'Reilly, USA 2014.
[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)


background knowledge in area of Computer architecture, C and Java programming languages


Subject is included into these academic programs:

Program Branch Role Recommended semester
MPOI4_2018 Computer Engineering PO 2
MPOI4_2016 Computer Engineering PO 2
MPOI6_2016 Software Engineering PO 2
MPOI6_2018 Software Engineering PO 2

Page updated 10.7.2020 14:51:54, semester: Z,L/2020-1, L/2019-20, Send comments about the content to the Administrators of the Academic Programs Proposal and Realization: I. Halaška (K336), J. Novák (K336)