Konferenz Session Details

Keynote: Live Compiler Development with Cross-Platform Tooling

Sy Brand

Can a cross-platform compiler be written from scratch, live on stage, in an hour? It can with the right tools!
In this session I will talk about many challenges in cross-platform C++ development and how tools can help: what options do I have if my production environment is different than my dev box? How can I efficiently build and debug CMake projects? How can I easily find and acquire open sourced libraries? Come to see what Visual Studio 2019, CMake, WSL2, vcpkg and more have to offer to make cross-platform C++ development easier.
Even if you're not using these tools, there's still a lot to make you think about how your tools can help you in your development, so come along!

C++ Modules - eine Einführung

Daniela Engert

Nach 10 Jahren Arbeit an deren Spezifikation sind Modules nun Teil von C++20. Der Vortrag soll die folgenden Fragen beantworten helfen:
• Kurz gesagt, was sind Modules überhaupt?
• Wie sieht ein Modul aus? Was sind seine Grundkonzepte?
• Gibt es Fallstricke bei der Verwendung von Modules?
• Welchen Nutzen haben Modules für mich oder mein Team? Oder für meine Kunde?
• Wie ist der aktuelle Stand der Implementierung in den Compilern?

Sind sie ausgereift und robust genug für den täglichen Gebrauch von Modules?
• Was müssen Entwickler wissen, wenn sie mit der Erstellung ihres ersten Modules beginnen wollen?
• Lohnt es sich, den ausgetretenen Pfad zu verlassen und Modules in Codebases einzuführen?

C++17-Features trickreich kombinieren

Nicolai Josuttis

C++17 ist ein Sammelsurium von vielen kleinen Verbesserungen an der Sprache und der Bibliothek von C++. Wie mächtig dieser Umstieg ist, merkt man aber erst, wenn man all die neuen Features miteinander kombiniert.
Dieser Vortrag zeigt an einigen konkreten Beispielen auf, wie die Kombination von C++17-Features zu einer bemerkenswert verbesserten Programmierung führen kann. Er weist aber gleichzeitig auch auf die ein oder andere damit verbundene Gefahr hin.

Say It Like You Mean It - Semantics Concepts for Behaviour Driven Development

Tobias Fuchs

Code cannot express its intent, except for inline documentation which cannot be validated. According to "The Mythical Man Month" and our own experience, the hard part of building software is specification, design, and testing. These aspects are the crucial foundation of robust software because they formulate the effective behaviour and purpose of the implementation. For device drivers, this behaviour affects the specification of the controlled hardware as well as higher-level logic in software. When hardware and software are developed in parallel, keeping specifications, implementation and tests synchronized is a cumbersome challenge. In this talk we present semantics concepts for C++ that unify these aspects in human-readable code. From semantics definitions, hardware mocks with specified behaviour can be derived for tests, keeping tested and specified behaviour synchronized.

Das Ende der Programmier-Paradigmen

Klaus Iglberger

Trotz der Fortschritte, die C++ in den letzten 10 Jahren gemacht hat, gibt es nach wie vor eine starke Tendenz, Software nach der Lehre von vor 20 Jahren zu entwickeln. Obwohl dabei die Features der neuen C++ Standards zum Einsatz kommen, haben die meisten Software Designs noch nicht die Philosophie des modernen C++ übernommen. In diesem Vortrag werde ich mittels Beispielen demonstrieren, dass modernes C++ mehr ist als nur die Verwendung von neuen Features. Ich werde klassische Lösungen basierend auf Design Patterns mit modernen Ansätzen im Hinblick auf Kopplung, Benutzerfreundlichkeit, Wartbarkeit und Performance vergleichen. Dabei werden sich die modernen Ansätze als überlegen erweisen. Zusätzlich werde ich zeigen, dass diese modernen Ansätze nicht mehr so einfach einem der klassischen Programmierparadigmen zugeordnet werden können. Ist das das Ende der klassischen Paradigmen?

Dynamische Instrumentierung von (un)managed Code zur Data-Race Erkennung

Felix Mössbauer

Der Vortrag gibt einen Überblick über sowohl theoretische als auch praktische Aspekte bezüglich der Implementierung eines Data-Race Erkennungs Tools. Nach der Diskussion gängiger Algorithmen wie „Lockset" und „Happened-Before" werden praktische Aspekte der dynamischen (Laufzeit) Instrumentierung behandelt. Dies umfasst Techniken die Instruktionen einer Anwendung zur Laufzeit zu verändern, sowie Funktionsaufrufe abzufangen. Die behandelten Aspekte werden dann im Rahmen der Analyze einer C++ Applikation unter Verwendung des OSS Tools DRace vorgeführt. Schlussendlich werden Techniken zur Reduzierung des Laufzeit-Overheads vorgestellt und an Real-World Anwendungen evaluiert.

C++17 pmr Allokatoren und STL Container in Embedded Anwendungen

Richard Kaiser

In der Voreinstellung reservieren die Container der C++ Standardbibliothek ihren Speicher mit new und geben ihn mit delete wieder frei. Diese Aufrufe haben keine determinierten Ausführungszeiten und können zu einer Speicherfragmentierung führen.
In vielen embedded Anwendungen kann das nicht toleriert werden. Die AUTOSAR Regel A18-5-5 verlangt, dass Speicherverwaltungsfunktionen die folgenden Anforderungen erfüllen müssen:
(a) deterministic behavior resulting with the existence of worst-case execution time,
(b) avoiding memory fragmentation,
(c) avoid running out of memory,
(d) avoiding mismatched allocations or deallocations,
(e) no dependence on non-deterministic calls to kernel.
Deshalb dürfen die Container der C++ Standardbibliothek in solchen Anwendungen nicht verwendet werden. Mit C++17 kann man STL Container aber doch auch in vielen embedded Anwendungen verwenden. Die neuen Allokatoren aus dem namespace std::pmr (polymorphic memory resources) können so verwendet werden, dass die Anforderungen (a), (b) und (e) erfüllt werden. Da (d) für die STL erfüllt ist, können die Container der C++ Standardbibliothek mit diesen pmr Allokatoren verwendet werden, wenn man (c) zusichern kann. Das ist für viele (aber nicht alle) embedded Anwendungen möglich. Damit kann man das erste Mal in der Geschichte von C++ die Vorteile der STL Container in einem großen Teil der embedded Welt nutzen.

