background

Sessions 2015

    Workshop: Einführung in die Parallelprogrammierung mit OpenMP

    Mit dem neuen OpenMP-Standard Version 4.0 sind wieder neue Möglichkeiten in die sehr ausgereifte Parallelisierungsbibliothek eingebaut worden. In diesem Workshop lernen Sie zunächst die Grundlagen der OpenMP-Programmierung. Es werden Schleifen und Code-Bereiche parallelisiert, Sie werden den Scheduler kennen lernen und die Sichtbarkeit von Variablen diskutieren. Danach wird das Task-Konzept von OpenMP erarbeitet und an Beispielen vertieft. Schließlich werden die neuen Möglichkeiten der Version 4 vorgestellt. Natürlich wird in diesem Seminar auch viel über Performance oder „Speedups“ gesprochen und es werden in vielen Fällen unterschiedliche Wege der Implementierung besprochen.

    Voraussetzungen: C/C++ oder C++/CLI
    Sprecher: Bernd Marquardt

    Workshop: Windows Internals Tour with SysInternals Tools

    The SysInternals Tools are widely used by developers, system administrators and security researchers alike to peek into the internals of the Windows operating system. However, to make sense of the wealth of information displayed by these tools one needs to have a good understanding of how the system works internally. Join us for intensive day long tour of Windows Internals with SysInternals tools and where you will learn the internals of Windows, understand the information displayed by the SysInternals tools, use that information to determine the state and health of the system, identify common problem symptoms and troubleshoot common failures. After attending this course you will become a power user of the SysInternals Tools. Attendees must have good working knowledge of Windows to get maximum benefit from this course.

    Sprecher: T. Roy

    GPU-Programmierungsverfahren im Vergleich

    Es gibt verschiedene Möglichkeiten um GPGPU’s zum Rechnen zu bringen. Alle Verfahren und Bibliotheken haben ihre Vor- und Nachteile. Nach einer kurzen Einführung in das Thema lernen Sie in dieser Session alle wichtigen Verfahren und ihre Grundlagen in der Programmierung kennen. Die einzelnen Vorgehensweisen werden mit Code-Beispielen vorgestellt und diskutiert. Programmieraufwand, Kosten und Performance-Steigerungen werden ebenfalls verglichen.

    Sprecher: Bernd Marquardt

    Performance-Optimierung bei Datenparallelität mit großen Datenmengen

    Irgendwann ist der Cache der CPU voll – und dann wird die Anwendung plötzlich langsamer! Was kann man tun, um hier nicht in die Performance-Falle zu laufen. An Hand mehrere Beispielprogramme wird gezeigt, wie das Problem erkannt werden kann und welche Vorgehensweisen benutzt werden können, um trotzdem eine möglichst hohe Performance bei der Berechnung zu erzielen.

    Sprecher: Bernd Marquardt

    Exploiting Software Vulnerabilities

    This highly-technical and demo-filled presentation will provide a glimpse into the world of offensive security research where vulnerabilities in software are exploited to take control of systems, install malware and steal data. This talk will cover the end to end modus operandi of software exploitation including reverse engineering, input fuzzing, remote code execution, exploit development and data exfiltration. The purpose of the talk is not to drop zero day exploits but rather showcase the tools, techniques and procedures (TTPs) that are used to exploit common vulnerabilities.

    Sprecher: T. Roy

    C++11 library components to make a programming scientist happy

    This talk presents a survey over components of the C++11 standard library which facilitate the life of a programming scientist. It will provide a gentle introduction to the random number generator and evolve this to a complete application: the stochastic simulation of share price development. The new meta-programming features helps designing our programs more clearly. For instance, we can (better) deal with the limitation of complex numbers that types cannot mixed. Tuples help us to aim for a more functional and structured programming style in the presence of multiple results.

    Sprecher: Peter Gottschling

    Legacy -> Fluent Code

    Manche Teams schreiben Code so, dass er die zugrundeliegende Intention nicht ausdrückt. C++ fehlten bisher Sprachmittel und Bibliotheken dies einfach zu bewerkstelligen. Oft werden deshalb Implementierungsdetails im Code sichtbar, welche die dahinterliegende Absicht verschleiern. Welche Mechanismen bietet C++ heutzutage, Code so zu transformieren, dass er kürzer wird, unsere Intention besser ausdrückt und wartungsfreundlicher ist. Um dies zu veranschaulichen, werden wir eine vorhandene Codebasis unter Test und in eine Form bringen die diesen Ansprüchen gerecht wird.

    Sprecher: Holger Kolb

    C++ 11/14 in der Praxis

    Mit C++ 11 bzw. C++ 14 haben viele Veränderungen in C++ Einzug gehalten, die das Entwickeln von Anwendungen mit C++ nahezu revolutionieren. Von einfacherem Code bis hin zu sicherem und stabilerem Code führen die Änderungen im Sprachumfang. Vielfach sind die Neuerungen bereits vorgestellt wurden, diese Session möchte nun zeigen, wie Sie sie verwenden. Kommen Sie mit auf eine Reise in modernen C++ Code von heute und sehen Sie an praktischen Beispielen, welche Änderungen am Code sich durch C++ bzw. C++ 14 ergeben und welchen Vorteil Ihr Code und mit Ihre Anwendungen mitnehmen.

    Sprecher: Matthias Wedemeyer

    Debuggen mit Speicherdumps

    Stürzt Ihre Anwendung beim Kunden immer mal wieder ab, ohne dass Sie den Fehler reproduzieren können? Oder bringt Ihre Anwendung Meldungen zu Tage, die Sie ebenfalls in Ihren Tests in vergleichbaren Situationen nicht zu Gesicht bekommen? Dann ist es Zeit, über Speicherdumps nachzudenken. Sie beinhalten vollständigen Zustand Ihrer Anwendung zum Zeitpunkt ihrer Erstellung: Threads, Heaps, Stacks und auf alles haben Sie Zugriff. Lernen Sie in dieser Session, wie Sie Speicherdumps direkt aus einer Anwendung heraus erstellen und wie Sie diese mit dem Visual Studio auswerten. Ganz neben bei tauchen Sie dabei in die Anwendung ab und lernen, wie Sie auch ohne Symbolinformationen mit einem Speicherdump die Ursache eines Fehlers ermitteln können.

    Sprecher: Matthias Wedemeyer

    C++ Dependency Management 2.0

    Im alltäglichen Einsatz verwenden wir eine potentiell steigende Anzahl an immer größeren Bibliotheken. Diese helfen uns schneller und effizienter unsere Ziele zu erreichen, werden ständig gewartet und ersparen nebenbei auch jede Menge Fehlerlösungs- und Dokumentationsaufwand. Gleichzeitig bedeuten sie jedoch einen unmittelbar höheren Aufwand für das Build-und-Dependency Management. Wie bekommt man dieses Problem in den Griff? In der letzten Dekade hat das Build-System CMake diesbezüglich große Fortschritte bei der schnellen und alltäglichen Wiederverwerndbarkeit von C++ Code bewirkt. So fördert zum Beispiel die Unabhängigkeit von spezifischen Build-Systemen zusammen mit Git und innovativen Hostern wie GitHub insbesondere die Entstehung und Verwendung von Open-Source Software. Wie sieht die Zukunft aus? Dependency Manager wie biicode zeigen einen noch komfortableren Weg auf, mit eigenem oder Drittanbieter-Code zu arbeiten. Download, Build und Einbindung von Dependencies wird damit so einfach wie das Installieren einer App aus dem App-Shop. Doch welche Vor- und Nachteile hat dieses System? Welche Alternativen gibt es?

    Sprecher: Patrick Charrier

    Multithreading, richtig gemacht?

    Multithreading in modernem C++ ist hart. Undefined Variables, Deadlocks, Race Conditons, Spurious Wakeups, Lost Wakeups, das Double Checked Locking Pattern ... . Und zu allem kommt noch das neue Speichermodell, das das Leben eines Programmierers auch nicht wirklich einfacher macht. Die Liste der Dinge, die schief gehen können, ist erschreckend lang. In dieser Tour durch das moderne C++ werde ich zeigen, was in Multithreading Programmen schief gehen kann und wie sich dies vermeiden lässt. Die Tour wird an der Oberfläche starten und immer weiter in die Tiefe vordringen.

    Sprecher: Rainer Grimm

    Programmierung zur Compilezeit

    Was haben klassische Template Metaprogrammierung, die neue Funktionen der Type-Traits Bibliothek und constexpr Funktionen gemein? Sie werden alle zur Compilezeit ausgeführt. Damit paaren sie höhere Performanz mit erweiterter Funktionalität. Höhere Performanz, da Berechnung zur Lauf- auf die Compilezeit verlegt werden. Erweiterte Funktionalität, da Programmierung zur Compilezeit den resultierende C++-Sourcecode modifizieren kann. Doch wie funktioniert die ganze Magie? Diesen Blick unter die Decke wird der Vortrag liefern, damit Sie Programmierung zur Compilezeit besser verstehen und einsetzen können.

    Sprecher: Rainer Grimm

    Connecting native C/C++ code and Web Services using Windows Web Services

    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 7 (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

    Native cross platform mobile development

    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: Cosmin Dumitru

    Homogene Entwicklung mit C/C++ für Heterogene Architekturen

    Die Verwendung von sogenannten „Rechenbeschleunigern“ ist schon seit einiger Zeit kein Neuland mehr. Sie werden gerne genutzt wenn die Rechenleistung einer CPU nicht ausreicht oder diese für gewisse Aufgaben nicht optimiert ist. Ihre Anwendung findet mittlerweile in einem weiten Bereich statt, der beginnend bei Embedded, über Client-Computing bis in die HPC-Domäne reicht. Ein inhärentes Problem liegt diesen aber zugrunde: die heterogenen Architekturen. Diese erfordern unterschiedliche Entwicklungsansätze, -werkzeuge und –sprachen. Das schränkt nicht zuletzt die Attraktivität ein, sondern erfordert auch höhere Entwicklungskosten. Doch es geht auch anders! Lernen Sie Technologien kennen, mit der Prämisse eine möglichst homogene Entwicklung mittels C/C++ für integrierte Graphik, CPU und dedizierte „Rechenbeschleuniger“ zu ermöglichen. Als Beispiele werden integrierte GPUs mit Intel® Graphics Technology und Intel® Xeon Phi™ Coprozessoren verwendet.

    Sprecher: Georg Zitzlsberger

    Compileroptimierungen mit dem Intel® C++ Compiler

    Was wären Hochsprachen ohne gut optimierende Compiler? Gerade mit der zunehmenden Komplexität der Programmiersprachen und der damit einhergehenden Abstraktion ist es Entwicklern immer weniger möglich direkten Einfluss auf die Optimierungen zu nehmen. Wo C noch scherzhaft als „hardwareunabhängige Assemblersprache“ bezeichnet wird, sind Optimierungen bei C++ auf einer ganz anderen Ebene angesiedelt. Insbesondere sind die Fähigkeiten eines C++ Compilers aus vorliegendem Quellcode möglichst performanten Objektcode zu erzeugen immer stärker gefordert. Hierbei gilt jedoch nicht „one size fits all“. Entwickler müssen sich daher umso mehr mit den Optimierungsoptionen ihres C++ Compilers auseinander setzten. Lernen Sie anhand des Intel® C++ Compilers verschiedenste Optimierungen mit deren Licht- und Schattenseiten kennen. Hierbei werden die wichtigsten Bereiche für C++ abgedeckt, wie Schleifentransformationen, Vektorisierung (SIMD), Cache-Blocking, Linkzeit- und Profilgesteuerte-Optimierung, um nur einige zu nennen. Ebenso wird der Einfluss der Optimierungen auf sensible Fließpunkt-Arithmetik (FP) besprochen.

    Sprecher: Georg Zitzlsberger


Diese Liste kann noch ergänzt bzw. verändert werden.