Sessions 2016

    Workshop: Move-Semantik von A bis Z - Fakten, Fallen und Geheimnisse

    Ein entscheidender Baustein von modernem C++, der mit C++11 eingeführt wurde, ist Move-Semantik. Doch dieses Feature ist nicht ohne. Immer wieder zeigt sich, dass schon einige Grundlagen nicht sauber erklärt werden und ich habe noch keine Schulung erlebt, bei der nicht auch "Experten" über so einige Aspekte und Auswirkungen überrascht waren. Dieser Workshop erklärt Move-Semantik von Grund auf bis hin zu allen wichtigen Details. Ein ganzer Tag dient dazu, alle Aspekten in Ruhe und ausführlich durchzugehen, sodass alle Fakten, Fallen und Konsequenzen verstanden werden können. Inhaltlich reicht der Workshop von einer sorgfältigen Erklärung des Grundmechanismus, über die üblichen Fallen insbesondere bei der Kombination mit anderen Sprachmitteln (z.B. Templates), ungeplanten Seiteneffekte (wie das Schlüsselwort noexcept), bis hin zu Tipps und Tricks für Programmierer von Bibliotheken.
    Thematisiert werden unter anderem:
    - Einführung in die Move-Semantik
    - Die neue "Regel der 5"
    - Neue "Value Categories"
    - Move Semantik und Templates (Perfect Forwarding)
    - auto&&
    - Schlüsselwort noexcept
    - Behandlung von noexcept in der C++ Standardbibliothek
    - Objekte mit reiner Move-Semantik
    - Wenn Scott Meyers und Herb Sutter streiten ...
    Der Workshop richtet sich an alle C++-Programmierer, die DAS zentrale Sprachfeature von modernem C++ verstehen und verwenden wollen. Vorkenntnisse in C++11 sind nicht notwendig.


    Sprecher: Nicolai Josuttis

    Massive Parallelism - C++ and OpenMP Parallel Programming
    Models of Today and Tomorrow

    Why is the world rushing to add Parallelism to base languages when consortiums and companies have been trying to fill that space for years? How is the landscape of Parallelism changing in the various standards, and specifications? I will give an overview as well as a deep dive into what C/C++ is doing to add parallelism such as the proposaed Vector/SIMD model that employs implicit Wavefront, but also how consortiums like OpenMP is pushing forward into the world's first High-level Language support for GPGPU/Accelerators and SIMD programming. Both are necessary to express the Massive Parallelism of tomorrow. GPU/Accelerator computing looks to be here to stay. Whether it is a flash in the pan or not, data parallelism is never going to be stale, especially for high-performance computing. The good news is that Clang 3.7 has OpenMP 3.1 support through a collaborative effort between many institutions, and Clang 3.8 or later will have some form of of support for OpenMP 4 accelerators that targets many different devices, including Intel Xeon Phi and NVIDIA GPUs. Other compilers with high-level accelerator support will be GCC 6. The OpenMP model was designed to fit all possible forms of accelerators. However, in a changing world where discrete GPUs are transitioning into accelerated processing units (APUs), and being combined with various forms of high-bandwidth memory (HBM), is the OpenMP model, or even the OpenACC model, the best model? Should we begin programming future devices with a new programming model that ignores the "legacy" discrete systems and aims for the future? I'll contrast the OpenMP design with the emerging C++ Standard design and how we can merge the design experience from both HPC and consumer devices. As Char of C++ Standard's SG14: Games Dev and Low Latency, I will show where we might be going in five years with an accelerator model that is appropriate for the future with description of Agency, SYCL, HCC, and HPX based on an outline of future goals.

    Sprecher: Michael Wong

    C++17, will it be great or just OK

    C++17 has promised to be a major release from C++11/14. This will be one of the first talk on C++17 showing the major features. There will be Filesystems, Parallelism, and Special Math, as well as a large number of language and library features, but nothing major like the Move semantics in C++11 that changed C++ for every user. Many other features were already baked in through the various Study Groups. C++ has 14 study groups that act as Evolution Committees, promising to keep features coming for years. There will be Co-routines, Concepts, contracts, modules, ranges, reflection, Transactional Memory coming, but none of these major features made it into C++17. Concepts and many other major features were pulled out or not voted in at the last Standard meeting, causing great controversy on the internet. What were the committee thinking and why? And what did we get and will it change C++17 the way C++11 changed C++98/04 into a new language?

    Sprecher: Michael Wong

    Bringing a C/C+ code up to the Cloud

    Take your Native applications to the next level of richness and interactivity with Windows Azure! This session is an opportunity to gain insights from Integration experience and best practices for using native – managed interoperability and application development for existing codebases migration to scalable multitier applications originally developed on Cloud Platforms.. Using C++ code is very important in high performance computing if you have to move compute-intensive algorithms to a Windows Azure cloud-based project, a Worker Role is usually an interesting option. However, there isn't a C++ Worker Role template in Windows Azure. You can choose between C#, Visual Basic and F#, and therefore, you have to work with managed code.

    Sprecher: Cosmin Dumitru

    15 Tipps für deutlich besseren Code

    Mit modernem C++ hat sich die Art C++ zu Programmieren fundamental geändert. Zwar gelten noch die Regeln von klassischem C++, doch modernes C++ besitzt einiges an Verbesserungspotential. In diesem Vortrag stelle ich ihnen Lambda-Funktionen, die automatische Typableitung mit auto, automatische Speicherverwaltung mit Smart Pointern, Multithreading mit Tasks, Textverarbeitung mit reguläre Ausdrücken und einige weitere modernen Feature von C++ vor und zeigen ihnen, wie sie klassisches C++ am besten mit modernem C++ verheiraten. Damit wird ihr Code mächtiger, aber auch einfacher, sicherer und schneller.

    Sprecher: Rainer Grimm

    Microsofts IoT Welt mit C++

    Das Internet der Dinge ist auch in der Microsoft Welt ein großes Thema. Von der Windows 10 IoT Core Edition für Kleinstrechner wie dem Raspberry Pi 2, Windows Virtual Shields for Arduino hin zur Azure Cloud mit IoT spezifischen Diensten und Protokollen ist Microsoft auf allen Ebenen vertreten. Welche Möglichkeiten der C++ Entwickler in dieser Welt der verbundenen Dinge hat erfahren Sie in dieser Session.

    Sprecher: Patrick Getzmann

    Windows WebServices mit C++

    C++ selbst fehlen heute noch immer Klassen, um Anwendungen zu realisieren, die WebServices nutzen. Ein Rückgriff auf das .NET Framework oder Drittanbieter kamen hier häufig zum Einsatz. Doch das muss nicht sein. Microsoft stellt mit den Windows WebServices Funktionen zur Verfügung, über welche die Kommunikation mit WebServices auch mit C++ direkt möglich ist. Lernen Sie die zugehörigen Funktionen kennen und anwenden, um Ihre C++ Anwendungen direkt in eine WebService Landschaft zu integrieren.

    Sprecher: Matthias Wedemeyer

    Parallele Zähler oder Eine Lektion über Hardware-Parallelität und Performance

    Wenn mehrere CPU-Kerne gleichzeitig an einer Aufgabe arbeiten, kommt das Ergebnis nicht automatisch schneller. Die Synchronisierung zwischen verschiedenen Threads kostet nicht nur softwareseitig Rechenzyklen, sondern selbst ein atomic kann viele Wartezyklen zur Folge haben durch die hardwareseitige Synchronisation. Anhand eines einfachen Zählers wird aufgezeigt, welche Auswirkungen die verschiedenen Synchronisationsmechanismen auf die Performanz und Skalierbarkeit auf paralleler Hardware haben.

    Sprecher: Detlef Vollmann

    C++ for the web

    The web is growing fast and online games and other compute-intensive applications expand their user-bases every day. These trends create a growing demand on performance in JavaScript applications. Even though JavaScript has benefited from huge performance improvements in recent years, there is great potential for an even faster web. Browser technologies such as asm.js or Google’s NativeClient enable near-native performance in browsers. More recent efforts led to the specification of WebAssembly, the future vendor-independent standard for native webapps. This talk takes a closer look at Emscripten, a toolchain that transpiles C++ to asm.js. The talk answers questions regarding performance and about the integration with the popular CMake build system.

    Sprecher: Patrick Charrier

    What the heck - Hacking/cracking native code?

    Im Vortrag „What the heck - Hacking/cracking native code?“ stellt Günther Fischer, Reverse Engineering Tools und Methoden vor, die Hacker/Cracker gerne einsetzen um Binärcode zu analysieren und zu modifizieren. Er demonstriert an Hand einfacher Beispiele wie diese Werkzeuge eingesetzt werden und zeigt Abwehrstrategien auf die den Aufwand für Hacker immens erhöhen.
    Agenda:
    - Vorstellung Reverse Engineering Tools und Methoden
    - Demo einiger Techniken an Hand einfacher Beispiele
    - Abwehrstrategien für einen besseren Schutz

    Sprecher: Günther Fischer

    Bringing C++'s full static checking to bare metal special function registers, at zero cost or less!

    Far too many if the bugs I have found over the years in open source, vendor supplied and my own embedded code are trivial and embarrassing, not complex. Typos in masks, corrupting reserved bits, forgetting the volatile keyword or ignoring special cases like clear-on-read or one-to-clear bits. Unit testing would find many of the rest but with typical C tools it comes at a cost. The Kvasir open source library aims to eliminate all these error sources by encoding all available information into a compile time readable form, we also offer a more powerful form of expressing reordering rules, elevating the user to a higher level of abstraction while maintaining the familiar look and feel of a C like API. In short: you will never need volatile or masks again, you cannot corrupt reserved bits and you can unit test all the way down to the hardware.

    Sprecher: Odin Holmes

    Wie schlimm ist Metaprogrammierung heute noch?

    Als innovationshungrige Programmierer durch einen Programmierunfall in Bayern entdeckt haben, dass man in C++ zur Compilezeit rechnen und Programme transformieren kann, hat das einen gewaltigen Hype ausgelöst: gigantische Forschungsprojekte wurden ins Leben gerufen, um selbstoptimierende Software zu entwickeln. Leider hatten diese Softwarepakete auch oft gigantische Compilezeiten von bis zu mehreren Tagen auf parallelen Rechnern. Und die Syntax der Template-Metaprogrammierung hat auch hartgesottene Hacker in den Wahnsinn getrieben. Trotz dieser Ernüchterung ist die Compilerunterstützung mit den Jahren immer besser geworden und die Syntax durch constexpr viel einfacher. Vor diesem Hintergrund wollen wir uns den Fragen widmen: Was können, sollen und was müssen wir zur Compilezeit berechnen? Welche neuen Möglichkeiten bieten constexpr und deren Erweiterungen in C++14? Was müssen wir immer noch klassisch implementieren? Wir werden die unterschiedlichen Techniken der Metaprogrammierung an Beispielen mit einfachen Berechnungungen, Typinformationen, Expression Templates und Meta-Tuning erkunden.

    Sprecher: Peter Gottschling

    Parallelisierung mit modernes C++ in einer grafischen Oberfläche (Nutzung von thread, async, future und filesystem)

    In unser Praxis als Unternehmensberater und Trainer ist uns aufgefallen, dass sehr viele C++ Programmierer in ihren jeweiligen Frameworks, speziell der Oberflächenbibliothek gefangen sind. Dabei spielt es keine Rolle, ob es sich um eine proprietäre Lösung oder eine freizugängliche Bibliothek handelt. Gerade die Verwendung dieser Frameworks führt aber immer wieder zu Stress und sehr hohen Migrationsaufwendungen. Ein Wechsel des Frameworks, und damit des Vendors oder der Plattform ist dann oft nicht möglich. Deshalb werden die meisten C++ Beispiele in Büchern oder auf Veranstaltungen wie dieser immer als normale Konsolenanwendung geliefert, den scheinbar kleinsten Nenner. Das führt dazu, dass der Eindruck hinterlassen wird, man könne in C++ keine modernen Oberflächen umsetzen, oder eben nur mit sehr hohen Aufwand. In dieser Session werden viele Eigenschaften des neuen C++ Standards an dem roten Faden eines konkreten Beispiels gezeigt. Hier spielt die parallele Verarbeitung und der Zugriff auf das Dateisystem eine zentrale Rolle. C++11 hat die Möglichkeiten Probleme zu lösen radikal geändert. Dazu gehören neue Spracheigenschaften und Erweiterungen der Standardbibliothek genauso wie Themen rund um Optimierung von Rückgabewerte und die RValues. In dieser Session werden Lambda- Ausdrücke verwendet und die Aufrufe von Funktionen über die bind- Methode an einen Algorithmus angepasst, so dass die Lösung mit Hilfe von Standardalgorithmen anstatt eigenen Codes in for- Schleifen gezeigt wird. Notwendige Daten werden einfach in einem Tupel abgelegt, anstatt eine eigene Klasse zu nutzen. Und das neue Schlüsselwort auto darf in einer Session über modernes C++ natürlich auch nicht fehlen. Dabei erfolgt die Ausgabe mit Hilfe einer properitären Oberflächenbibliothek des C++Builder X, ohne dass die eigentlichen Kernfunktionalitäten des Beispiels von diesem abhängig werden. Vielmehr erfolgen die Ausgaben über C++ Streams. Jeder C++ Entwickler sollte anschließend in der Lage sein, dieses Beispiel an seine favorisierte Entwicklungsumgebung und das verbundene Framework anzupassen. Mit dieser Session wollen wir also einen Schritt rückwärts gehen, so dass die eigentlichen Frameworks genutzt werden, aber nicht mehr die Anwendung bestimmen. So sind die Kernalgorithmen dieser Session mit den meisten C++14 - Compilern übersetzbar, Wie in den Seminaren der adecc Systemhaus GmbH sollen auch hier die Techniken an einem konkreten Beispiel erklärt werden.

    Sprecher: Volker Hillmann

    MicroServices with Native code, Integrate performance native components to WebServices World

    Using Windows Web Services, you can create applications that communicate easily with a local computer or a remote Web service. Windows Web Services is a native-code implementation of SOAP and provides core network communication by supporting a broad set of the Web services (WS) family of protocols. Windows Web Services is a peer to Windows Communication Foundation (WCF – managed-code Web services), and provides a high-performance subset of WCF functionality. You can also create C/C++ server-side web service end-points. WWSAPI is new with Windows 10 (client) and Windows Server 2012 R2 (server) and also back-ported to all formally supported versions of Windows (client and server). The WWSAPI runtime library (WebServices.dll) is a native-code implementation of WS-* family of protocols for SOAP based web services. Windows Web Services API (WWSAPI) offers C/C++ application programming interface (API) for building SOAP based web services and clients to them.

    Sprecher: Cosmin Dumitru

    Analyse von C++ Anwendungen zur Laufzeit

    The new Visual Studio introduces the ability for developers to create Android Native Activity application as a part of the cross-platform mobile development. Android platform with Android Native Activity introduced the capability to create pure C/C++ applications. The idea is to abstract the detail of Java JNI code away from the developers. Native Activity applications are popular for gaming and graphic intensive (OpenGL) applications. The experience of creating a Native Activity application and walking through the developer lifecycle of editing, building and debugging Native Activity code.

    Sprecher: Matthias Wedemeyer

    Small C++

    Viele aktuelle embedded Systeme haben mehr Rechenleistung und verfügbaren Speicher als typische Workstations vor zehn Jahren. Für solche Systeme ist C++ meistens die Programmiersprache der Wahl. Aber es gibt immer noch Systeme die nur ein paar Kilobyte Speicher für Programm und Daten zur Verfügung haben. Für solch kleine Systeme glauben viele Programmierer immer noch, dass sie zur Programmierung C oder gar Assembler einsetzen müssen. Aber auch auf solch sehr kleinen Systemen kann C++ seine Stärken ausspielen und mit den richtigen Programmiertechniken kann der Overhead (gegenüber C) auf nahezu null reduziert werden. Dieser Vortrag zeigt mit einigen Beispielen für den AVR- 8-Bit-Prozessor, wie sparsam mit C++ programmiert werden kann. Die Beispiele sind auf einem Arduino-Board lauffähig.

    Sprecher: Detlef Vollmann

    (UML) Modell-basiert Code generieren und debuggen - ja es funktioniert wirklich

    Modell-basierte Entwicklung ist in der Embedded Industrie State-of-the-Art, mit diesen Methoden lassen sich aber jegliche Softwareprojekte effizienter umsetzten. Anhand eines konkreten Beispiels (Demo) wird gezeigt wie man aus einem UML Modellen lauffähigen Code erzeugt. Dieser wird dann zur Laufzeit mit einem grafischen Debugger untersucht. Es wird dabei nicht nur Code für Klassenrümpfe sondern auch verhalten aus Zustandsautomaten und Aktivitätsdiagrammen generiert. Dieses Vorgehen hat viele Vorteile unteranderem das die Doku dem Code entspricht – aber auch noch viele andere.
    Lassen Sie sich überraschen!

    Sprecher: Daniel Siegl

    Das C++ Speichermodell/Gallileo

    Mit dem neuen C++11-Standard ist sich C++ zum ersten Mal der Existenz von Threads bewusst. Elementare Grundlage für die Multithreading-Schnittstelle ist das C++-Speichermodell. Das C++-Speichermodell lehnt sich an das von Java an, geht aber ein paar Schritte weiter. Das C++-Speichermodell gibt Antworten auf die Fragen.
    * Was sind atomare Daten und atomare Operationen?
    * Welche teilweise Ordnung von Operationen ist gewährleistet?
    * Wann sind Operationen auf Daten sichtbar?
    Diese Vorstellung wird einen Überblick über das C++-Speichermodell geben. Unsere Tour durch die Untiefen des C++-Speichermodells beginnt bei den atomaren Variablen und endet bei deren Synchronisations- und Ordnungsbedingungen. Mit dem Default-Verhalten der sequenziellen Konsistenz für atomare Operationen, aber auch der Acquire-Release-Semantik und die Relaxed-Semantik betreten wir anspruchsvolles Terrain.

    Sprecher: Rainer Grimm

    Generalität vs. Performance?-Design der Boost.odeint Bibiliothek

    Das Entwickeln einer numerischen Bibliothek stellt besondere Anforderungen an Design und Implementierung. Auf der einen Seite will man eine möglichst hohe Generalität und Flexibilität erreichen um alle denkbaren Anwendungsfälle abzudecken. Auf der anderen Seite muss die Performance auf dem Niveau von speziellem, handoptimiertem Code bleiben. In diesem Vortrag wird gezeigt, wie dieser Spagat in der Boost.odeint Bibliothek umgesetzt ist. Grundlegende Strategie ist die Identifizierung der mathematischen Konzepte und deren Abbildung in separate Code-Strukturen. Dieser hochmodulare Aufbau erlaubt es, die Bibliothek auf einfache Weise zu erweitern und an spezielle Anforderungen anzupassen (z.B. OpenMP, MPI, CUDA, OpenCL, SIMD). Eine derartig allgemeine Implementierung hat desweiteren den Vorteil, problemlos mit anderen modernen numerischen Bibliotheken zu interagieren (Eigen, MTL, VexCL, Boost.Multiprecision). Im Vortrag werden zuerst die mathematischen Konzepte diskutiert und dann deren effiziente Implementierung vorgestellt. Dabei wird auch besonderer Augenmerk auf die verwendeten Programmiertechniken (generische Programmierung, Template Metaprogramming, konzeptgesteuerte Programmierung) gelegt.

    Sprecher: Mario Mulansky

    Shared Pointer - Vorteile und deren Preis

    Für Referenz-Semantik gibt es seit C++11 (und schon vorher in boost) Shared-Pointer. Auf den ersten Blick sieht das nach einem einfachen hilfreichen Sprachmittel aus, das man problemlos für Referenz-Semantik oder Garbage-Collection verwenden kann. Doch Vorsicht! Häufig ist nicht oder nur teilweise bekannt, welche Nachteile und Probleme die Verwendung von Shared-Pointern mit sich bringen kann. Die Verwaltung der Besitzer, die Verwendung in mehreren Threads und sogar die Verwendung von make_shared(), die eigentlich nur Vorteile bringen soll, kann für Programme so kontraproduktiv sein, dass in der Praxis nicht selten über die richtige Verwendung von Shared-Pointern und sogar Alternativen nachgedacht werden muss.

    Sprecher: Nicolai Josuttis


Diese Liste kann jederzeit vor der Konferenz ergänzt bzw. verändert werden.