QML für eingebettete Systeme: Beste Praxis und Zukunftsaussichten

Frank Mertens

Die QML führte ein neues Konzept zur Kodierung von erstaunlich reichhaltigen interaktiven Benutzeroberflächen ein: die Eigenschaftsbindungen. Mit dem Aufkommen von Qt 6 können die in QML-Anwendungen verwendeten Konzepte direkt in C++ angewendet werden. Aber QML wird auch in den kommenden Jahren die primäre Benutzeroberflächensprache von Qt bleiben. Ihre einfache Anwendung, geringe Lernkurve und dennoch relativ hohe Leistung machen sie zu einer idealen Sprache für Front-End-Entwickler im Umfeld eingebetteter Systeme.

Tour of Windows Defenses

T. Roy

The Windows PC continues to be the primary productivity device in enterprises small and large alike. Due to its ubiquity, the Windows desktop remains the preferred platform for attackers to gain an initial foothold into an organization. Microsoft has been busy adding defenses to the platform as the security posture of the Windows PC remains of paramount importance to organizations worldwide. This talk will take you through a whirlwind tour of the defenses that have been added to Windows from Windows XP all the way through to the latest version of Windows 10 to improve the security of applications. In this presentation you will learn about the meaning of acronyms such as DEP, ASLR, ACG, ASR, CFG, CET, etc.

Schöne neue Welt der Konfigurationen

Paul Targosz

Jeder kennt es, Software wird geschrieben und besteht aus mehreren Komponenten, die verbunden werden. Alles muss definiert und an Kundenwünschen angepasst werden, egal ob Desktopanwendungen mit Firmenbranding oder mit Mikrocontrollern angesteuerte Sensorik. Softwareentwickler müssen deswegen eine Vielzahl an Konfigurationen implementieren. Wenn Performanceoptimierung, Wartbarkeit und die Kompilierdauer sich gegenseitig ausspielen, wird es kompliziert und dann kommen noch industrielle Normen, verfügbare Compiler und zugelassene C++-Standards hinzu. Dieser Talk zeigt einen Überblick über mehrere Möglichkeiten SW zu konfigurieren und welche Konsequenzen diese Entscheidungen mit sich führen können.

Eine Einführung in die Parallelisierung und Optimierung Tiefer Neuronaler Netze

Georg Zitzlsberger

Tiefe Neuronale Netze (engl.: Deep Neural Networks - DNNs) erleben dank großer Datenmengen und leistungsfähiger Hardware seit fast zehn Jahren ein Revival. Sie sind heute in vielen Bereichen im Einsatz oder vielversprechende Kandidaten für zukünftige Entwicklungen. Dabei haben sie sich auch jenseits der reinen Bild- oder Signalverarbeitung behauptet und gelten auch in traditionellen Domänen wie dem High Performance Computing (HPC) als aussichtsreiche Technologien.

Wir geben eine Einführung in die Funktionsweise der DNNs und deren Training im Hinblick auf die verschiedenen Parallelisierungsansätze, wie Daten-, Modell- und Hybrid-Parallelisierung. Da das Training von DNNs ein zeitintensiver Prozess ist, beschäftigen wir uns auch mit der Skalierung über mehrere Rechenknoten und -beschleuniger (wie GPUs) hinweg. Wir zeigen diese Parallelisierungen anhand der bekanntesten und am meisten eingesetzten Frameworks, wie TensorFlow, Caffe und PyTorch.

Die Inferenz, also die Verwendung eines eingelernten DNNs, stellt andere Anforderungen an die Ausführung als das Training. Wir gehen daher auch auf Optimierungen für die Inferenz ein, die mittels Nvidia TensorRT oder Intel Deep Learning Deployment Toolkit (OpenVino) möglich sind. Wir berücksichtigen eine breite Palette verschiedener Zielarchitekturen wie CPUs, GPUs, FPGAs, VPUs etc.

Vorkenntnisse
  * Der Vortrag richtet sich an angehende Entwickler und Anwender von DNNs. Lernziele
  * Entwickler erfahren State-of-the-art-Ansätze zur Parallelisierung des Trainings Tiefer Neuronaler Netze.   * Anwender finden in den Optimierungswerkzeugen von Nvidia und Intel Hilfestellung zum Vorbereiten eingelernter DNN auf verschiedene Zielarchitekturen.

Visual Studio Code mit Native(C++) Entwicklung und Package Management

Cosmin Dumitru

In dieser Vortrag wird gezeigt wie mit neue Open Source Editor – Visual Studio Code, C++ Entwickler können multi- Plattform Applikationen entwickeln und liefern on premise sowie on Cloud mit den Mitteln und Möglichkeiten des aktuellen C++ Standards. Lernen Sie auch wie DevOp Automation und Testing in mit Docker Containers eine groß Produktivität Vorteil bringen kann durch ganze ALM /DevOps Prozess für Native Applikationen.



Änderungen vorbehalten