Learn how to write efficient, maintainable C++ code for data-intensive applications in this hands-on course. Key application areas include scientific simulation software, statistical data processing, and computer graphics.
You’ll begin by exploring how modern C++ supports high-efficiency programming and review the principles of a central piece of hardware in data-intensive applications: computer memory.
Next, the course shifts to software design. You’ll examine performance shortcomings of traditional object-oriented programming and dive into data-oriented perspective, which improves performance by structuring code around the data itself. You’ll learn how this paradigm overcomes bottlenecks and leads to more scalable, high-performance solutions.
Finally, you’ll apply these principles to modern multi-threaded systems. Through hands-on experience you will learn to use C++'s built-in parallel features to target both multi-core CPUs and GPUs.
To follow this MOOC, you should be familiar with the fundamentals of the C++ language. In this first module however, you will find a refresher on the most important concepts needed to complete the course. You will (re)discover variable types (stack variables, references, smart pointers), containers and algorithms, classes and polymorphism. If you already master these notions but your knowledge predates the C++11 standard, we still encourage you to follow this module for up-to-date recommendations on the efficient use of C++. In particular, have a look at Lesson 4 if you are not yet familiar with the notion of ranges in C++20 and later versions.
Das ist alles enthalten
17 Videos1 Lektüre11 Aufgaben
Infos zu Modulinhalt anzeigen
17 Videos•Insgesamt 119 Minuten
MOOC trailer•2 Minuten
Welcome to this MOOC•4 Minuten
Arrays, vectors, and initialization•8 Minuten
Scope of variables and memory allocation•10 Minuten
Transfer of data from and into a function•11 Minuten
More about containers•11 Minuten
Algorithms and lambda functions•11 Minuten
Ranges: an introduction•6 Minuten
Ranges: more data-oriented examples •5 Minuten
Views•11 Minuten
Smart pointers in C++ : basic concepts•8 Minuten
Smart pointers in C++ : vectors of smart pointers•5 Minuten
Structures and classes : Creation and initialization•9 Minuten
Structures and classes : function objects•4 Minuten
Polymorphic classes : general ideas•7 Minuten
Polymorphic classes : abstract and derived classes at work•4 Minuten
Let's wrap up•1 Minute
1 Lektüre•Insgesamt 30 Minuten
📢 Important preliminary information: Assessments and subtitles•30 Minuten
Scope of variables and memory allocation•5 Minuten
Transfer of data from and into a function•10 Minuten
Containers•10 Minuten
Algorithms and lambda functions•8 Minuten
Ranges•8 Minuten
Views•8 Minuten
Smart pointers•6 Minuten
Structures and classes•6 Minuten
Polymorphic classes•15 Minuten
Compile-time code execution
Modul 2•4 Stunden abzuschließen
Moduldetails
Part of the work of processing data efficiently consists in reducing the amount of computations and the complexity of the execution path. A complex execution path is often implemented to express design choices in the organization of software components. In the form of a compile-time execution framework, C++ offers a way to offload this complexity to the compilation stage and keep the execution environment simple and efficient.
Das ist alles enthalten
12 Videos1 Lektüre10 Aufgaben
Infos zu Modulinhalt anzeigen
12 Videos•Insgesamt 98 Minuten
Presentation of the module•3 Minuten
Introduction to templates•11 Minuten
Abbreviated function templates•9 Minuten
Template specialization and integer arguments•9 Minuten
Constant expressions•12 Minuten
Compile-time loops•6 Minuten
Compile-time polymorphism using templates•10 Minuten
Loop unrolling•9 Minuten
Variants and visitors•8 Minuten
Runtime polymorphism•11 Minuten
Interface-based development•8 Minuten
Let's wrap up•2 Minuten
1 Lektüre•Insgesamt 10 Minuten
Variants and Visitors (complement)•10 Minuten
10 Aufgaben•Insgesamt 127 Minuten
Using templates•6 Minuten
Using abbreviated syntax for function templates•6 Minuten
Integers as template arguments•20 Minuten
Which expressions can be evaluated at compile-time?•6 Minuten
Compile-time polymorphism using templates•15 Minuten
Loop unrolling•7 Minuten
Implement the variant-visitor strategy•15 Minuten
From dynamic to variant-based polymorphism•15 Minuten
Extend a library with templated polymorphism•7 Minuten
Final quiz•30 Minuten
Memory
Modul 3•5 Stunden abzuschließen
Moduldetails
Memory is one of the most critical resources of a computing platform. In this module, you will learn how memory is used in the C++ language and how memory access works on different types of machines. You will translate this knowledge into code that is at the same time clearly structured and efficient.
Das ist alles enthalten
15 Videos1 Lektüre13 Aufgaben
Infos zu Modulinhalt anzeigen
15 Videos•Insgesamt 127 Minuten
Presentation of the module•3 Minuten
Memory organization•11 Minuten
Virtual memory•9 Minuten
Memory management unit•6 Minuten
Memory latency•11 Minuten
Latency vs bandwidth•8 Minuten
Cache memory•11 Minuten
Cache latency in practice•11 Minuten
Data prefetching•13 Minuten
Vector instructions•14 Minuten
RAM vs CPU•9 Minuten
Definitions: FLOPS and AI•5 Minuten
Roofline performance model•10 Minuten
Roofline performance model in practice•3 Minuten
Let's wrap up•3 Minuten
1 Lektüre•Insgesamt 10 Minuten
Memory size comparison•10 Minuten
13 Aufgaben•Insgesamt 170 Minuten
Memory organization•10 Minuten
Virtual memory•10 Minuten
Memory management unit•5 Minuten
Memory latency•10 Minuten
Latency vs bandwidth•15 Minuten
Cache memory•10 Minuten
Memory size comparison•10 Minuten
Cache latency in practice•10 Minuten
Data prefetching•15 Minuten
Vector instructions•15 Minuten
Performance metrics•15 Minuten
Roofline performance model•15 Minuten
Final quiz•30 Minuten
Data-oriented design
Modul 4•2 Stunden abzuschließen
Moduldetails
Learn to think about your program in a way that puts the critical hardware resource, memory, in the center of your thoughts. Apply these principles to discrete-event systems, a problem solving strategy with applications in all applied areas of science. Understand that data-oriented programming is not opposed to object-oriented programming but rather offers a way to model your objects in a way that accounts for your data structure, your algorithms, and your hardware.
Das ist alles enthalten
8 Videos9 Aufgaben
Infos zu Modulinhalt anzeigen
8 Videos•Insgesamt 40 Minuten
Presentation of the module•2 Minuten
Linear memory layout•6 Minuten
Array of Structures vs Structure of Arrays•6 Minuten
Complex Agent Based Model•6 Minuten
From Object Oriented to Data Oriented•5 Minuten
Scalable molecular dynamics simulation•5 Minuten
Data oriented solution•8 Minuten
Let's wrap up•2 Minuten
9 Aufgaben•Insgesamt 103 Minuten
Memory Layout Estimation•4 Minuten
Recognizing SoA and AoS•6 Minuten
Reading the example code•15 Minuten
Object modeling vs. data modeling•10 Minuten
Code transformation•15 Minuten
Efficiency analysis•25 Minuten
What data layout?•3 Minuten
Implementing the example•5 Minuten
Final quiz•20 Minuten
Using Parallel algorithms
Modul 5•4 Stunden abzuschließen
Moduldetails
This module introduces you to an amazing feature available in the C++17 and onward: the ability to parallelize an algorithm with almost no effort, using C++ parallel algorithms. You will learn that you can gain a manifold speedup with simple changes by running your code on multi-core CPUs and on GPUs. You will dive once more into the working principles of computer memories to understand how to reach substantial performance improvements, and you will link the concepts of data-oriented programming to efficient paralellism.
Das ist alles enthalten
15 Videos11 Aufgaben
Infos zu Modulinhalt anzeigen
15 Videos•Insgesamt 103 Minuten
Presentation of the module•6 Minuten
C++ parallel algorithms•10 Minuten
Running custom algorithms in parallel•6 Minuten
Running custom algorithms in parallel•4 Minuten
Index-based container traversal•8 Minuten
Parallel Laplace equation•7 Minuten
CPU threads•9 Minuten
GPU threads•6 Minuten
Concurrency: undefined behavior•9 Minuten
Hardware principles of multi-core CPUs•6 Minuten
False sharing•7 Minuten
Heterogeneous platforms•7 Minuten
GPU programming limitations•11 Minuten
Let's wrap up•2 Minuten
Thank you and farewell•3 Minuten
11 Aufgaben•Insgesamt 140 Minuten
Parallelize a C++ code•6 Minuten
Choosing algorithms for parallelization•15 Minuten
Founded in 1559, the University of Geneva (UNIGE) is one of Europe's leading universities. Devoted to research, education and dialogue, the UNIGE shares the international calling of its host city, Geneva, a centre of international and multicultural activities with a venerable cosmopolitan tradition.
When will I have access to the lectures and assignments?
To access the course materials, assignments and to earn a Certificate, you will need to purchase the Certificate experience when you enroll in a course. You can try a Free Trial instead, or apply for Financial Aid. The course may offer 'Full Course, No Certificate' instead. This option lets you see all course materials, submit required assessments, and get a final grade. This also means that you will not be able to purchase a Certificate experience.
What will I get if I purchase the Certificate?
When you purchase a Certificate you get access to all course materials, including graded assignments. Upon completing the course, your electronic Certificate will be added to your Accomplishments page - from there, you can print your Certificate or add it to your LinkedIn profile.
Is financial aid available?
Yes. In select learning programs, you can apply for financial aid or a scholarship if you can’t afford the enrollment fee. If fin aid or scholarship is available for your learning program selection, you’ll find a link to apply on the description page.